diff --git a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml index 310f92c118..edebc1bbf0 100644 --- a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml +++ b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml @@ -23,9 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.9.0 (Latest release) + - 1.9.1 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.9.0 - 1.8.6 - 1.8.5 - 1.8.4 diff --git a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml index 9fcb1595a2..dd3024230b 100644 --- a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml +++ b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml @@ -23,9 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.9.0 (Latest release) + - 1.9.1 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.9.0 - 1.8.6 - 1.8.5 - 1.8.4 diff --git a/.github/ISSUE_TEMPLATE/04_other_errors.yaml b/.github/ISSUE_TEMPLATE/04_other_errors.yaml index 73d9fd11d3..29960c267b 100644 --- a/.github/ISSUE_TEMPLATE/04_other_errors.yaml +++ b/.github/ISSUE_TEMPLATE/04_other_errors.yaml @@ -23,9 +23,10 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.9.0 (Latest release) + - 1.9.1 (Latest release) - master (default, unreleased bugfixes) - upcoming (Edge) + - 1.9.0 - 1.8.6 - 1.8.5 - 1.8.4 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0322cbe11f..c84110d7dd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,19 +15,12 @@ jobs: GAME_VERSION: EMERALD GAME_REVISION: 0 GAME_LANGUAGE: ENGLISH - MODERN: 0 COMPARE: 0 UNUSED_ERROR: 1 steps: - name: Checkout uses: actions/checkout@v2 - - name: Checkout agbcc - uses: actions/checkout@v2 - with: - path: agbcc - repository: pret/agbcc - - name: Install binutils run: | sudo apt update @@ -36,27 +29,13 @@ jobs: # gcc-arm-none-eabi is only needed for the modern build # as an alternative to dkP - - name: Install agbcc - run: | - ./build.sh - ./install.sh ../ - working-directory: agbcc - - - name: Agbcc + - name: ROM env: - MODERN: 0 - COMPARE: 0 - run: make -j${nproc} -O all - - - name: Modern - env: - MODERN: 1 COMPARE: 0 run: make -j${nproc} -O all - name: Test env: - MODERN: 1 TEST: 1 run: | make -j${nproc} -O pokeemerald-test.elf diff --git a/CHANGELOG.md b/CHANGELOG.md index 0999ae5f7e..fb2f38af1d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Pokeemerald-Expansion Changelogs ## 1.9.x +- **[Version 1.9.1](docs/changelogs/1.9.x/1.9.1.md) - 🧹 Bugfix Release** - **[Version 1.9.0](docs/changelogs/1.9.x/1.9.0.md) - ✨ Feature Release** ## 1.8.x diff --git a/INSTALL.md b/INSTALL.md index 6349d24fbb..094f7b246a 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -327,7 +327,7 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for libpng is now installed. Continue to [Installing pkg-config (macOS)](#installing-pkg-config-macos) if **pkg-config is not installed**. Otherwise, continue to [Installing devkitARM (macOS)](#installing-devkitarm-macos) if **devkitARM is not installed**. - + If both pkg-config and devkitARM are already installed, go to [Choosing where to store pokeemerald Expansion (macOS)](#choosing-where-to-store-pokeemerald-expansion-macos). ### Installing pkg-config (macOS) @@ -541,7 +541,7 @@ If this works, then proceed to [Installation](#installation). Otherwise, ask for > ``` > Where *\* is the path of the folder [where you chose to store pokeemerald Expansion](#Choosing-where-to-store-pokeemerald-expansion-WSL1). Then run the `git clone` command again. - + Now you're ready to build pokeemerald Expansion. ## Build pokeemerald Expansion @@ -596,58 +596,6 @@ To build **pokeemerald.elf** with debug symbols under a modern toolchain: ```bash make DINFO=1 ``` -Note that this is not necessary for a non-modern (agbcc) build since those are built with debug symbols by default. - -### agbcc - -
- Deprecated; installing agbcc is optional since 1.7.0. - -1. Install agbcc into pokeemerald-expansion. The commands to run depend on certain conditions. **You should only follow one of the listed instructions**: -- If agbcc has **not been built before** in the folder where you chose to store pokeemerald Expansion, run the following commands to build and install it into pokeemerald-expansion: - - ```bash - git clone https://github.com/pret/agbcc - cd agbcc - ./build.sh - ./install.sh ../pokeemerald-expansion - ``` - -- **Otherwise**, if agbcc has been built before (e.g. if the git clone above fails), but was **last built on a different terminal** than the one currently used (only relevant to Windows, e.g. switching from msys2 to WSL1), then run the following commands to build and install it into pokeemerald-expansion: - - ```bash - cd agbcc - git clean -fX - ./build.sh - ./install.sh ../pokeemerald-expansion - ``` - -- **Otherwise**, if agbcc has been built before on the same terminal, run the following commands to install agbcc into pokeemerald-expansion: - - ```bash - cd agbcc - ./install.sh ../pokeemerald-expansion - ``` - -
- Note... - - > If building agbcc or pokeemerald results in an error, try deleting the agbcc folder and re-installing agbcc as if it has not been built before. -
- -2. Once agbcc is installed, change directory back to the base directory where pokeemerald-expansion and agbcc are stored: - - ```bash - cd .. - ``` - -3. To compile with agbcc: - - ```bash - make agbcc - ``` - -
# Useful additional tools diff --git a/Makefile b/Makefile index 055bc848b2..52bfe1e93f 100644 --- a/Makefile +++ b/Makefile @@ -25,10 +25,8 @@ AS := $(PREFIX)as LD := $(PREFIX)ld -# note: the makefile must be set up so MODERNCC is never called -# if MODERN=0 -MODERNCC := $(PREFIX)gcc -PATH_MODERNCC := PATH="$(PATH)" $(MODERNCC) +ARMCC := $(PREFIX)gcc +PATH_ARMCC := PATH="$(PATH)" $(ARMCC) ifeq ($(OS),Windows_NT) EXE := .exe @@ -40,45 +38,25 @@ TITLE := POKEMON EMER GAME_CODE := BPEE MAKER_CODE := 01 REVISION := 0 -MODERN ?= 1 TEST ?= 0 ANALYZE ?= 0 UNUSED_ERROR ?= 0 - -ifeq (agbcc,$(MAKECMDGOALS)) - MODERN := 0 -endif +DEBUG ?= 0 ifeq (check,$(MAKECMDGOALS)) TEST := 1 endif -# use arm-none-eabi-cpp for macOS -# as macOS's default compiler is clang -# and clang's preprocessor will warn on \u -# when preprocessing asm files, expecting a unicode literal -# we can't unconditionally use arm-none-eabi-cpp -# as installations which install binutils-arm-none-eabi -# don't come with it -ifneq ($(MODERN),1) - ifeq ($(shell uname -s),Darwin) - CPP := $(PREFIX)cpp - else - CPP := $(CC) -E - endif -else - CPP := $(PREFIX)cpp +ifeq (debug,$(MAKECMDGOALS)) + DEBUG := 1 endif -ROM_NAME := pokeemerald_agbcc.gba +CPP := $(PREFIX)cpp + +ROM_NAME := pokeemerald.gba ELF_NAME := $(ROM_NAME:.gba=.elf) MAP_NAME := $(ROM_NAME:.gba=.map) -OBJ_DIR_NAME := build/emerald - -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 +OBJ_DIR_NAME := build/modern SHELL := bash -o pipefail @@ -86,14 +64,9 @@ ELF = $(ROM:.gba=.elf) MAP = $(ROM:.gba=.map) SYM = $(ROM:.gba=.sym) -TEST_OBJ_DIR_NAME_MODERN := build/modern-test -TEST_OBJ_DIR_NAME_AGBCC := build/test +TEST_OBJ_DIR_NAME := build/modern-test +DEBUG_OBJ_DIR_NAME := build/modern-debug -ifeq ($(MODERN),0) -TEST_OBJ_DIR_NAME := $(TEST_OBJ_DIR_NAME_AGBCC) -else -TEST_OBJ_DIR_NAME := $(TEST_OBJ_DIR_NAME_MODERN) -endif TESTELF = $(ROM:.gba=-test.elf) HEADLESSELF = $(ROM:.gba=-test-headless.elf) @@ -116,18 +89,11 @@ SONG_BUILDDIR = $(OBJ_DIR)/$(SONG_SUBDIR) MID_BUILDDIR = $(OBJ_DIR)/$(MID_SUBDIR) TEST_BUILDDIR = $(OBJ_DIR)/$(TEST_SUBDIR) -ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=$(MODERN) +ASFLAGS := -mcpu=arm7tdmi --defsym MODERN=1 + +CC1 = $(shell $(PATH_ARMCC) --print-prog-name=cc1) -quiet +override CFLAGS += -mthumb -mthumb-interwork -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 ($(MODERN),0) -CC1 := tools/agbcc/bin/agbcc$(EXE) -override CFLAGS += -mthumb-interwork -Wimplicit -Wparentheses -Werror -O2 -fhex-asm -g -ROM := $(ROM_NAME) -OBJ_DIR := $(OBJ_DIR_NAME) -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 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init ifeq ($(ANALYZE),1) override CFLAGS += -fanalyzer endif @@ -137,10 +103,15 @@ ifneq ($(GITHUB_REPOSITORY_OWNER),rh-hideout) override CFLAGS += -Wno-error=unused-variable -Wno-error=unused-const-variable -Wno-error=unused-parameter -Wno-error=unused-function -Wno-error=unused-but-set-parameter -Wno-error=unused-but-set-variable -Wno-error=unused-value -Wno-error=unused-local-typedefs endif endif -ROM := $(MODERN_ROM_NAME) -OBJ_DIR := $(MODERN_OBJ_DIR_NAME) -LIBPATH := -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libnosys.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libc.a))" +ROM := $(ROM_NAME) +OBJ_DIR := $(OBJ_DIR_NAME) +LIBPATH := -L "$(dir $(shell $(PATH_ARMCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(PATH_ARMCC) -mthumb -print-file-name=libnosys.a))" -L "$(dir $(shell $(PATH_ARMCC) -mthumb -print-file-name=libc.a))" LIB := $(LIBPATH) -lc -lnosys -lgcc -L../../libagbsyscall -lagbsyscall + +ifeq ($(DEBUG),1) +override CFLAGS += -Og -g +else +override CFLAGS += -O2 endif ifeq ($(TESTELF),$(MAKECMDGOALS)) @@ -150,12 +121,13 @@ endif ifeq ($(TEST),1) OBJ_DIR := $(TEST_OBJ_DIR_NAME) endif - -CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=$(MODERN) -DTESTING=$(TEST) -ifneq ($(MODERN),1) -CPPFLAGS += -I tools/agbcc/include -I tools/agbcc -nostdinc -undef +ifeq ($(DEBUG),1) +OBJ_DIR := $(DEBUG_OBJ_DIR_NAME) endif + +CPPFLAGS := -iquote include -iquote $(GFLIB_SUBDIR) -Wno-trigraphs -DMODERN=1 -DTESTING=$(TEST) + SHA1 := $(shell { command -v sha1sum || command -v shasum; } 2>/dev/null) -c GFX := tools/gbagfx/gbagfx$(EXE) AIF := tools/aif2pcm/aif2pcm$(EXE) @@ -191,7 +163,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 agbcc modern tidymodern tidynonmodern check history +.PHONY: all rom clean compare tidy tools check-tools mostlyclean clean-tools clean-check-tools $(TOOLDIRS) $(CHECKTOOLDIRS) libagbsyscall agbcc modern tidymodern tidynonmodern check history debug infoshell = $(foreach line, $(shell $1 | sed "s/ /__SPACE__/g"), $(info $(subst __SPACE__, ,$(line)))) @@ -199,7 +171,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 agbcc modern check libagbsyscall syms $(TESTELF),$(MAKECMDGOALS))) +ifeq (,$(filter-out all rom compare agbcc modern check libagbsyscall syms $(TESTELF) debug,$(MAKECMDGOALS))) $(call infoshell, $(MAKE) -f make_tools.mk) else NODEP ?= 1 @@ -291,7 +263,7 @@ clean-tools: clean-check-tools: @$(foreach tooldir,$(CHECKTOOLDIRS),$(MAKE) clean -C $(tooldir);) -mostlyclean: tidynonmodern tidymodern tidycheck +mostlyclean: tidynonmodern tidymodern tidycheck tidydebug find sound -iname '*.bin' -exec rm {} + rm -f $(MID_SUBDIR)/*.s find . \( -iname '*.1bpp' -o -iname '*.4bpp' -o -iname '*.8bpp' -o -iname '*.gbapal' -o -iname '*.lz' -o -iname '*.rl' -o -iname '*.latfont' -o -iname '*.hwjpnfont' -o -iname '*.fwjpnfont' \) -exec rm {} + @@ -301,25 +273,18 @@ mostlyclean: tidynonmodern tidymodern tidycheck rm -f $(AUTO_GEN_TARGETS) @$(MAKE) clean -C libagbsyscall -tidy: tidynonmodern tidymodern tidycheck +tidy: tidymodern tidycheck tidydebug -tidynonmodern: +tidymodern: rm -f $(ROM_NAME) $(ELF_NAME) $(MAP_NAME) rm -rf $(OBJ_DIR_NAME) -tidymodern: - rm -f $(MODERN_ROM_NAME) $(MODERN_ELF_NAME) $(MODERN_MAP_NAME) - rm -rf $(MODERN_OBJ_DIR_NAME) - tidycheck: rm -f $(TESTELF) $(HEADLESSELF) - rm -rf $(TEST_OBJ_DIR_NAME_MODERN) - rm -rf $(TEST_OBJ_DIR_NAME_AGBCC) + rm -rf $(TEST_OBJ_DIR_NAME) - -ifneq ($(MODERN),0) -$(C_BUILDDIR)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member -endif +tidydebug: + rm -rf $(DEBUG_OBJ_DIR_NAME) include graphics_file_rules.mk include map_data_rules.mk @@ -346,35 +311,24 @@ sound/%.bin: sound/%.aif ; $(AIF) $< $@ COMPETITIVE_PARTY_SYNTAX := $(shell PATH="$(PATH)"; echo 'COMPETITIVE_PARTY_SYNTAX' | $(CPP) $(CPPFLAGS) -imacros include/global.h | tail -n1) ifeq ($(COMPETITIVE_PARTY_SYNTAX),1) -%.h: %.party tools ; $(CPP) $(CPPFLAGS) -traditional-cpp - < $< | sed '/#[^p]/d' | $(TRAINERPROC) -o $@ -i $< - +%.h: %.party tools ; $(CPP) $(CPPFLAGS) -traditional-cpp - < $< | $(TRAINERPROC) -o $@ -i $< - endif -ifeq ($(MODERN),0) -$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) -$(C_BUILDDIR)/libc.o: CFLAGS := -O2 - -$(C_BUILDDIR)/siirtc.o: CFLAGS := -mthumb-interwork - -$(C_BUILDDIR)/agb_flash.o: CFLAGS := -O -mthumb-interwork -$(C_BUILDDIR)/agb_flash_1m.o: CFLAGS := -O -mthumb-interwork -$(C_BUILDDIR)/agb_flash_mx.o: CFLAGS := -O -mthumb-interwork - -$(C_BUILDDIR)/m4a.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE) - -$(C_BUILDDIR)/record_mixing.o: CFLAGS += -ffreestanding -$(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)/berry_crush.o: override CFLAGS += -Wno-address-of-packed-member $(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 # Annoyingly we can't turn this on just for src/data/trainers.h $(C_BUILDDIR)/data.o: CFLAGS += -fno-show-column -fno-diagnostics-show-caret -endif ifeq ($(DINFO),1) override CFLAGS += -g endif +ifeq ($(NOOPT),1) +override CFLAGS := $(filter-out -O1 -Og -O2,$(CFLAGS)) +override CFLAGS += -O0 +endif + # The dep rules have to be explicit or else missing files won't be reported. # As a side effect, they're evaluated immediately instead of when the rule is invoked. # It doesn't look like $(shell) can be deferred so there might not be a better way. @@ -488,13 +442,8 @@ $1: $2 $$(shell $(SCANINC) -I include -I tools/agbcc/include -I gflib $2) endef $(foreach src, $(TEST_SRCS), $(eval $(call TEST_DEP,$(patsubst $(TEST_SUBDIR)/%.c,$(TEST_BUILDDIR)/%.o,$(src)),$(src),$(patsubst $(TEST_SUBDIR)/%.c,%,$(src))))) -ifeq ($(MODERN),0) -LD_SCRIPT := ld_script.ld -LD_SCRIPT_DEPS := $(OBJ_DIR)/sym_bss.ld $(OBJ_DIR)/sym_common.ld $(OBJ_DIR)/sym_ewram.ld -else LD_SCRIPT := ld_script_modern.ld LD_SCRIPT_DEPS := -endif $(OBJ_DIR)/ld_script.ld: $(LD_SCRIPT) $(LD_SCRIPT_DEPS) cd $(OBJ_DIR) && sed "s#tools/#../../tools/#g" ../../$(LD_SCRIPT) > ld_script.ld @@ -518,6 +467,8 @@ agbcc: modern: all +debug: all + LD_SCRIPT_TEST := ld_script_test.ld $(OBJ_DIR)/ld_script_test.ld: $(LD_SCRIPT_TEST) $(LD_SCRIPT_DEPS) @@ -541,7 +492,7 @@ check: $(TESTELF) $(ROMTESTHYDRA) $(ROMTEST) $(OBJCOPY) $(HEADLESSELF) libagbsyscall: - @$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) MODERN=$(MODERN) + @$(MAKE) -C libagbsyscall TOOLCHAIN=$(TOOLCHAIN) MODERN=1 ################### ### Symbol file ### diff --git a/README.md b/README.md index 3a87ac27f6..f09f5a7d90 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ pokeemerald-expansion is a decomp hack base project based off pret's [pokeemeral If you use pokeemerald-expansion in your hack, please add RHH (Rom Hacking Hideout) to your credits list. Optionally, you can list the version used, so it can help players know what features to expect. You can phrase it as the following: ``` -Based off RHH's pokeemerald-expansion 1.9.0 https://github.com/rh-hideout/pokeemerald-expansion/ +Based off RHH's pokeemerald-expansion 1.9.1 https://github.com/rh-hideout/pokeemerald-expansion/ ``` ## What features are included? diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc index 12439efc4a..5982716bc9 100644 --- a/asm/macros/battle_script.inc +++ b/asm/macros/battle_script.inc @@ -507,9 +507,9 @@ .byte \battler .endm - .macro trainerslidein battler:req + .macro trainerslidein position:req .byte 0x53 - .byte \battler + .byte \position .endm .macro playse song:req @@ -1670,14 +1670,66 @@ callnative BS_DamageToQuarterTargetHP .endm -@ various command changed to more readable macros - .macro cancelmultiturnmoves battler:req - various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES + .macro ficklebeamdamagecalculation + callnative BS_FickleBeamDamageCalculation + .endm + + .macro trytarshot failInstr:req + callnative BS_TryTarShot + .4byte \failInstr + .endm + + .macro jumpifteainvulnerable battler:req, jumpInstr:req + callnative BS_TeatimeInvul + .byte \battler + .4byte \jumpInstr + .endm + + .macro jumpifteanoberry failInstr:req + callnative BS_TeatimeTargets + .4byte \failInstr + .endm + + .macro trywindriderpower battler:req, failInstr:req + callnative BS_TryWindRiderPower + .byte \battler + .4byte \failInstr + .endm + + .macro activateweatherchangeabilities battler:req + callnative BS_ActivateWeatherChangeAbilities + .byte \battler + .endm + + .macro activateterrainchangeabilities battler:req + callnative BS_ActivateTerrainChangeAbilities + .byte \battler .endm @ Stores Healing Wish effect. .macro storehealingwish battler:req - various \battler, VARIOUS_STORE_HEALING_WISH + callnative BS_StoreHealingWish + .byte \battler + .endm + + .macro hitswitchtargetfailed + callnative BS_HitSwitchTargetFailed + .endm + + .macro tryrevivalblessing, failInstr:req + callnative BS_TryRevivalBlessing + .4byte \failInstr + .endm + + .macro jumpifblockedbysoundproof battler:req, failInstr:req + callnative BS_JumpIfBlockedBySoundproof + .byte \battler + .4byte \failInstr + .endm + +@ various command changed to more readable macros + .macro cancelmultiturnmoves battler:req + various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES .endm .macro setmagiccoattarget battler:req @@ -2206,11 +2258,6 @@ .4byte \failInstr .endm - .macro trytarshot battler:req, failInstr:req - various \battler, VARIOUS_TRY_TAR_SHOT - .4byte \failInstr - .endm - .macro cantarshotwork battler:req, failInstr:req various \battler, VARIOUS_CAN_TAR_SHOT_WORK .4byte \failInstr @@ -2226,16 +2273,6 @@ .4byte \failInstr .endm - .macro jumpifteanoberry jumpInstr:req - various BS_ATTACKER, VARIOUS_TEATIME_TARGETS - .4byte \jumpInstr - .endm - - .macro jumpifteainvulnerable battler:req, jumpInstr:req - various \battler, VARIOUS_TEATIME_INVUL - .4byte \jumpInstr - .endm - .macro curecertainstatuses battler:req various \battler, VARIOUS_CURE_CERTAIN_STATUSES .endm @@ -2280,19 +2317,6 @@ .byte \stat .endm - .macro trywindriderpower battler:req, failInstr:req - various \battler, VARIOUS_TRY_WIND_RIDER_POWER - .4byte \failInstr - .endm - - .macro activateweatherchangeabilities battler:req - various \battler, VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES - .endm - - .macro activateterrainchangeabilities battler:req - various \battler, VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES - .endm - @ helpful macros .macro setstatchanger stat:req, stages:req, down:req setbyte sSTATCHANGER, \stat | \stages << 3 | \down << 7 @@ -2487,15 +2511,6 @@ waitmessage B_WAIT_TIME_LONG .endm - .macro hitswitchtargetfailed - various 0, VARIOUS_HIT_SWITCH_TARGET_FAILED - .endm - - .macro tryrevivalblessing, jumpInstr:req - various 0, VARIOUS_TRY_REVIVAL_BLESSING - .4byte \jumpInstr - .endm - @ Will jump to script pointer if the specified battler has or has not fainted. .macro jumpiffainted battler:req, value:req, ptr:req getbattlerfainted \battler diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 83338673cf..89a6a46830 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1798,7 +1798,7 @@ .4byte \text .endm - @ Equivalent to fadescreen but copies gPlttBufferUnfaded to gPaletteDecompressionBuffer on the fade out + @ Equivalent to fadescreen but copies gPlttBufferUnfaded to gDecompressionBuffer on the fade out @ and the reverse on the fade in, in effect saving gPlttBufferUnfaded to restore it. .macro fadescreenswapbuffers mode:req .byte 0xdc @@ -2321,3 +2321,20 @@ .macro togglefakertc callnative Script_ToggleFakeRtc .endm + + @ ============================ @ + @ ITEM DESCRIPTION HEADER MACROS + @ Used with OW_SHOW_ITEM_DESCRIPTIONS config + .macro showitemdescription + callnative ScriptShowItemDescription + .byte 0 + .endm + + .macro showberrydescription + callnative ScriptShowItemDescription + .byte 1 + .endm + + .macro hideitemdescription + callnative ScriptHideItemDescription + .endm diff --git a/charmap.txt b/charmap.txt index 4c9f2e0497..e5a901d6d9 100644 --- a/charmap.txt +++ b/charmap.txt @@ -45,6 +45,7 @@ SUPER_ER = 2C LV = 34 '=' = 35 ';' = 36 +V_D_ARROW = 38 '¿' = 51 '¡' = 52 PK = 53 diff --git a/common_syms/AgbRfu_LinkManager.txt b/common_syms/AgbRfu_LinkManager.txt deleted file mode 100644 index 7ff8cd53dd..0000000000 --- a/common_syms/AgbRfu_LinkManager.txt +++ /dev/null @@ -1 +0,0 @@ -lman diff --git a/common_syms/agb_flash.txt b/common_syms/agb_flash.txt deleted file mode 100644 index cb421ec80d..0000000000 --- a/common_syms/agb_flash.txt +++ /dev/null @@ -1,10 +0,0 @@ -gFlashTimeoutFlag -PollFlashStatus -WaitForFlashWrite -ProgramFlashSector -gFlash -ProgramFlashByte -gFlashNumRemainingBytes -EraseFlashChip -EraseFlashSector -gFlashMaxTime diff --git a/common_syms/apprentice.txt b/common_syms/apprentice.txt deleted file mode 100644 index 0d3569dcbb..0000000000 --- a/common_syms/apprentice.txt +++ /dev/null @@ -1,3 +0,0 @@ -gApprenticePartyMovesData -gApprenticeQuestionData -gApprenticeFunc diff --git a/common_syms/battle_anim_throw.txt b/common_syms/battle_anim_throw.txt deleted file mode 100755 index 5e2e8b3ff3..0000000000 --- a/common_syms/battle_anim_throw.txt +++ /dev/null @@ -1,3 +0,0 @@ -gMonShrinkDuration -gMonShrinkDelta -gMonShrinkDistance diff --git a/common_syms/battle_controllers.txt b/common_syms/battle_controllers.txt deleted file mode 100644 index 0b3c25266a..0000000000 --- a/common_syms/battle_controllers.txt +++ /dev/null @@ -1,3 +0,0 @@ -gBattlerControllerFuncs -gBattleControllerData -gBattlerControllerEndFuncs diff --git a/common_syms/battle_factory_screen.txt b/common_syms/battle_factory_screen.txt deleted file mode 100644 index 3ddeb6d3b1..0000000000 --- a/common_syms/battle_factory_screen.txt +++ /dev/null @@ -1 +0,0 @@ -gFactorySelect_CurrentOptionFunc diff --git a/common_syms/battle_main.txt b/common_syms/battle_main.txt deleted file mode 100644 index 7a9faa5a13..0000000000 --- a/common_syms/battle_main.txt +++ /dev/null @@ -1,7 +0,0 @@ -gPreBattleCallback1 -gBattleMainFunc -gBattleResults -gLeveledUpInBattle -gHealthboxSpriteIds -gMultiUsePlayerCursor -gNumberOfMovesToChoose diff --git a/common_syms/battle_tower.txt b/common_syms/battle_tower.txt deleted file mode 100644 index 7371109d51..0000000000 --- a/common_syms/battle_tower.txt +++ /dev/null @@ -1 +0,0 @@ -gFrontierTempParty diff --git a/common_syms/berry_blender.txt b/common_syms/berry_blender.txt deleted file mode 100644 index 1b15a33d61..0000000000 --- a/common_syms/berry_blender.txt +++ /dev/null @@ -1 +0,0 @@ -gInGameOpponentsNo diff --git a/common_syms/bg.txt b/common_syms/bg.txt deleted file mode 100644 index 0a3c3aecca..0000000000 --- a/common_syms/bg.txt +++ /dev/null @@ -1 +0,0 @@ -gWindowTileAutoAllocEnabled diff --git a/common_syms/contest.txt b/common_syms/contest.txt deleted file mode 100644 index 6a519fb463..0000000000 --- a/common_syms/contest.txt +++ /dev/null @@ -1 +0,0 @@ -gContestRngValue diff --git a/common_syms/contest_painting.txt b/common_syms/contest_painting.txt deleted file mode 100644 index 32bb8be161..0000000000 --- a/common_syms/contest_painting.txt +++ /dev/null @@ -1,4 +0,0 @@ -gContestMonPixels -gImageProcessingContext -gContestPaintingWinner -gContestPaintingMonPalette diff --git a/common_syms/ereader_screen.txt b/common_syms/ereader_screen.txt deleted file mode 100644 index 2189eedbc9..0000000000 --- a/common_syms/ereader_screen.txt +++ /dev/null @@ -1 +0,0 @@ -gEReaderData diff --git a/common_syms/evolution_scene.txt b/common_syms/evolution_scene.txt deleted file mode 100644 index 137cd3e05d..0000000000 --- a/common_syms/evolution_scene.txt +++ /dev/null @@ -1 +0,0 @@ -gCB2_AfterEvolution diff --git a/common_syms/faraway_island.txt b/common_syms/faraway_island.txt deleted file mode 100755 index e02ca2ec25..0000000000 --- a/common_syms/faraway_island.txt +++ /dev/null @@ -1,3 +0,0 @@ -sPlayerToMewDeltaX -sPlayerToMewDeltaY -sMewDirectionCandidates diff --git a/common_syms/field_camera.txt b/common_syms/field_camera.txt deleted file mode 100644 index 02301ce23c..0000000000 --- a/common_syms/field_camera.txt +++ /dev/null @@ -1,3 +0,0 @@ -gFieldCamera -gTotalCameraPixelOffsetY -gTotalCameraPixelOffsetX diff --git a/common_syms/field_control_avatar.txt b/common_syms/field_control_avatar.txt deleted file mode 100644 index 268f60c641..0000000000 --- a/common_syms/field_control_avatar.txt +++ /dev/null @@ -1 +0,0 @@ -gSelectedObjectEvent diff --git a/common_syms/field_specials.txt b/common_syms/field_specials.txt deleted file mode 100644 index 7adb3f6692..0000000000 --- a/common_syms/field_specials.txt +++ /dev/null @@ -1 +0,0 @@ -gScrollableMultichoice_ListMenuTemplate diff --git a/common_syms/fieldmap.txt b/common_syms/fieldmap.txt deleted file mode 100644 index 0ead758462..0000000000 --- a/common_syms/fieldmap.txt +++ /dev/null @@ -1 +0,0 @@ -gBackupMapLayout diff --git a/common_syms/image_processing_effects.txt b/common_syms/image_processing_effects.txt deleted file mode 100644 index 134f7e88b2..0000000000 --- a/common_syms/image_processing_effects.txt +++ /dev/null @@ -1,10 +0,0 @@ -gCanvasColumnStart -gCanvasPixels -gCanvasRowEnd -gCanvasHeight -gCanvasColumnEnd -gCanvasRowStart -gCanvasMonPersonality -gCanvasWidth -gCanvasPalette -gCanvasPaletteStart diff --git a/common_syms/intro.txt b/common_syms/intro.txt deleted file mode 100644 index d069b1014f..0000000000 --- a/common_syms/intro.txt +++ /dev/null @@ -1,2 +0,0 @@ -gIntroFrameCounter -gMultibootProgramStruct diff --git a/common_syms/librfu_rfu.txt b/common_syms/librfu_rfu.txt deleted file mode 100644 index 4b742dcd25..0000000000 --- a/common_syms/librfu_rfu.txt +++ /dev/null @@ -1,5 +0,0 @@ -gRfuSlotStatusUNI -gRfuSlotStatusNI -gRfuLinkStatus -gRfuStatic -gRfuFixed diff --git a/common_syms/librfu_sio32id.txt b/common_syms/librfu_sio32id.txt deleted file mode 100644 index 97395e84b3..0000000000 --- a/common_syms/librfu_sio32id.txt +++ /dev/null @@ -1 +0,0 @@ -gRfuSIO32Id diff --git a/common_syms/librfu_stwi.txt b/common_syms/librfu_stwi.txt deleted file mode 100644 index a1f7735535..0000000000 --- a/common_syms/librfu_stwi.txt +++ /dev/null @@ -1 +0,0 @@ -gSTWIStatus diff --git a/common_syms/link.txt b/common_syms/link.txt deleted file mode 100644 index 4118d1eb4b..0000000000 --- a/common_syms/link.txt +++ /dev/null @@ -1,35 +0,0 @@ -gLinkPartnersHeldKeys -gLinkDebugSeed -gLocalLinkPlayerBlock -gLinkErrorOccurred -gLinkDebugFlags -gLinkFiller1 -gRemoteLinkPlayersNotReceived -gBlockReceivedStatus -gLinkFiller2 -gLinkHeldKeys -gRecvCmds -gLinkStatus -gLinkDummy1 -gLinkDummy2 -gReadyToExitStandby -gReadyToCloseLink -gReadyCloseLinkType -gSuppressLinkErrorMessage -gWirelessCommType -gSavedLinkPlayerCount -gSendCmd -gSavedMultiplayerId -gReceivedRemoteLinkPlayers -gLinkTestBGInfo -gLinkCallback -gShouldAdvanceLinkState -gLinkTestBlockChecksums -gBlockRequestType -gLinkFiller3 -gLinkFiller4 -gLinkFiller5 -gLastSendQueueCount -gLink -gLastRecvQueueCount -gLinkSavedIme diff --git a/common_syms/link_rfu_2.txt b/common_syms/link_rfu_2.txt deleted file mode 100644 index 4b8f02bad8..0000000000 --- a/common_syms/link_rfu_2.txt +++ /dev/null @@ -1,2 +0,0 @@ -gRfuAPIBuffer -gRfu diff --git a/common_syms/list_menu.txt b/common_syms/list_menu.txt deleted file mode 100644 index ed5343618c..0000000000 --- a/common_syms/list_menu.txt +++ /dev/null @@ -1,2 +0,0 @@ -gListMenuOverride -gMultiuseListMenuTemplate diff --git a/common_syms/load_save.txt b/common_syms/load_save.txt deleted file mode 100644 index 2d3d9b802f..0000000000 --- a/common_syms/load_save.txt +++ /dev/null @@ -1,4 +0,0 @@ -gFlashMemoryPresent -gSaveBlock1Ptr -gSaveBlock2Ptr -gPokemonStoragePtr diff --git a/common_syms/m4a.txt b/common_syms/m4a.txt deleted file mode 100644 index 0d6b13a79b..0000000000 --- a/common_syms/m4a.txt +++ /dev/null @@ -1,12 +0,0 @@ -gSoundInfo -gPokemonCrySongs -gPokemonCryMusicPlayers -gMPlayInfo_BGM -gMPlayJumpTable -gCgbChans -gMPlayInfo_SE1 -gMPlayInfo_SE2 -gPokemonCryTracks -gPokemonCrySong -gMPlayMemAccArea -gMPlayInfo_SE3 diff --git a/common_syms/main.txt b/common_syms/main.txt deleted file mode 100644 index f1f8076adf..0000000000 --- a/common_syms/main.txt +++ /dev/null @@ -1,10 +0,0 @@ -gKeyRepeatStartDelay -gLinkTransferringData -gMain -gKeyRepeatContinueDelay -gSoftResetDisabled -gIntrTable -gLinkVSyncDisabled -IntrMain_Buffer -gPcmDmaCounter -gAgbMainLoop_sp diff --git a/common_syms/mauville_old_man.txt b/common_syms/mauville_old_man.txt deleted file mode 100644 index 9d77b8692b..0000000000 --- a/common_syms/mauville_old_man.txt +++ /dev/null @@ -1 +0,0 @@ -gBardSong diff --git a/common_syms/overworld.txt b/common_syms/overworld.txt deleted file mode 100644 index dcada0bbef..0000000000 --- a/common_syms/overworld.txt +++ /dev/null @@ -1,8 +0,0 @@ -gOverworldTilemapBuffer_Bg2 -gOverworldTilemapBuffer_Bg1 -gOverworldTilemapBuffer_Bg3 -gHeldKeyCodeToSend -gFieldCallback -gFieldCallback2 -gLocalLinkPlayerId -gFieldLinkPlayerCount diff --git a/common_syms/party_menu.txt b/common_syms/party_menu.txt deleted file mode 100644 index 6ed37392c2..0000000000 --- a/common_syms/party_menu.txt +++ /dev/null @@ -1 +0,0 @@ -gItemUseCB diff --git a/common_syms/pokedex.txt b/common_syms/pokedex.txt deleted file mode 100644 index c7a297b2af..0000000000 --- a/common_syms/pokedex.txt +++ /dev/null @@ -1,2 +0,0 @@ -gUnusedPokedexU8 -gPokedexVBlankCB diff --git a/common_syms/pokedex_cry_screen.txt b/common_syms/pokedex_cry_screen.txt deleted file mode 100644 index d16ec36d64..0000000000 --- a/common_syms/pokedex_cry_screen.txt +++ /dev/null @@ -1 +0,0 @@ -gDexCryScreenState diff --git a/common_syms/random.txt b/common_syms/random.txt deleted file mode 100644 index 8037c69586..0000000000 --- a/common_syms/random.txt +++ /dev/null @@ -1,2 +0,0 @@ -gRngValue -gRng2Value diff --git a/common_syms/rtc.txt b/common_syms/rtc.txt deleted file mode 100644 index fa00a34d51..0000000000 --- a/common_syms/rtc.txt +++ /dev/null @@ -1 +0,0 @@ -gLocalTime diff --git a/common_syms/save.txt b/common_syms/save.txt deleted file mode 100644 index 131031d506..0000000000 --- a/common_syms/save.txt +++ /dev/null @@ -1,13 +0,0 @@ -gLastWrittenSector -gLastSaveCounter -gLastKnownGoodSector -gDamagedSaveSectors -gSaveCounter -gReadWriteSector -gIncrementalSectorId -gSaveUnusedVar -gSaveFileStatus -gGameContinueCallback -gRamSaveSectorLocations -gSaveUnusedVar2 -gSaveAttemptStatus diff --git a/common_syms/sound.txt b/common_syms/sound.txt deleted file mode 100644 index 0f6f2fc758..0000000000 --- a/common_syms/sound.txt +++ /dev/null @@ -1 +0,0 @@ -gDisableMusic diff --git a/common_syms/sprite.txt b/common_syms/sprite.txt deleted file mode 100644 index 627c01c0d0..0000000000 --- a/common_syms/sprite.txt +++ /dev/null @@ -1,2 +0,0 @@ -gOamMatrixAllocBitmap -gReservedSpritePaletteCount diff --git a/common_syms/start_menu.txt b/common_syms/start_menu.txt deleted file mode 100644 index 05beaf57c2..0000000000 --- a/common_syms/start_menu.txt +++ /dev/null @@ -1 +0,0 @@ -gMenuCallback diff --git a/common_syms/task.txt b/common_syms/task.txt deleted file mode 100644 index 6601bd11bb..0000000000 --- a/common_syms/task.txt +++ /dev/null @@ -1 +0,0 @@ -gTasks diff --git a/common_syms/text.txt b/common_syms/text.txt deleted file mode 100644 index cd8886e5b1..0000000000 --- a/common_syms/text.txt +++ /dev/null @@ -1,4 +0,0 @@ -gFonts -gDisableTextPrinters -gCurGlyph -gTextFlags diff --git a/common_syms/trainer_see.txt b/common_syms/trainer_see.txt deleted file mode 100644 index 0b30a632a0..0000000000 --- a/common_syms/trainer_see.txt +++ /dev/null @@ -1,5 +0,0 @@ -gWhichTrainerToFaceAfterBattle -gPostBattleMovementScript -gApproachingTrainers -gNoOfApproachingTrainers -gTrainerApproachedPlayer diff --git a/common_syms/tv.txt b/common_syms/tv.txt deleted file mode 100644 index 0370f65e1f..0000000000 --- a/common_syms/tv.txt +++ /dev/null @@ -1,4 +0,0 @@ -sCurTVShowSlot -sTV_SecretBaseVisitMovesTemp -sTV_DecorationsBuffer -sTV_SecretBaseVisitMonsTemp diff --git a/common_syms/window.txt b/common_syms/window.txt deleted file mode 100644 index 24c093a226..0000000000 --- a/common_syms/window.txt +++ /dev/null @@ -1,2 +0,0 @@ -gTransparentTileNumber -gWindowBgTilemapBuffers diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s index f842b8c113..14f9a3f592 100644 --- a/data/battle_anim_scripts.s +++ b/data/battle_anim_scripts.s @@ -14,92 +14,8 @@ .section script_data, "aw", %progbits - .align 2 -gMovesWithQuietBGM:: - .2byte MOVE_SING, MOVE_PERISH_SONG, MOVE_GRASS_WHISTLE, 0xFFFF - - .align 2 -gBattleAnims_StatusConditions:: - .4byte Status_Poison @ B_ANIM_STATUS_PSN - .4byte Status_Confusion @ B_ANIM_STATUS_CONFUSION - .4byte Status_Burn @ B_ANIM_STATUS_BRN - .4byte Status_Infatuation @ B_ANIM_STATUS_INFATUATION - .4byte Status_Sleep @ B_ANIM_STATUS_SLP - .4byte Status_Paralysis @ B_ANIM_STATUS_PRZ - .4byte Status_Freeze @ B_ANIM_STATUS_FRZ - .4byte Status_Curse @ B_ANIM_STATUS_CURSED - .4byte Status_Nightmare @ B_ANIM_STATUS_NIGHTMARE - .4byte Status_Powder - - .align 2 -gBattleAnims_General:: - .4byte General_StatsChange @ B_ANIM_STATS_CHANGE - .4byte General_SubstituteFade @ B_ANIM_SUBSTITUTE_FADE - .4byte General_SubstituteAppear @ B_ANIM_SUBSTITUTE_APPEAR - .4byte General_PokeblockThrow @ B_ANIM_POKEBLOCK_THROW - .4byte General_ItemKnockoff @ B_ANIM_ITEM_KNOCKOFF - .4byte General_TurnTrap @ B_ANIM_TURN_TRAP - .4byte General_HeldItemEffect @ B_ANIM_HELD_ITEM_EFFECT - .4byte General_SmokeballEscape @ B_ANIM_SMOKEBALL_ESCAPE - .4byte General_HangedOn @ B_ANIM_HANGED_ON - .4byte General_Rain @ B_ANIM_RAIN_CONTINUES - .4byte General_Sun @ B_ANIM_SUN_CONTINUES - .4byte General_Sandstorm @ B_ANIM_SANDSTORM_CONTINUES - .4byte General_Hail @ B_ANIM_HAIL_CONTINUES - .4byte General_LeechSeedDrain @ B_ANIM_LEECH_SEED_DRAIN - .4byte General_MonHit @ B_ANIM_MON_HIT - .4byte General_ItemSteal @ B_ANIM_ITEM_STEAL - .4byte General_SnatchMove @ B_ANIM_SNATCH_MOVE - .4byte General_FutureSightHit @ B_ANIM_FUTURE_SIGHT_HIT - .4byte General_DoomDesireHit @ B_ANIM_DOOM_DESIRE_HIT - .4byte General_FocusPunchSetUp @ B_ANIM_FOCUS_PUNCH_SETUP - .4byte General_IngrainHeal @ B_ANIM_INGRAIN_HEAL - .4byte General_WishHeal @ B_ANIM_WISH_HEAL - .4byte General_MegaEvolution @ B_ANIM_MEGA_EVOLUTION - .4byte General_IllusionOff @ B_ANIM_ILLUSION_OFF - .4byte General_FormChange @ B_ANIM_FORM_CHANGE - .4byte General_SlideOffScreen @ B_ANIM_SLIDE_OFFSCREEN - .4byte General_RestoreBg @ B_ANIM_RESTORE_BG - .4byte General_TotemFlare @ B_ANIM_TOTEM_FLARE - .4byte General_GulpMissile @ B_ANIM_GULP_MISSILE - .4byte General_StrongWinds @ B_ANIM_STRONG_WINDS - .4byte General_PrimalReversion @ B_ANIM_PRIMAL_REVERSION - .4byte General_AquaRingHeal @ B_ANIM_AQUA_RING_HEAL - .4byte General_BeakBlastSetUp @ B_ANIM_BEAK_BLAST_SETUP - .4byte General_ShellTrapSetUp @ B_ANIM_SHELL_TRAP_SETUP - .4byte General_ZMoveActivate @ B_ANIM_ZMOVE_ACTIVATE - .4byte General_AffectionHangedOn @ B_ANIM_AFFECTION_HANGED_ON - .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 - .4byte General_Rainbow @ B_ANIM_RAINBOW - .4byte General_SeaOfFire @ B_ANIM_SEA_OF_FIRE - .4byte General_Swamp @ B_ANIM_SWAMP - .4byte General_TrickRoom @ B_ANIM_TRICK_ROOM - .4byte General_WonderRoom @ B_ANIM_WONDER_ROOM - .4byte General_MagicRoom @ B_ANIM_MAGIC_ROOM - .4byte General_Tailwind @ B_ANIM_TAILLWIND - .4byte General_Fog @ B_ANIM_FOG_CONTINUES - .4byte General_TeraCharge @ B_ANIM_TERA_CHARGE - .4byte General_TeraActivate @ B_ANIM_TERA_ACTIVATE - .4byte General_SimpleHeal @ B_ANIM_SIMPLE_HEAL - - .align 2 -gBattleAnims_Special:: - .4byte Special_LevelUp @ B_ANIM_LVL_UP - .4byte Special_SwitchOutPlayerMon @ B_ANIM_SWITCH_OUT_PLAYER_MON - .4byte Special_SwitchOutOpponentMon @ B_ANIM_SWITCH_OUT_OPPONENT_MON - .4byte Special_BallThrow @ B_ANIM_BALL_THROW - .4byte Special_BallThrowWithTrainer @ B_ANIM_BALL_THROW_WITH_TRAINER - .4byte Special_SubstituteToMon @ B_ANIM_SUBSTITUTE_TO_MON - .4byte Special_MonToSubstitute @ B_ANIM_MON_TO_SUBSTITUTE - .4byte Special_CriticalCaptureBallThrow @ B_ANIM_CRITICAL_CAPTURE_THROW - @@@@@@@@@@@@@@@@@@@@@@@ GEN 4 @@@@@@@@@@@@@@@@@@@@@@@ -Move_ROOST:: +gBattleAnimMove_Roost:: loadspritegfx ANIM_TAG_WHITE_FEATHER loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_ATTACKER @@ -124,7 +40,7 @@ Move_ROOST:: waitforvisualfinish end -Move_GRAVITY:: +gBattleAnimMove_Gravity:: fadetobg BG_COSMIC waitbgfadein createvisualtask AnimTask_SetAnimTargetToAttackerOpposite, 1 @@ -145,7 +61,7 @@ Move_GRAVITY:: waitforvisualfinish end -Move_MIRACLE_EYE:: +gBattleAnimMove_MiracleEye:: loadspritegfx ANIM_TAG_TEAL_ALERT loadspritegfx ANIM_TAG_OPENING_EYE loadspritegfx ANIM_TAG_ROUND_WHITE_HALO @@ -163,7 +79,7 @@ Move_MIRACLE_EYE:: clearmonbg ANIM_DEF_PARTNER end -Move_WAKE_UP_SLAP:: +gBattleAnimMove_WakeUpSlap:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SMELLINGSALT_EFFECT @@ -183,7 +99,7 @@ Move_WAKE_UP_SLAP:: blendoff end -Move_HAMMER_ARM:: +gBattleAnimMove_HammerArm:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_SLAM_HIT @@ -207,7 +123,7 @@ Move_HAMMER_ARM:: blendoff end -Move_GYRO_BALL:: +gBattleAnimMove_GyroBall:: loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK @@ -237,7 +153,7 @@ Move_GYRO_BALL:: waitforvisualfinish end -Move_HEALING_WISH:: +gBattleAnimMove_HealingWish:: loadspritegfx ANIM_TAG_GREEN_SPARKLE setalpha 0, 16 createvisualtask AnimTask_AlphaFadeIn, 3, 0, 16, 16, 0, 1 @@ -257,7 +173,7 @@ Move_HEALING_WISH:: waitforvisualfinish end -Move_BRINE:: +gBattleAnimMove_Brine:: loadspritegfx ANIM_TAG_GLOWY_BLUE_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -271,7 +187,7 @@ Move_BRINE:: blendoff end -Move_NATURAL_GIFT:: +gBattleAnimMove_NaturalGift:: loadspritegfx ANIM_TAG_SPARKLE_2 loadspritegfx ANIM_TAG_HOLLOW_ORB monbg ANIM_ATTACKER @@ -300,7 +216,7 @@ Move_NATURAL_GIFT:: delay 1 end -Move_FEINT:: +gBattleAnimMove_Feint:: loadspritegfx ANIM_TAG_FEINT createsprite gFeintSwipeSpriteTemplate, ANIM_ATTACKER, 10, -32, 0, 15 playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER @@ -314,7 +230,7 @@ Move_FEINT:: waitforvisualfinish end -Move_PLUCK:: +gBattleAnimMove_Pluck:: loadspritegfx ANIM_TAG_SEED_BROWN loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER @@ -340,7 +256,7 @@ Move_PLUCK:: waitforvisualfinish end -Move_TAILWIND:: +gBattleAnimMove_Tailwind:: loadspritegfx ANIM_TAG_FLYING_DIRT playsewithpan SE_M_GUST, SOUND_PAN_ATTACKER call SetHighSpeedBg @@ -374,7 +290,7 @@ Move_TAILWIND:: delay 1 end -General_Tailwind: +gBattleAnimGeneral_Tailwind:: loadspritegfx ANIM_TAG_FLYING_DIRT playsewithpan SE_M_GUST, SOUND_PAN_ATTACKER call SetHighSpeedBg @@ -403,7 +319,7 @@ General_Tailwind: delay 1 end -Move_ACUPRESSURE:: +gBattleAnimMove_Acupressure:: loadspritegfx ANIM_TAG_ACUPRESSURE loadspritegfx ANIM_TAG_SPARK_2 createsprite gAcupressureSpriteTemplate, ANIM_ATTACKER, 40, 0, -40, 40 @@ -411,7 +327,7 @@ Move_ACUPRESSURE:: call ElectricityEffect end -Move_METAL_BURST:: +gBattleAnimMove_MetalBurst:: loadspritegfx ANIM_TAG_ECLIPSING_ORB loadspritegfx ANIM_TAG_RED_ORB loopsewithpan SE_M_TRI_ATTACK, -64, 18, 3 @@ -434,7 +350,7 @@ Move_METAL_BURST:: waitforvisualfinish end -Move_U_TURN:: +gBattleAnimMove_UTurn:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -463,7 +379,7 @@ UTurnVisible: createsprite gFlyBallAttackSpriteTemplate, ANIM_ATTACKER, 2, 20, FALSE goto UTurnContinue -Move_CLOSE_COMBAT:: +gBattleAnimMove_CloseCombat:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET call SetHighSpeedBg @@ -499,7 +415,7 @@ Move_CLOSE_COMBAT:: delay 1 end -Move_PAYBACK:: +gBattleAnimMove_Payback:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET fadetobg BG_DARK @@ -531,7 +447,7 @@ Move_PAYBACK:: waitbgfadein end -Move_ASSURANCE:: +gBattleAnimMove_Assurance:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE monbg ANIM_TARGET @@ -550,7 +466,7 @@ Move_ASSURANCE:: waitbgfadein end -Move_EMBARGO:: +gBattleAnimMove_Embargo:: loadspritegfx ANIM_TAG_RED_ORB monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -572,7 +488,7 @@ EmbargoOrbs1: delay 12 return -Move_FLING:: +gBattleAnimMove_Fling:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_BLACK_BALL monbg ANIM_DEF_PARTNER @@ -588,7 +504,7 @@ Move_FLING:: blendoff end -Move_PSYCHO_SHIFT:: +gBattleAnimMove_PsychoShift:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_HOLLOW_ORB loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @@ -614,7 +530,7 @@ Move_PSYCHO_SHIFT:: blendoff end -Move_TRUMP_CARD:: +gBattleAnimMove_TrumpCard:: loadspritegfx ANIM_TAG_TRUMP_CARD loadspritegfx ANIM_TAG_CUT loadspritegfx ANIM_TAG_TRUMP_CARD_PARTICLES @@ -658,7 +574,7 @@ Move_TRUMP_CARD:: waitforvisualfinish end -Move_HEAL_BLOCK:: +gBattleAnimMove_HealBlock:: loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_TARGET createsoundtask SoundTask_PlaySeChangingVolume, SE_M_ABSORB_2, SOUND_PAN_TARGET, 256, -16, 0, 2 @@ -682,7 +598,7 @@ Move_HEAL_BLOCK:: clearmonbg ANIM_TARGET end -Move_WRING_OUT:: +gBattleAnimMove_WringOut:: loadspritegfx ANIM_TAG_WRING_OUT monbg ANIM_TARGET setalpha 12, 8 @@ -703,7 +619,7 @@ Move_WRING_OUT:: waitforvisualfinish end -Move_POWER_TRICK:: +gBattleAnimMove_PowerTrick:: loadspritegfx ANIM_TAG_POWER_TRICK loopsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET 0xa 0x3 createvisualtask AnimTask_UproarDistortion 0x2, 0x0 @@ -715,7 +631,7 @@ Move_POWER_TRICK:: waitforvisualfinish end -Move_GASTRO_ACID:: +gBattleAnimMove_GastroAcid:: loadspritegfx ANIM_TAG_GREEN_POISON_BUBBLE monbg ANIM_DEF_PARTNER createsprite gGreenPoisonBubble, ANIM_TARGET, 2, 20, 0, 40, 1, 0, 0, FALSE @@ -747,7 +663,7 @@ Move_GASTRO_ACID:: clearmonbg ANIM_DEF_PARTNER end -Move_LUCKY_CHANT:: +gBattleAnimMove_LuckyChant:: loadspritegfx ANIM_TAG_GOLD_STARS monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -774,10 +690,36 @@ Move_LUCKY_CHANT:: unloadspritegfx ANIM_TAG_GOLD_STARS end -Move_ME_FIRST:: +gBattleAnimMove_MeFirst:: + loadspritegfx ANIM_TAG_ORBS + loadspritegfx ANIM_TAG_FINGER + loadspritegfx ANIM_TAG_THOUGHT_BUBBLE + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ORBS, 0, 12, 12, 0x7FAF + setalpha 11, 5 + monbg_static ANIM_DEF_PARTNER + splitbgprio_all + createsprite gThoughtBubbleSpriteTemplate, ANIM_ATTACKER, 11, 0, 100 + playsewithpan SE_M_METRONOME, SOUND_PAN_ATTACKER + delay 6 + createsprite gMetronomeFingerSpriteTemplate, ANIM_ATTACKER, 12, 0 + delay 24 + loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 22, 3 + waitforvisualfinish + panse SE_M_MINIMIZE, SOUND_PAN_TARGET, SOUND_PAN_ATTACKER, -3, 0 + createvisualtask AnimTask_ShrinkTargetCopy, 5, 128, 24 + delay 15 + createsprite gMimicOrbSpriteTemplate, ANIM_TARGET, 2, -12, 24 + delay 10 + setarg 7, 0xFFFF + waitforvisualfinish + playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 2, 0, 11, RGB_WHITE + waitforvisualfinish + clearmonbg_static ANIM_DEF_PARTNER + blendoff end -Move_COPYCAT:: +gBattleAnimMove_Copycat:: loadspritegfx ANIM_TAG_GRAY_ORB loadspritegfx ANIM_TAG_THIN_RING playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER @@ -799,7 +741,7 @@ Move_COPYCAT:: waitforvisualfinish end -Move_POWER_SWAP:: +gBattleAnimMove_PowerSwap:: loadspritegfx ANIM_TAG_COLORED_ORBS playsewithpan SE_M_DOUBLE_TEAM, 0 createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 0, 0, 42, -32 @@ -841,7 +783,7 @@ Move_POWER_SWAP:: waitforvisualfinish end -Move_GUARD_SWAP:: +gBattleAnimMove_GuardSwap:: loadspritegfx ANIM_TAG_COLORED_ORBS playsewithpan SE_M_DOUBLE_TEAM, 0 createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 2, 0, 42, -32 @@ -883,7 +825,7 @@ Move_GUARD_SWAP:: waitforvisualfinish end -Move_PUNISHMENT:: +gBattleAnimMove_Punishment:: loadspritegfx ANIM_TAG_SCRATCH loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_TARGET @@ -906,7 +848,7 @@ Move_PUNISHMENT:: blendoff end -Move_LAST_RESORT:: +gBattleAnimMove_LastResort:: fadetobg BG_COSMIC waitbgfadeout createvisualtask AnimTask_StartSlidingBg, 2, 4, 0, 128, 0, -1 @@ -944,7 +886,7 @@ Move_LAST_RESORT:: call UnsetHighSpeedBg end -Move_WORRY_SEED:: +gBattleAnimMove_WorrySeed:: loadspritegfx ANIM_TAG_WORRY_SEED loadspritegfx ANIM_TAG_SMALL_CLOUD playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER @@ -958,7 +900,7 @@ Move_WORRY_SEED:: waitforvisualfinish end -Move_SUCKER_PUNCH:: +gBattleAnimMove_SuckerPunch:: loadspritegfx ANIM_TAG_POISON_JAB loadspritegfx ANIM_TAG_IMPACT createsprite gSlideMonToOffsetSpriteTemplate, 2, 5, 0, 20, 0, 0, 4 @@ -971,7 +913,7 @@ Move_SUCKER_PUNCH:: createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 0, 1, 4 end -Move_TOXIC_SPIKES:: +gBattleAnimMove_ToxicSpikes:: loadspritegfx ANIM_TAG_TOXIC_SPIKES loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_DEF_PARTNER @@ -991,11 +933,11 @@ Move_TOXIC_SPIKES:: clearmonbg ANIM_DEF_PARTNER end -Move_HEART_SWAP:: +gBattleAnimMove_HeartSwap:: end -Move_AQUA_RING:: -General_AquaRingHeal: +gBattleAnimMove_AquaRing:: +gBattleAnimGeneral_AquaRingHeal:: loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -1043,7 +985,7 @@ General_AquaRingHeal: blendoff end -Move_MAGNET_RISE:: +gBattleAnimMove_MagnetRise:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 @@ -1080,7 +1022,7 @@ Move_MAGNET_RISE:: waitforvisualfinish end -Move_FLARE_BLITZ:: +gBattleAnimMove_FlareBlitz:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_SMALL_EMBER @@ -1157,7 +1099,7 @@ Move_FLARE_BLITZ:: waitbgfadein end -Move_FORCE_PALM:: +gBattleAnimMove_ForcePalm:: loadspritegfx ANIM_TAG_SHADOW_BALL loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT @@ -1175,9 +1117,9 @@ Move_FORCE_PALM:: blendoff end -Move_AURA_SPHERE:: - loadspritegfx ANIM_TAG_METEOR - loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT +gBattleAnimMove_AuraSphere:: + loadspritegfx ANIM_TAG_IMPACT_2 + loadspritegfx ANIM_TAG_LEER monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER setalpha 12, 8 @@ -1200,7 +1142,7 @@ SetAuraSphereBG: fadetobg BG_AURA_SPHERE goto SetHighSpeedBgFade -Move_ROCK_POLISH:: +gBattleAnimMove_RockPolish:: loadspritegfx ANIM_TAG_WHITE_STREAK loadspritegfx ANIM_TAG_SPARKLE_3 setalpha 12, 8 @@ -1267,7 +1209,7 @@ Move_ROCK_POLISH:: blendoff end -Move_POISON_JAB:: +gBattleAnimMove_PoisonJab:: loadspritegfx ANIM_TAG_PURPLE_JAB loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_POISON_BUBBLE @@ -1321,7 +1263,7 @@ Move_POISON_JAB:: blendoff end -Move_DARK_PULSE:: +gBattleAnimMove_DarkPulse:: loadspritegfx ANIM_TAG_THIN_RING monbg ANIM_TARGET fadetobg BG_DARK @@ -1349,7 +1291,7 @@ Move_DARK_PULSE:: waitbgfadein end -Move_NIGHT_SLASH:: +gBattleAnimMove_NightSlash:: loadspritegfx ANIM_TAG_SLASH createvisualtask AnimTask_BlendNightSlash, 2, ANIM_TARGET, 2, 0, 8, 1 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, 1, 3, 0, 12, RGB_BLACK @@ -1369,7 +1311,7 @@ Move_NIGHT_SLASH:: waitforvisualfinish end -Move_AQUA_TAIL:: +gBattleAnimMove_AquaTail:: loadspritegfx ANIM_TAG_WATER_IMPACT loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -1423,7 +1365,7 @@ Move_AQUA_TAIL:: blendoff end -Move_SEED_BOMB:: +gBattleAnimMove_SeedBomb:: loadspritegfx ANIM_TAG_SEED loadspritegfx ANIM_TAG_EXPLOSION createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0 @@ -1472,7 +1414,7 @@ Move_SEED_BOMB:: waitforvisualfinish end -Move_AIR_SLASH:: +gBattleAnimMove_AirSlash:: loadspritegfx ANIM_TAG_SLASH call SetSkyBg createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, 1, -8, 0 @@ -1485,7 +1427,7 @@ Move_AIR_SLASH:: call UnsetSkyBg end -Move_X_SCISSOR:: +gBattleAnimMove_XScissor:: loadspritegfx ANIM_TAG_CUT monbg ANIM_TARGET setalpha 12, 8 @@ -1503,7 +1445,7 @@ Move_X_SCISSOR:: blendoff end -Move_BUG_BUZZ:: +gBattleAnimMove_BugBuzz:: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE loadspritegfx ANIM_TAG_THIN_RING monbg ANIM_DEF_PARTNER @@ -1530,7 +1472,7 @@ Move_BUG_BUZZ:: call UnsetBugBg end -Move_DRAGON_PULSE:: +gBattleAnimMove_DragonPulse:: loadspritegfx ANIM_TAG_DRAGON_PULSE monbg ANIM_TARGET setalpha 12, 8 @@ -1563,7 +1505,7 @@ DragonPulseParticle: delay 4 return -Move_DRAGON_RUSH:: +gBattleAnimMove_DragonRush:: loadspritegfx ANIM_TAG_SLAM_HIT_2 loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -1592,7 +1534,7 @@ Move_DRAGON_RUSH:: blendoff end -Move_POWER_GEM:: @ Copy of Hidden Power with background blackened +gBattleAnimMove_PowerGem:: @ Copy of Hidden Power with background blackened loadspritegfx ANIM_TAG_POWER_GEM createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 1, 0, 7, RGB_BLACK waitforvisualfinish @@ -1626,7 +1568,7 @@ Move_POWER_GEM:: @ Copy of Hidden Power with background blackened waitforvisualfinish end -Move_DRAIN_PUNCH:: +gBattleAnimMove_DrainPunch:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_BLUE_STAR @@ -1647,7 +1589,7 @@ Move_DRAIN_PUNCH:: blendoff end -Move_VACUUM_WAVE:: +gBattleAnimMove_VacuumWave:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_THIN_RING @@ -1663,7 +1605,7 @@ Move_VACUUM_WAVE:: blendoff end -Move_FOCUS_BLAST:: +gBattleAnimMove_FocusBlast:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_METEOR loadspritegfx ANIM_TAG_FLAT_ROCK @@ -1687,7 +1629,7 @@ SetFocusBlastBG: fadetobg BG_FOCUS_BLAST goto SetHighSpeedBgFade -Move_ENERGY_BALL:: +gBattleAnimMove_EnergyBall:: loadspritegfx ANIM_TAG_ENERGY_BALL monbg ANIM_TARGET setalpha 12, 8 @@ -1705,7 +1647,7 @@ Move_ENERGY_BALL:: blendoff end -Move_BRAVE_BIRD:: +gBattleAnimMove_BraveBird:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_BIRD call SetSkyBg @@ -1728,7 +1670,7 @@ Move_BRAVE_BIRD:: call UnsetSkyBg end -Move_EARTH_POWER:: +gBattleAnimMove_EarthPower:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_FIRE_PLUME createvisualtask AnimTask_HorizontalShake, 3, ANIM_DEF_PARTNER, 10, 50 @@ -1757,7 +1699,7 @@ Move_EARTH_POWER:: waitforvisualfinish end -Move_SWITCHEROO:: +gBattleAnimMove_Switcheroo:: fadetobg BG_DARK waitbgfadein loadspritegfx ANIM_TAG_ITEM_BAG @@ -1789,7 +1731,7 @@ Move_SWITCHEROO:: waitbgfadein end -Move_GIGA_IMPACT:: +gBattleAnimMove_GigaImpact:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -1833,7 +1775,7 @@ GigaImpactContinuity: waitforvisualfinish end -Move_NASTY_PLOT:: +gBattleAnimMove_NastyPlot:: loadspritegfx ANIM_TAG_AMNESIA fadetobg BG_DARK waitbgfadeout @@ -1848,7 +1790,7 @@ Move_NASTY_PLOT:: call UnsetPsychicBg end -Move_BULLET_PUNCH:: +gBattleAnimMove_BulletPunch:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET @@ -1902,7 +1844,7 @@ Move_BULLET_PUNCH:: blendoff end -Move_AVALANCHE:: +gBattleAnimMove_Avalanche:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_ICE_CHUNK monbg ANIM_DEF_PARTNER @@ -1953,7 +1895,7 @@ SnowSlide1: delay 2 return -Move_ICE_SHARD:: +gBattleAnimMove_IceShard:: monbg ANIM_TARGET splitbgprio ANIM_TARGET setalpha 12, 8 @@ -1989,7 +1931,7 @@ Move_ICE_SHARD:: blendoff end -Move_SHADOW_CLAW:: +gBattleAnimMove_ShadowClaw:: loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL loadspritegfx ANIM_TAG_CLAW_SLASH loadspritegfx ANIM_TAG_TORN_METAL @@ -2015,7 +1957,7 @@ Move_SHADOW_CLAW:: clearmonbg ANIM_TARGET end -Move_THUNDER_FANG:: +gBattleAnimMove_ThunderFang:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_LIGHTNING loadspritegfx ANIM_TAG_SHARP_TEETH @@ -2049,7 +1991,7 @@ Move_THUNDER_FANG:: delay 1 end -Move_ICE_FANG:: +gBattleAnimMove_IceFang:: monbg ANIM_TARGET setalpha 12, 8 loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -2086,7 +2028,7 @@ Move_ICE_FANG:: delay 1 end -Move_FIRE_FANG:: +gBattleAnimMove_FireFang:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_SHARP_TEETH loadspritegfx ANIM_TAG_IMPACT @@ -2115,7 +2057,7 @@ Move_FIRE_FANG:: delay 1 end -Move_SHADOW_SNEAK:: +gBattleAnimMove_ShadowSneak:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour @@ -2153,7 +2095,7 @@ ShadowSneakMovement: delay 0x4 return -Move_MUD_BOMB:: +gBattleAnimMove_MudBomb:: loadspritegfx ANIM_TAG_MUD_SAND playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER createsprite gMudBombToss, ANIM_TARGET, 2, 20, 0, 0, 0, 35, -25 @@ -2204,7 +2146,7 @@ Move_MUD_BOMB:: waitforvisualfinish end -Move_PSYCHO_CUT:: +gBattleAnimMove_PsychoCut:: loadspritegfx ANIM_TAG_SPIRAL loadspritegfx ANIM_TAG_PSYCHO_CUT loadspritegfx ANIM_TAG_CROSS_IMPACT @@ -2232,7 +2174,7 @@ Move_PSYCHO_CUT:: waitforvisualfinish end -Move_ZEN_HEADBUTT:: +gBattleAnimMove_ZenHeadbutt:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_ATTACKER @@ -2264,7 +2206,7 @@ Move_ZEN_HEADBUTT:: delay 1 end -Move_MIRROR_SHOT:: +gBattleAnimMove_MirrorShot:: loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 1, 0, RGB_BLACK waitforvisualfinish @@ -2298,7 +2240,7 @@ Move_MIRROR_SHOT:: blendoff end -Move_FLASH_CANNON:: +gBattleAnimMove_FlashCannon:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_ELECTRIC_ORBS @@ -2335,7 +2277,7 @@ Move_FLASH_CANNON:: clearmonbg ANIM_TARGET end -Move_ROCK_CLIMB:: +gBattleAnimMove_RockClimb:: delay 8 loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 38, 3 waitforvisualfinish @@ -2370,7 +2312,7 @@ Move_ROCK_CLIMB:: blendoff end -Move_DEFOG:: +gBattleAnimMove_Defog:: loadspritegfx ANIM_TAG_WHITE_CIRCLE_OF_LIGHT monbg ANIM_ATTACKER setalpha 12, 8 @@ -2388,9 +2330,9 @@ Move_DEFOG:: blendoff end -Move_TRICK_ROOM:: +gBattleAnimMove_TrickRoom:: call InitRoomAnimation -General_TrickRoom: +gBattleAnimGeneral_TrickRoom:: playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET fadetobg BG_TRICK_ROOM waitbgfadein @@ -2405,7 +2347,7 @@ InitRoomAnimation: return @ Credits to Skeli -Move_DRACO_METEOR:: +gBattleAnimMove_DracoMeteor:: loadspritegfx ANIM_TAG_ROCKS @Rocks loadspritegfx ANIM_TAG_FAIRY_LOCK_CHAINS @Gray Colour loadspritegfx ANIM_TAG_WATER_GUN @Sparkles Trail @@ -2490,7 +2432,7 @@ DracoMeteor4: createsprite gDracoMeteorTailSpriteTemplate 0x83, 5, 0xffb0, 0xffc0, 0xFFF8, 0x20, 0x19 return -Move_DISCHARGE:: +gBattleAnimMove_Discharge:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 @@ -2595,7 +2537,7 @@ DischargeElectrify: createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1, ANIM_ATK_PARTNER return -Move_LAVA_PLUME:: +gBattleAnimMove_LavaPlume:: loadspritegfx ANIM_TAG_FIRE_PLUME loopsewithpan 152, SOUND_PAN_ATTACKER, 9, 2 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 11, RGB_RED @@ -2615,7 +2557,7 @@ Move_LAVA_PLUME:: waitforvisualfinish end -Move_LEAF_STORM:: +gBattleAnimMove_LeafStorm:: loadspritegfx ANIM_TAG_RAZOR_LEAF loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_LEAF @@ -2727,7 +2669,7 @@ Move_LEAF_STORM:: clearmonbg ANIM_DEF_PARTNER end -Move_POWER_WHIP:: +gBattleAnimMove_PowerWhip:: loadspritegfx ANIM_TAG_WHIP_HIT playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 10 @@ -2741,7 +2683,7 @@ Move_POWER_WHIP:: waitbgfadein end -Move_ROCK_WRECKER:: +gBattleAnimMove_RockWrecker:: jumpargeq 7, 1, RockWrecker_1 fadetobg BG_ROCK_WRECKER waitbgfadeout @@ -2787,7 +2729,7 @@ RockWrecker_2: call UnsetPsychicBg end -Move_CROSS_POISON:: +gBattleAnimMove_CrossPoison:: loadspritegfx ANIM_TAG_POISON_BUBBLE loadspritegfx ANIM_TAG_CROSS_IMPACT monbg ANIM_TARGET @@ -2803,7 +2745,7 @@ Move_CROSS_POISON:: blendoff end -Move_GUNK_SHOT:: +gBattleAnimMove_GunkShot:: loadspritegfx ANIM_TAG_WATER_ORB loadspritegfx ANIM_TAG_POISON_BUBBLE loadspritegfx ANIM_TAG_WATER_IMPACT @@ -2860,7 +2802,7 @@ SetGunkShotBG: goto SetHighSpeedBgFade -Move_IRON_HEAD:: +gBattleAnimMove_IronHead:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 @@ -2882,7 +2824,7 @@ Move_IRON_HEAD:: waitforvisualfinish end -Move_MAGNET_BOMB:: +gBattleAnimMove_MagnetBomb:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 @@ -2947,7 +2889,7 @@ Move_MAGNET_BOMB:: waitforvisualfinish end -Move_STONE_EDGE:: +gBattleAnimMove_StoneEdge:: loadspritegfx ANIM_TAG_STONE_EDGE loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET @@ -3006,7 +2948,7 @@ Move_STONE_EDGE:: blendoff end -Move_CAPTIVATE:: +gBattleAnimMove_Captivate:: loadspritegfx ANIM_TAG_MAGENTA_HEART loadspritegfx ANIM_TAG_SPARKLE_2 createvisualtask AnimTask_RockMonBackAndForth, 5, ANIM_DEF_PARTNER, 0, 2, 0 @@ -3022,7 +2964,7 @@ Move_CAPTIVATE:: waitforvisualfinish end -Move_STEALTH_ROCK:: +gBattleAnimMove_StealthRock:: loadspritegfx ANIM_TAG_STEALTH_ROCK monbg ANIM_DEF_PARTNER playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER @@ -3039,7 +2981,7 @@ Move_STEALTH_ROCK:: clearmonbg ANIM_DEF_PARTNER end -Move_GRASS_KNOT:: +gBattleAnimMove_GrassKnot:: loadspritegfx ANIM_TAG_RAZOR_LEAF loadspritegfx ANIM_TAG_IMPACT createsprite gSlideMonToOffsetSpriteTemplate, 2, 5, 0, 20, 0, 0, 4 @@ -3052,7 +2994,7 @@ Move_GRASS_KNOT:: createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 0, 1, 4 end -Move_CHATTER:: +gBattleAnimMove_Chatter:: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_MUSIC_NOTES @@ -3092,7 +3034,7 @@ Move_CHATTER:: clearmonbg ANIM_DEF_PARTNER end -Move_JUDGMENT:: +gBattleAnimMove_Judgment:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_GREEN_SPIKE @@ -3188,7 +3130,7 @@ JudgmentInwardSpikes2: createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0xFFDA, 0xFF94, 16 @between up and upper left return -Move_BUG_BITE:: +gBattleAnimMove_BugBite:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -3229,7 +3171,7 @@ Move_BUG_BITE:: blendoff end -Move_CHARGE_BEAM:: +gBattleAnimMove_ChargeBeam:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_ELECTRICITY @@ -3281,7 +3223,7 @@ SparkBeam: delay 1 return -Move_WOOD_HAMMER:: +gBattleAnimMove_WoodHammer:: loadspritegfx ANIM_TAG_WOOD_HAMMER loadspritegfx ANIM_TAG_WOOD_HAMMER_HAMMER loadspritegfx ANIM_TAG_IMPACT @@ -3310,7 +3252,7 @@ WoodHammerImpact: createsprite gWoodHammerSmallSpriteTemplate, ANIM_TARGET, 2, -5, 0, -20, -24, 20, 2 return -Move_AQUA_JET:: +gBattleAnimMove_AquaJet:: loadspritegfx ANIM_TAG_SPARKLE_6 loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_SPLASH @@ -3343,7 +3285,7 @@ Move_AQUA_JET:: blendoff end -Move_ATTACK_ORDER:: +gBattleAnimMove_AttackOrder:: loadspritegfx ANIM_TAG_ATTACK_ORDER loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -3389,7 +3331,7 @@ Move_ATTACK_ORDER:: blendoff end -Move_DEFEND_ORDER:: +gBattleAnimMove_DefendOrder:: loadspritegfx ANIM_TAG_ATTACK_ORDER loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -3426,7 +3368,7 @@ Move_DEFEND_ORDER:: waitforvisualfinish end -Move_HEAL_ORDER:: +gBattleAnimMove_HealOrder:: loadspritegfx ANIM_TAG_ATTACK_ORDER loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -3463,7 +3405,7 @@ Move_HEAL_ORDER:: waitforvisualfinish end -Move_HEAD_SMASH:: +gBattleAnimMove_HeadSmash:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS createvisualtask AnimTask_SkullBashPosition, 2, 0 @@ -3485,7 +3427,7 @@ Move_HEAD_SMASH:: waitbgfadein end -Move_DOUBLE_HIT:: +gBattleAnimMove_DoubleHit:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -3507,7 +3449,7 @@ Move_DOUBLE_HIT:: blendoff end -Move_ROAR_OF_TIME:: +gBattleAnimMove_RoarOfTime:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_EXPLOSION loadspritegfx ANIM_TAG_WATER_GUN @@ -3548,7 +3490,7 @@ Move_ROAR_OF_TIME:: waitforvisualfinish end -Move_SPACIAL_REND:: +gBattleAnimMove_SpacialRend:: loadspritegfx ANIM_TAG_PUNISHMENT_BLADES loadspritegfx ANIM_TAG_PINK_HEART_2 @ANIM_TAG_BERRY_EATEN monbg ANIM_ATK_PARTNER @@ -3582,7 +3524,7 @@ Move_SPACIAL_REND:: blendoff end -Move_LUNAR_DANCE:: +gBattleAnimMove_LunarDance:: loadspritegfx ANIM_TAG_MOON loadspritegfx ANIM_TAG_GREEN_SPARKLE loadspritegfx ANIM_TAG_HOLLOW_ORB @@ -3623,7 +3565,7 @@ Move_LUNAR_DANCE:: delay 1 end -Move_CRUSH_GRIP:: +gBattleAnimMove_CrushGrip:: loadspritegfx ANIM_TAG_EXPLOSION loadspritegfx ANIM_TAG_ACUPRESSURE loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE @@ -3648,7 +3590,7 @@ Move_CRUSH_GRIP:: blendoff end -Move_MAGMA_STORM:: +gBattleAnimMove_MagmaStorm:: loadspritegfx ANIM_TAG_SMALL_EMBER fadetobg BG_MAGMA_STORM @Add new bg waitbgfadeout @@ -3673,7 +3615,7 @@ Move_MAGMA_STORM:: blendoff end -Move_DARK_VOID:: +gBattleAnimMove_DarkVoid:: loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour loadspritegfx ANIM_TAG_SPARKLE_2 @Healing Stars @@ -3684,23 +3626,24 @@ Move_DARK_VOID:: waitbgfadein createvisualtask AnimTask_DestinyBondWhiteShadow, 5, 0, 0x30 loopsewithpan SE_M_CONFUSE_RAY, SOUND_PAN_ATTACKER, 5, 2 - delay 0x30 - createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0xfd00, 0x15, 0, 0x70 @Last is speed - createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, 0xfd00, 0x15, 0, 0x70 @Last is speed - delay 0x40 + delay 48 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, -768, 21, 0, 112 @Last is duration + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, -768, 21, 0, 112 @Last is duration + delay 64 invisible ANIM_TARGET invisible ANIM_DEF_PARTNER - createsprite gDarkVoidPurpleStarsTemplate, ANIM_ATTACKER, 2, 0, 0, 1, 0, 0x20, 0x3c + createsprite gDarkVoidPurpleStarsTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0, 32, 60 + createsprite gDarkVoidPurpleStarsTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_DEF_PARTNER, 0, 32, 60 waitforvisualfinish createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0, 16 createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, ANIM_DEF_PARTNER, 0, 16 - delay 0x20 + delay 32 call UnsetPsychicBg visible ANIM_TARGET visible ANIM_DEF_PARTNER end -Move_SEED_FLARE:: +gBattleAnimMove_SeedFlare:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation loadspritegfx ANIM_TAG_LEAF @green color loadspritegfx ANIM_TAG_RAZOR_LEAF @green color 2 @@ -3785,7 +3728,7 @@ Move_SEED_FLARE:: blendoff end -Move_OMINOUS_WIND:: +gBattleAnimMove_OminousWind:: loadspritegfx ANIM_TAG_SPARKLE_6 panse SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET 2, 0 playsewithpan 228, 0 @@ -3844,7 +3787,7 @@ OminousWindHit: waitbgfadein end -Move_SHADOW_FORCE:: +gBattleAnimMove_ShadowForce:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT choosetwoturnanim ShadowForcePrep ShadowForceAttack @@ -3898,7 +3841,7 @@ ShadowForceBg: return @@@@@@@@@@@@@@@@@@@@@@@ GEN 5 @@@@@@@@@@@@@@@@@@@@@@@ -Move_HONE_CLAWS:: +gBattleAnimMove_HoneClaws:: loadspritegfx ANIM_TAG_SWIPE call HoneClawsAnim createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SWIPE, 0, 6, 6, RGB_BLACK @@ -3919,7 +3862,7 @@ HoneClawsAnim: delay 10 return -Move_WIDE_GUARD:: +gBattleAnimMove_WideGuard:: loadspritegfx ANIM_TAG_ICE_SPIKES @motion from icy wind loadspritegfx ANIM_TAG_PINK_PETAL @pink color loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color @@ -3969,7 +3912,7 @@ Move_WIDE_GUARD:: blendoff end -Move_GUARD_SPLIT:: +gBattleAnimMove_GuardSplit:: loadspritegfx ANIM_TAG_BLUEGREEN_ORB createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 loopsewithpan SE_M_LOCK_ON, SOUND_PAN_ATTACKER, 0x18, 0x3 @@ -3993,7 +3936,7 @@ GuardSplitLaunch: delay 0x5 return -Move_POWER_SPLIT:: +gBattleAnimMove_PowerSplit:: loadspritegfx ANIM_TAG_RED_HEART loadspritegfx ANIM_TAG_BLUEGREEN_ORB createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x1, 0x0, 0xC, 0x0 @@ -4018,9 +3961,9 @@ PowerSplitLaunch: delay 5 return -Move_WONDER_ROOM:: +gBattleAnimMove_WonderRoom:: call InitRoomAnimation -General_WonderRoom: +gBattleAnimGeneral_WonderRoom:: playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET fadetobg BG_WONDER_ROOM waitbgfadein @@ -4030,7 +3973,7 @@ General_WonderRoom: blendoff end -Move_PSYSHOCK:: +gBattleAnimMove_Psyshock:: loadspritegfx ANIM_TAG_RED_ORB_2 loadspritegfx ANIM_TAG_POISON_JAB loadspritegfx ANIM_TAG_GRAY_SMOKE @@ -4107,7 +4050,7 @@ PsyshockConverge: delay 2 return -Move_VENOSHOCK:: +gBattleAnimMove_Venoshock:: loadspritegfx ANIM_TAG_POISON_BUBBLE loadspritegfx ANIM_TAG_TOXIC_BUBBLE createsprite gToxicBubbleSpriteTemplate, ANIM_TARGET, 2, -24, 16, 1, 1 @@ -4135,7 +4078,7 @@ Move_VENOSHOCK:: delay 15 end -Move_AUTOTOMIZE:: +gBattleAnimMove_Autotomize:: loadspritegfx ANIM_TAG_METAL_BITS @Metal Bits setalpha 12, 8 monbg ANIM_ATK_PARTNER @@ -4160,7 +4103,7 @@ Move_AUTOTOMIZE:: blendoff end -Move_RAGE_POWDER:: +gBattleAnimMove_RagePowder:: loadspritegfx ANIM_TAG_SPORE @Powder loadspritegfx ANIM_TAG_HEART_STAMP @Red Colour monbg ANIM_DEF_PARTNER @@ -4182,7 +4125,7 @@ RagePowderSprinkle: delay 0xc return -Move_TELEKINESIS:: +gBattleAnimMove_Telekinesis:: loadspritegfx ANIM_TAG_SPARKLE_4 @detect createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0x1, 0x0, 0x9, 0x0 waitforvisualfinish @@ -4200,9 +4143,9 @@ Move_TELEKINESIS:: waitforvisualfinish end -Move_MAGIC_ROOM:: +gBattleAnimMove_MagicRoom:: call InitRoomAnimation -General_MagicRoom: +gBattleAnimGeneral_MagicRoom:: playsewithpan SE_M_SUPERSONIC, SOUND_PAN_TARGET fadetobg BG_MAGIC_ROOM waitbgfadein @@ -4212,7 +4155,7 @@ General_MagicRoom: blendoff end -Move_SMACK_DOWN:: +gBattleAnimMove_SmackDown:: loadspritegfx ANIM_TAG_BLACK_BALL loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -4225,7 +4168,7 @@ Move_SMACK_DOWN:: createvisualtask AnimTask_SeismicTossBgAccelerateDownAtEnd, 3 goto SeismicTossWeak -Move_STORM_THROW:: +gBattleAnimMove_StormThrow:: call StormThorwAnim call StormThorwAnim call StormThorwAnim @@ -4248,7 +4191,7 @@ StormThorwAnim: delay 8 return -Move_FLAME_BURST:: +gBattleAnimMove_FlameBurst:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_EXPLOSION playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER @@ -4281,13 +4224,13 @@ FlameBurstSpread: return -Move_SLUDGE_WAVE:: +gBattleAnimMove_SludgeWave:: panse SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 createvisualtask AnimTask_CreateSurfWave, 2, ANIM_SURF_PAL_SLUDGE_WAVE waitforvisualfinish end -Move_QUIVER_DANCE:: +gBattleAnimMove_QuiverDance:: loadspritegfx ANIM_TAG_HOLLOW_ORB monbg ANIM_ATTACKER call SetBugBg @@ -4310,7 +4253,7 @@ Move_QUIVER_DANCE:: call UnsetBugBg end -Move_HEAVY_SLAM:: +gBattleAnimMove_HeavySlam:: loadspritegfx ANIM_TAG_CLAW_SLASH loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 @@ -4340,7 +4283,7 @@ Move_HEAVY_SLAM:: blendoff end -Move_SYNCHRONOISE:: +gBattleAnimMove_Synchronoise:: loadspritegfx ANIM_TAG_THIN_RING @hypervoice ring loadspritegfx ANIM_TAG_SPARK_2 @yellow color loadspritegfx ANIM_TAG_WATER_ORB @blue color @@ -4379,7 +4322,7 @@ Move_SYNCHRONOISE:: clearmonbg ANIM_DEF_PARTNER end -Move_ELECTRO_BALL:: +gBattleAnimMove_ElectroBall:: loadspritegfx ANIM_TAG_SPARK_2 @yelow loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge loadspritegfx ANIM_TAG_FLASH_CANNON_BALL @ball @@ -4406,7 +4349,7 @@ Move_ELECTRO_BALL:: blendoff end -Move_SOAK:: +gBattleAnimMove_Soak:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_TARGET @@ -4441,7 +4384,7 @@ Move_SOAK:: blendoff end -Move_FLAME_CHARGE:: +gBattleAnimMove_FlameCharge:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -4474,7 +4417,7 @@ FlameChargeSwirl: createsprite gFlameChargeEmberTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c return -Move_COIL:: +gBattleAnimMove_Coil:: loadspritegfx ANIM_TAG_TENDRILS loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 0x6, 0x4 createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x10, 0x0, 0x2 @@ -4493,7 +4436,7 @@ Move_COIL:: waitforvisualfinish end -Move_LOW_SWEEP:: +gBattleAnimMove_LowSweep:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 @@ -4505,7 +4448,7 @@ Move_LOW_SWEEP:: createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4 end -Move_ACID_SPRAY:: +gBattleAnimMove_AcidSpray:: loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_TARGET createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, 0, -20, FALSE @@ -4531,7 +4474,7 @@ Move_ACID_SPRAY:: clearmonbg ANIM_TARGET end -Move_FOUL_PLAY:: +gBattleAnimMove_FoulPlay:: loadspritegfx ANIM_TAG_POISON_BUBBLE loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_IMPACT @@ -4554,7 +4497,7 @@ Move_FOUL_PLAY:: blendoff end -Move_SIMPLE_BEAM:: +gBattleAnimMove_SimpleBeam:: loadspritegfx ANIM_TAG_GOLD_RING @psybeam loadspritegfx ANIM_TAG_ROCKS @brown color loadspritegfx ANIM_TAG_PINK_PETAL @pink color @@ -4600,7 +4543,7 @@ SimpleBeamWithRings: delay 0x2 return -Move_ENTRAINMENT:: +gBattleAnimMove_Entrainment:: createvisualtask AnimTask_TeeterDanceMovement, 5 playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER delay 0x18 @@ -4615,7 +4558,7 @@ Move_ENTRAINMENT:: waitforvisualfinish end -Move_AFTER_YOU:: +gBattleAnimMove_AfterYou:: loadspritegfx ANIM_TAG_ANGER @rage loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @green color createvisualtask AnimTask_SwayMon, 5, 1, 15, 1536, 2, ANIM_ATTACKER @@ -4630,7 +4573,7 @@ Move_AFTER_YOU:: waitforvisualfinish end -Move_ROUND:: +gBattleAnimMove_Round:: loadspritegfx ANIM_TAG_MUSIC_NOTES createvisualtask AnimTask_MusicNotesRainbowBlend, 2 waitforvisualfinish @@ -4652,7 +4595,7 @@ Move_ROUND:: waitforvisualfinish end -Move_ECHOED_VOICE:: +gBattleAnimMove_EchoedVoice:: loadspritegfx ANIM_TAG_METAL_SOUND_WAVES monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET @@ -4672,7 +4615,7 @@ MetalSoundPlayNote: delay 0x2 return -Move_CHIP_AWAY:: +gBattleAnimMove_ChipAway:: loadspritegfx ANIM_TAG_IMPACT createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0x9, 0x7FFF waitforvisualfinish @@ -4690,7 +4633,7 @@ Move_CHIP_AWAY:: blendoff end -Move_CLEAR_SMOG:: +gBattleAnimMove_ClearSmog:: loadspritegfx ANIM_TAG_MIST_CLOUD monbg ANIM_TARGET splitbgprio_all @@ -4718,7 +4661,7 @@ ClearSmogCloud: delay 7 return -Move_STORED_POWER:: +gBattleAnimMove_StoredPower:: loadspritegfx ANIM_TAG_RED_ORB_2 loadspritegfx ANIM_TAG_IMPACT call SetPsychicBackground @@ -4748,7 +4691,7 @@ Move_STORED_POWER:: waitforvisualfinish end -Move_QUICK_GUARD:: +gBattleAnimMove_QuickGuard:: loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @hand loadspritegfx ANIM_TAG_SPARKLE_4 @sparkles setalpha 12, 8 @@ -4778,7 +4721,7 @@ Move_QUICK_GUARD:: clearmonbg ANIM_ATTACKER end -Move_ALLY_SWITCH:: +gBattleAnimMove_AllySwitch:: call SetPsychicBackground createvisualtask AnimTask_AllySwitchAttacker, 2 createvisualtask AnimTask_AllySwitchPartner, 2 @@ -4786,7 +4729,7 @@ Move_ALLY_SWITCH:: call UnsetPsychicBg end -Move_SCALD:: +gBattleAnimMove_Scald:: loadspritegfx ANIM_TAG_WATER_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -4832,7 +4775,7 @@ ScaldHitSplats: createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, ANIM_TARGET, 1 return -Move_SHELL_SMASH:: +gBattleAnimMove_ShellSmash:: loadspritegfx ANIM_TAG_SHELL_RIGHT loadspritegfx ANIM_TAG_SHELL_LEFT loadspritegfx ANIM_TAG_IMPACT @@ -4860,7 +4803,7 @@ Move_SHELL_SMASH:: waitforvisualfinish end -Move_HEAL_PULSE:: +gBattleAnimMove_HealPulse:: loadspritegfx ANIM_TAG_GREEN_SPARKLE loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_THIN_RING @@ -4891,7 +4834,7 @@ Move_HEAL_PULSE:: call HealingEffect2 end -Move_HEX:: +gBattleAnimMove_Hex:: loadspritegfx ANIM_TAG_PURPLE_FLAME loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0x10, 0x4C4A @;Deep purple @@ -4912,7 +4855,7 @@ Move_HEX:: waitforvisualfinish end -Move_SKY_DROP:: +gBattleAnimMove_SkyDrop:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT choosetwoturnanim SkyDropSetup SkyDropUnleash @@ -4945,7 +4888,7 @@ SkyDropUnleash: blendoff end -Move_SHIFT_GEAR:: +gBattleAnimMove_ShiftGear:: loadspritegfx ANIM_TAG_GEAR @Gear monbg ANIM_ATTACKER playsewithpan SE_ESCALATOR, SOUND_PAN_ATTACKER @@ -4955,7 +4898,7 @@ Move_SHIFT_GEAR:: clearmonbg ANIM_ATTACKER end -Move_CIRCLE_THROW:: +gBattleAnimMove_CircleThrow:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_ICE_CHUNK @@ -4982,7 +4925,7 @@ Move_CIRCLE_THROW:: blendoff end -Move_INCINERATE:: +gBattleAnimMove_Incinerate:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_TARGET splitbgprio ANIM_TARGET @@ -5022,7 +4965,7 @@ Move_INCINERATE:: blendoff end -Move_QUASH:: +gBattleAnimMove_Quash:: loadspritegfx ANIM_TAG_ASSURANCE_HAND @hand fadetobg BG_DARK waitbgfadein @@ -5039,7 +4982,7 @@ Move_QUASH:: waitbgfadein end -Move_ACROBATICS:: +gBattleAnimMove_Acrobatics:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_WHITE_STREAK loadspritegfx ANIM_TAG_IMPACT @@ -5114,7 +5057,7 @@ AcrobaticsSlashes: delay 2 return -Move_REFLECT_TYPE:: +gBattleAnimMove_ReflectType:: loadspritegfx ANIM_TAG_GUARD_RING @ring around user loadspritegfx ANIM_TAG_ICE_CHUNK @blue green color loadspritegfx ANIM_TAG_PURPLE_FLAME @violet color @@ -5152,7 +5095,7 @@ Move_REFLECT_TYPE:: blendoff end -Move_RETALIATE:: +gBattleAnimMove_Retaliate:: loadspritegfx ANIM_TAG_CUT @Cut monbg ANIM_DEF_PARTNER setalpha 9, 8 @@ -5173,7 +5116,7 @@ Move_RETALIATE:: blendoff end -Move_FINAL_GAMBIT:: +gBattleAnimMove_FinalGambit:: loadspritegfx ANIM_TAG_PINK_CLOUD @yawn animation loadspritegfx ANIM_TAG_WATER_IMPACT @blue colour loadspritegfx ANIM_TAG_EXPLOSION @explosion animation @@ -5200,7 +5143,7 @@ Move_FINAL_GAMBIT:: waitforvisualfinish end -Move_BESTOW:: +gBattleAnimMove_Bestow:: monbg ANIM_TARGET splitbgprio ANIM_TARGET panse SE_M_METRONOME, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0 @@ -5210,7 +5153,7 @@ Move_BESTOW:: clearmonbg ANIM_TARGET end -Move_INFERNO:: +gBattleAnimMove_Inferno:: loadspritegfx ANIM_TAG_SMALL_EMBER call SetImpactBackground loopsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET, 40, 4 @@ -5254,7 +5197,7 @@ InfernoAnim: delay 1 return -Move_WATER_PLEDGE:: +gBattleAnimMove_WaterPledge:: loadspritegfx ANIM_TAG_WATER_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -5374,7 +5317,7 @@ Move_WATER_PLEDGE:: blendoff end -Move_FIRE_PLEDGE:: +gBattleAnimMove_FirePledge:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -5473,7 +5416,7 @@ Move_FIRE_PLEDGE:: blendoff end -Move_GRASS_PLEDGE:: +gBattleAnimMove_GrassPledge:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_WHIP_HIT monbg ANIM_DEF_PARTNER @@ -5580,7 +5523,7 @@ GrassPledgeMiddleFountain: delay 4 return -Move_VOLT_SWITCH:: +gBattleAnimMove_VoltSwitch:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SPARK_2 loadspritegfx ANIM_TAG_THIN_RING @@ -5619,7 +5562,7 @@ VoltSwitchAgainstPartner: createvisualtask AnimTask_SlideOffScreen, 5, ANIM_ATTACKER, 2 goto VoltSwitchContinue -Move_STRUGGLE_BUG:: +gBattleAnimMove_StruggleBug:: loadspritegfx ANIM_TAG_MOVEMENT_WAVES loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -5645,12 +5588,12 @@ Move_STRUGGLE_BUG:: blendoff end -Move_BULLDOZE:: +gBattleAnimMove_Bulldoze:: createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 3 delay 0x8 - goto Move_EARTHQUAKE + goto gBattleAnimMove_Earthquake -Move_FROST_BREATH:: +gBattleAnimMove_FrostBreath:: loadspritegfx ANIM_TAG_ICE_CHUNK loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_FIRE_PLUME @@ -5688,7 +5631,7 @@ Move_FROST_BREATH:: call UnsetPsychicBg end -Move_DRAGON_TAIL:: +gBattleAnimMove_DragonTail:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_SLAM_HIT loadspritegfx ANIM_TAG_IMPACT @@ -5724,7 +5667,7 @@ TailWhackDown: createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 12, 25, 4, 4 return -Move_WORK_UP:: +gBattleAnimMove_WorkUp:: loadspritegfx ANIM_TAG_FOCUS_ENERGY playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -28, 26, 2 @@ -5758,7 +5701,7 @@ Move_WORK_UP:: waitforvisualfinish end -Move_ELECTROWEB:: +gBattleAnimMove_Electroweb:: loadspritegfx ANIM_TAG_SPIDER_WEB loadspritegfx ANIM_TAG_WEB_THREAD loadspritegfx ANIM_TAG_SPARK_2 @@ -5776,11 +5719,11 @@ Move_ELECTROWEB:: delay 1 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 9, 0, RGB_BLACK call ElectricityEffect_OnTargets -Move_ELECTROWEB_Wait:: +gBattleAnimMove_ElectrowebWait:: waitforvisualfinish end -Move_WILD_CHARGE:: +gBattleAnimMove_WildCharge:: loadspritegfx ANIM_TAG_SPARK_2 loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_IMPACT @@ -5815,7 +5758,7 @@ ScreenFlash: createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x07FE return -Move_DRILL_RUN:: +gBattleAnimMove_DrillRun:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HORN_HIT setalpha 12, 8 @@ -5870,7 +5813,7 @@ Move_DRILL_RUN:: call UnsetPsychicBg end -Move_DUAL_CHOP:: +gBattleAnimMove_DualChop:: loadspritegfx ANIM_TAG_HANDS_AND_FEET @hand loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_POISON_BUBBLE @purple @@ -5892,7 +5835,7 @@ Move_DUAL_CHOP:: blendoff end -Move_HEART_STAMP:: +gBattleAnimMove_HeartStamp:: loadspritegfx ANIM_TAG_HEART_STAMP monbg ANIM_TARGET loopsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER, 0xc, 0x3 @@ -5905,7 +5848,7 @@ Move_HEART_STAMP:: waitforvisualfinish end -Move_HORN_LEECH:: +gBattleAnimMove_HornLeech:: loadspritegfx ANIM_TAG_HORN_LEECH @Horn loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_ORBS @@ -5922,7 +5865,7 @@ Move_HORN_LEECH:: waitforvisualfinish end -Move_SACRED_SWORD:: +gBattleAnimMove_SacredSword:: loadspritegfx ANIM_TAG_CUT @Cut loadspritegfx ANIM_TAG_SWORD @Sword loadspritegfx ANIM_TAG_HYDRO_PUMP @Blue Colour @@ -5948,7 +5891,7 @@ Move_SACRED_SWORD:: waitforvisualfinish end -Move_RAZOR_SHELL:: +gBattleAnimMove_RazorShell:: loadspritegfx ANIM_TAG_RAZOR_SHELL loadspritegfx ANIM_TAG_CUT monbg ANIM_TARGET @@ -5962,7 +5905,7 @@ Move_RAZOR_SHELL:: waitforvisualfinish end -Move_HEAT_CRASH:: +gBattleAnimMove_HeatCrash:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_WARM_ROCK loadspritegfx ANIM_TAG_ROCKS @@ -5986,7 +5929,7 @@ Move_HEAT_CRASH:: blendoff end -Move_LEAF_TORNADO:: +gBattleAnimMove_LeafTornado:: loadspritegfx ANIM_TAG_GUST @Gust loadspritegfx ANIM_TAG_LEAF @Leaves monbg ANIM_DEF_PARTNER @@ -6017,7 +5960,7 @@ LeafTornadoVortex: delay 0x2 return -Move_STEAMROLLER:: +gBattleAnimMove_Steamroller:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -6043,7 +5986,7 @@ Move_STEAMROLLER:: blendoff end -Move_COTTON_GUARD:: +gBattleAnimMove_CottonGuard:: loadspritegfx ANIM_TAG_SPORE monbg ANIM_ATK_PARTNER setalpha 12, 8 @@ -6073,7 +6016,7 @@ CottonSporesSpiralInward: delay 0x3 return -Move_NIGHT_DAZE:: +gBattleAnimMove_NightDaze:: loadspritegfx ANIM_TAG_THIN_RING @uproar loadspritegfx ANIM_TAG_PURPLE_FLAME @dark violet color loadspritegfx ANIM_TAG_RED_ORB @circles @@ -6111,7 +6054,7 @@ Move_NIGHT_DAZE:: waitforvisualfinish end -Move_PSYSTRIKE:: +gBattleAnimMove_Psystrike:: monbg ANIM_TARGET setalpha 8, 8 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 @@ -6128,7 +6071,7 @@ Move_PSYSTRIKE:: blendoff end -Move_TAIL_SLAP:: +gBattleAnimMove_TailSlap:: loadspritegfx ANIM_TAG_IMPACT @Hit loadspritegfx ANIM_TAG_AIR_WAVE_2 @Aeroblast loadspritegfx ANIM_TAG_PUNISHMENT_BLADES @Punishment Blades @@ -6149,7 +6092,7 @@ TailSlapLeft: createsprite gTailSlapTemplate, ANIM_ATTACKER, 2, 0x8, 0x0, 0x1, 0x0 goto TailSlapContinue -Move_HURRICANE:: +gBattleAnimMove_Hurricane:: loadspritegfx ANIM_TAG_GUST monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -6186,7 +6129,7 @@ HurricaneGustCentered: createvisualtask AnimTask_AnimateGustTornadoPalette, 5, 1, 70 return -Move_HEAD_CHARGE:: +gBattleAnimMove_HeadCharge:: loadspritegfx ANIM_TAG_IMPACT fadetobgfromset BG_GIGA_IMPACT_OPPONENT, BG_GIGA_IMPACT_PLAYER, BG_GIGA_IMPACT_OPPONENT waitbgfadein @@ -6206,7 +6149,7 @@ Move_HEAD_CHARGE:: waitbgfadeout end -Move_GEAR_GRIND:: +gBattleAnimMove_GearGrind:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_GEAR @Gear monbg ANIM_TARGET @@ -6229,7 +6172,7 @@ Move_GEAR_GRIND:: blendoff end -Move_SEARING_SHOT:: +gBattleAnimMove_SearingShot:: loadspritegfx ANIM_TAG_SPARK_2 @yellow color loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @red color loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge @@ -6315,7 +6258,7 @@ Move_SEARING_SHOT:: blendoff end -Move_TECHNO_BLAST:: +gBattleAnimMove_TechnoBlast:: createvisualtask AnimTask_TechnoBlast, 0x5 jumpargeq 0x0, TYPE_FIRE, TechnoBlastFire jumpargeq 0x0, TYPE_WATER, TechnoBlastWater @@ -6778,7 +6721,7 @@ TechnoBlastIceChargeParticles: delay 0x4 return -Move_RELIC_SONG:: +gBattleAnimMove_RelicSong:: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_MUSIC_NOTES @@ -6859,7 +6802,7 @@ Move_RELIC_SONG:: waitforvisualfinish end -Move_SECRET_SWORD:: +gBattleAnimMove_SecretSword:: loadspritegfx ANIM_TAG_CUT @Cut loadspritegfx ANIM_TAG_SWORD @Sword loadspritegfx ANIM_TAG_HYDRO_PUMP @Blue Colour @@ -6888,7 +6831,7 @@ Move_SECRET_SWORD:: waitforvisualfinish end -Move_GLACIATE:: +gBattleAnimMove_Glaciate:: loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice loadspritegfx ANIM_TAG_BLACK_SMOKE @smoke loadspritegfx ANIM_TAG_ICE_CHUNK @White Colour @@ -6919,7 +6862,7 @@ Move_GLACIATE:: call UnsetPsychicBg end -Move_BOLT_STRIKE:: +gBattleAnimMove_BoltStrike:: loadspritegfx ANIM_TAG_SPARK_2 @Electricity loadspritegfx ANIM_TAG_IMPACT @Hit loadspritegfx ANIM_TAG_ELECTRIC_ORBS @Electric Balls @@ -6962,7 +6905,7 @@ Move_BOLT_STRIKE:: waitforvisualfinish end -Move_BLUE_FLARE:: +gBattleAnimMove_BlueFlare:: loadspritegfx ANIM_TAG_SMALL_EMBER @Fire loadspritegfx ANIM_TAG_METAL_BITS @Blue Flare Colour createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0x10, 0x0 @@ -7032,7 +6975,7 @@ BlueFlareFlameSpreadEffect: createsprite gBlueFlareBurnTemplate, ANIM_TARGET, 1, 0x0, 0xa, 0x70, 0xff80, 0x28 return -Move_FIERY_DANCE:: +gBattleAnimMove_FieryDance:: loadspritegfx ANIM_TAG_SMALL_EMBER createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0xc, 0x14be waitforvisualfinish @@ -7052,7 +6995,7 @@ Move_FIERY_DANCE:: waitforvisualfinish end -Move_FREEZE_SHOCK:: +gBattleAnimMove_FreezeShock:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SPARK_2 loadspritegfx ANIM_TAG_ICE_CHUNK @Ice Ball @@ -7093,7 +7036,7 @@ FreezeShockAttack: waitforvisualfinish end -Move_ICE_BURN:: +gBattleAnimMove_IceBurn:: loadspritegfx ANIM_TAG_BLACK_SMOKE @smoke loadspritegfx ANIM_TAG_ICE_CHUNK @white color loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice @@ -7159,7 +7102,7 @@ IceBurnUnleash: clearmonbg ANIM_TARGET end -Move_SNARL:: +gBattleAnimMove_Snarl:: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_IMPACT @@ -7203,7 +7146,7 @@ Move_SNARL:: blendoff end -Move_ICICLE_CRASH:: +gBattleAnimMove_IcicleCrash:: loadspritegfx ANIM_TAG_ICICLE_SPEAR @Icicle fadetobg BG_ICE waitbgfadein @@ -7255,7 +7198,7 @@ LaunchIcicleCrashSpear: delay 0x2 return -Move_V_CREATE:: +gBattleAnimMove_VCreate:: loadspritegfx ANIM_TAG_SMALL_EMBER @fire blast flame loadspritegfx ANIM_TAG_THIN_RING @calm mind animation loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @red color @@ -7333,7 +7276,7 @@ VCreateFlames: delay 0x3 return -Move_FUSION_FLARE:: +gBattleAnimMove_FusionFlare:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @ball loadspritegfx ANIM_TAG_VERTICAL_HEX @ball palette @@ -7391,7 +7334,7 @@ FusionFlareBuff: createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return -Move_FUSION_BOLT:: +gBattleAnimMove_FusionBolt:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_ELECTRICITY @@ -7438,7 +7381,7 @@ Move_FUSION_BOLT:: end @@@@@@@@@@@@@@@@@@@@@@@ GEN 6 @@@@@@@@@@@@@@@@@@@@@@@ -Move_FLYING_PRESS:: +gBattleAnimMove_FlyingPress:: loadspritegfx ANIM_TAG_ROUND_SHADOW @fly/bounce loadspritegfx ANIM_TAG_GRAY_SMOKE @smoke setalpha 15, 0 @@ -7471,7 +7414,7 @@ Move_FLYING_PRESS:: blendoff end -Move_MAT_BLOCK:: +gBattleAnimMove_MatBlock:: loadspritegfx ANIM_TAG_CONVERSION loadspritegfx ANIM_TAG_GREEN_LIGHT_WALL @green color monbg ANIM_ATK_PARTNER @@ -7501,7 +7444,7 @@ Move_MAT_BLOCK:: blendoff end -Move_BELCH:: +gBattleAnimMove_Belch:: loadspritegfx ANIM_TAG_BERRY_NORMAL loadspritegfx ANIM_TAG_EXPLOSION @Explosion monbg ANIM_TARGET @@ -7533,7 +7476,7 @@ Move_BELCH:: blendoff end -Move_ROTOTILLER:: +gBattleAnimMove_Rototiller:: loadspritegfx ANIM_TAG_MUD_SAND loadspritegfx ANIM_TAG_DIRT_MOUND loadspritegfx ANIM_TAG_GREEN_SPARKLE @@ -7552,7 +7495,7 @@ Move_ROTOTILLER:: waitforvisualfinish end -Move_STICKY_WEB:: +gBattleAnimMove_StickyWeb:: loadspritegfx ANIM_TAG_SPIDER_WEB loadspritegfx ANIM_TAG_WEB_THREAD monbg ANIM_DEF_PARTNER @@ -7590,7 +7533,7 @@ Move_STICKY_WEB:: createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 9, 0, RGB_BLACK end -Move_FELL_STINGER:: +gBattleAnimMove_FellStinger:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -7611,7 +7554,7 @@ Move_FELL_STINGER:: clearmonbg ANIM_TARGET end -Move_PHANTOM_FORCE:: +gBattleAnimMove_PhantomForce:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT choosetwoturnanim PhantomForcePrep PhantomForceAttack @@ -7683,7 +7626,7 @@ PhantomForceBg: waitbgfadein return -Move_TRICK_OR_TREAT:: +gBattleAnimMove_TrickOrTreat:: loadspritegfx ANIM_TAG_EYE_SPARKLE loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT fadetobg BG_NIGHTMARE @@ -7707,7 +7650,7 @@ Move_TRICK_OR_TREAT:: waitbgfadein end -Move_NOBLE_ROAR:: +gBattleAnimMove_NobleRoar:: loadspritegfx ANIM_TAG_NOISE_LINE monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER @@ -7728,10 +7671,10 @@ Move_NOBLE_ROAR:: delay 20 end -Move_ION_DELUGE:: +gBattleAnimMove_IonDeluge:: end -Move_PARABOLIC_CHARGE:: +gBattleAnimMove_ParabolicCharge:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_SPARK @@ -7786,7 +7729,7 @@ ParabolicChargeDouble: createvisualtask AnimTask_BlendBattleAnimPal, 5, 4 | 8 | 0x10, 0, 0, 0, RGB_BLACK goto ParabolicChargeHeal; -Move_FORESTS_CURSE:: +gBattleAnimMove_ForestsCurse:: loadspritegfx ANIM_TAG_ROOTS @frenzy plant loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT @curse monbg ANIM_ATTACKER @@ -7824,7 +7767,7 @@ Move_FORESTS_CURSE:: clearmonbg ANIM_ATTACKER end -Move_PETAL_BLIZZARD:: +gBattleAnimMove_PetalBlizzard:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_FLOWER @@ -7871,7 +7814,7 @@ Move_PETAL_BLIZZARD:: blendoff end -Move_FREEZE_DRY:: +gBattleAnimMove_FreezeDry:: monbg ANIM_DEF_PARTNER setalpha 12, 8 loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -7907,7 +7850,7 @@ Move_FREEZE_DRY:: blendoff end -Move_DISARMING_VOICE:: +gBattleAnimMove_DisarmingVoice:: loadspritegfx ANIM_TAG_NOISE_LINE createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x6e7d waitforvisualfinish @@ -7923,7 +7866,7 @@ Move_DISARMING_VOICE:: waitforvisualfinish end -Move_PARTING_SHOT:: +gBattleAnimMove_PartingShot:: loadspritegfx ANIM_TAG_NOISE_LINE fadetobg BG_DARK waitbgfadein @@ -7941,7 +7884,7 @@ Move_PARTING_SHOT:: waitbgfadein end -Move_TOPSY_TURVY:: +gBattleAnimMove_TopsyTurvy:: loadspritegfx ANIM_TAG_SWEAT_DROP setalpha 12, 8 createsprite gSimplePaletteBlendSpriteTemplate ANIM_TARGET, 2, 1, 2, 0, 4, RGB_BLACK @@ -7958,7 +7901,7 @@ Move_TOPSY_TURVY:: blendoff end -Move_DRAINING_KISS:: +gBattleAnimMove_DrainingKiss:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_IMPACT @@ -7988,7 +7931,7 @@ Move_DRAINING_KISS:: waitforvisualfinish end -Move_CRAFTY_SHIELD:: +gBattleAnimMove_CraftyShield:: loadspritegfx ANIM_TAG_CRAFTY_SHIELD monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER @@ -8043,7 +7986,7 @@ Move_CRAFTY_SHIELD:: blendoff end -Move_FLOWER_SHIELD:: +gBattleAnimMove_FlowerShield:: loadspritegfx ANIM_TAG_FLOWER loadspritegfx ANIM_TAG_IMPACT setalpha 12, 8 @@ -8073,7 +8016,7 @@ Move_FLOWER_SHIELD:: blendoff end -Move_GRASSY_TERRAIN:: +gBattleAnimMove_GrassyTerrain:: loadspritegfx ANIM_TAG_ORBS @Recover Ball loadspritegfx ANIM_TAG_GREEN_SPARKLE @Green Star playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER @@ -8110,7 +8053,7 @@ Move_GRASSY_TERRAIN:: waitforvisualfinish end -Move_MISTY_TERRAIN:: +gBattleAnimMove_MistyTerrain:: loadspritegfx ANIM_TAG_ORBS @Recover Ball loadspritegfx ANIM_TAG_WATER_GUN @Light Blue Colour loadspritegfx ANIM_TAG_GREEN_SPARKLE @@ -8148,7 +8091,7 @@ Move_MISTY_TERRAIN:: waitforvisualfinish end -Move_ELECTRIFY:: +gBattleAnimMove_Electrify:: loadspritegfx ANIM_TAG_GUARD_RING @ring around user loadspritegfx ANIM_TAG_SPARK_2 @yellow color loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color @@ -8211,7 +8154,7 @@ Move_ELECTRIFY:: clearmonbg ANIM_DEF_PARTNER end -Move_PLAY_ROUGH:: +gBattleAnimMove_PlayRough:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_PINK_HEART loadspritegfx ANIM_TAG_DUCK @@ -8267,7 +8210,7 @@ Move_PLAY_ROUGH:: waitforvisualfinish end -Move_FAIRY_WIND:: +gBattleAnimMove_FairyWind:: loadspritegfx ANIM_TAG_PINK_CLOUD monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -8294,7 +8237,7 @@ Move_FAIRY_WIND:: blendoff end -Move_MOONBLAST:: +gBattleAnimMove_Moonblast:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_MOON loadspritegfx ANIM_TAG_GREEN_SPARKLE @@ -8317,7 +8260,7 @@ Move_MOONBLAST:: blendoff end -Move_BOOMBURST:: +gBattleAnimMove_Boomburst:: loadspritegfx ANIM_TAG_EXPLOSION loadspritegfx ANIM_TAG_THIN_RING createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x4 | 0x8 | 0x10 @@ -8368,7 +8311,7 @@ Boomburst_Doubles: createsprite gExplosionSpriteTemplate, ANIM_ATTACKER, 3, 16, 16, 1, 1 goto Boomburst_Last -Move_FAIRY_LOCK:: +gBattleAnimMove_FairyLock:: loadspritegfx ANIM_TAG_FAIRY_LOCK_CHAINS setalpha 8, 8 monbg ANIM_ATK_PARTNER @@ -8389,12 +8332,12 @@ Move_FAIRY_LOCK:: blendoff end -Move_KINGS_SHIELD:: +gBattleAnimMove_KingsShield:: loadspritegfx ANIM_TAG_PROTECT @protect createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PROTECT, 0x0, 0xC, 0xC, 0x318C @Gray - goto Move_PROTECT + goto gBattleAnimMove_Protect -Move_PLAY_NICE:: +gBattleAnimMove_PlayNice:: loadspritegfx ANIM_TAG_RED_HEART loopsewithpan SE_M_SANDSTORM, SOUND_PAN_ATTACKER, 0xc, 0x3 createvisualtask AnimTask_SwayMon, 5, 0, 12, 4096, 4, ANIM_ATTACKER @@ -8402,7 +8345,7 @@ Move_PLAY_NICE:: createsprite gRedHeartProjectileSpriteTemplate, ANIM_TARGET, 3, 0x14, 0xfff8 end -Move_CONFIDE:: +gBattleAnimMove_Confide:: loadspritegfx ANIM_TAG_CONFIDE @Confide Bubble createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 3 createsprite gConfideBubbleTemplate, ANIM_ATTACKER, 11, 0x0, 0x64 @@ -8410,7 +8353,7 @@ Move_CONFIDE:: waitforvisualfinish end -Move_DIAMOND_STORM:: +gBattleAnimMove_DiamondStorm:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ICE_CRYSTALS monbg ANIM_DEF_PARTNER @@ -8483,7 +8426,7 @@ Move_DIAMOND_STORM:: blendoff end -Move_STEAM_ERUPTION:: +gBattleAnimMove_SteamEruption:: loadspritegfx ANIM_TAG_STEAM_ERUPTION @Steam Eruption Particle createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x7, 0x043D delay 0x20 @@ -8523,7 +8466,7 @@ SteamEruptionBreath: delay 0x1 return -Move_HYPERSPACE_HOLE:: +gBattleAnimMove_HyperspaceHole:: loadspritegfx ANIM_TAG_IMPACT @Hits loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour @@ -8576,7 +8519,7 @@ HyperspaceHoleMovement: delay 0x4 return -Move_WATER_SHURIKEN:: +gBattleAnimMove_WaterShuriken:: loadspritegfx ANIM_TAG_WATER_ORB @blue color loadspritegfx ANIM_TAG_YELLOW_STAR @swift loadspritegfx ANIM_TAG_BLUE_RING_2 @rings @@ -8599,7 +8542,7 @@ Move_WATER_SHURIKEN:: clearmonbg ANIM_DEF_PARTNER end -Move_MYSTICAL_FIRE:: +gBattleAnimMove_MysticalFire:: call SetPsychicBackground loadspritegfx ANIM_TAG_FIRE setalpha 8, 8 @@ -8629,7 +8572,7 @@ Move_MYSTICAL_FIRE:: call UnsetPsychicBg end -Move_SPIKY_SHIELD:: +gBattleAnimMove_SpikyShield:: loadspritegfx ANIM_TAG_PROTECT loadspritegfx ANIM_TAG_GREEN_SPIKE monbg ANIM_ATK_PARTNER @@ -8664,7 +8607,7 @@ Move_SPIKY_SHIELD:: clearmonbg ANIM_ATK_PARTNER end -Move_AROMATIC_MIST:: +gBattleAnimMove_AromaticMist:: loadspritegfx ANIM_TAG_PINK_PETAL playsewithpan SE_M_SWEET_SCENT, SOUND_PAN_ATTACKER createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x6E7D @@ -8681,7 +8624,7 @@ Move_AROMATIC_MIST:: waitforvisualfinish end -Move_EERIE_IMPULSE:: +gBattleAnimMove_EerieImpulse:: loadspritegfx ANIM_TAG_THIN_RING @hypervoice circle loadspritegfx ANIM_TAG_SPARK @electric particles loadspritegfx ANIM_TAG_SPARK_2 @electric particles @@ -8726,7 +8669,7 @@ Move_EERIE_IMPULSE:: clearmonbg ANIM_DEF_PARTNER end -Move_VENOM_DRENCH:: +gBattleAnimMove_VenomDrench:: loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_DEF_PARTNER createsprite gVenomDrenchAcidTemplate, ANIM_TARGET, 2, 0xfffb, 0x1, 0xfffb, 1 @@ -8773,7 +8716,7 @@ AcidDrench: delay 0x2 return -Move_POWDER:: +gBattleAnimMove_Powder:: loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color loadspritegfx ANIM_TAG_SPORE @powder monbg ANIM_DEF_PARTNER @@ -8794,7 +8737,7 @@ POWDER_SPORE: delay 0xc return -Move_GEOMANCY:: +gBattleAnimMove_Geomancy:: loadspritegfx ANIM_TAG_ZYGARDE_HEXES @Hex loadspritegfx ANIM_TAG_GUARD_RING @safeguard loadspritegfx ANIM_TAG_PAW_PRINT @yellow color @@ -8924,7 +8867,7 @@ GeomancyRageBuff: delay 0x1 return -Move_MAGNETIC_FLUX:: +gBattleAnimMove_MagneticFlux:: loadspritegfx ANIM_TAG_THIN_RING @uproar loadspritegfx ANIM_TAG_SPARK_2 @ElectricityEffect loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color @@ -8956,7 +8899,7 @@ MagneticFluxSparks2: createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 return -Move_HAPPY_HOUR:: +gBattleAnimMove_HappyHour:: loadspritegfx ANIM_TAG_COIN monbg ANIM_ATTACKER loopsewithpan SE_M_PAY_DAY, SOUND_PAN_TARGET, 0x8, 10 @@ -8992,7 +8935,7 @@ CoinShower: delay 0x2 return -Move_ELECTRIC_TERRAIN:: +gBattleAnimMove_ElectricTerrain:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 @@ -9028,7 +8971,7 @@ Move_ELECTRIC_TERRAIN:: waitforvisualfinish end -Move_DAZZLING_GLEAM:: +gBattleAnimMove_DazzlingGleam:: loadspritegfx ANIM_TAG_SPARKLE_2 loadspritegfx ANIM_TAG_BLUE_STAR createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x2, 0x0, 0xd, 0x7fff @@ -9047,7 +8990,7 @@ Move_DAZZLING_GLEAM:: blendoff end -Move_CELEBRATE:: +gBattleAnimMove_Celebrate:: loadspritegfx ANIM_TAG_ITEM_BAG createsprite gCelebrateBagTemplate, ANIM_ATTACKER, 2, 0x0 playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER @@ -9057,7 +9000,7 @@ Move_CELEBRATE:: loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER 0x16 0x3 end -Move_HOLD_HANDS:: +gBattleAnimMove_HoldHands:: loadspritegfx ANIM_TAG_TAG_HAND @hand loadspritegfx ANIM_TAG_MAGENTA_HEART @charm loadspritegfx ANIM_TAG_VERTICAL_HEX @red @@ -9098,7 +9041,7 @@ Move_HOLD_HANDS:: createvisualtask AnimTask_BlendMonInAndOut, 2, ANIM_ATK_PARTNER, RGB_YELLOW, 12, 1, 1 end -Move_BABY_DOLL_EYES:: +gBattleAnimMove_BabyDollEyes:: loadspritegfx ANIM_TAG_LEER loadspritegfx ANIM_TAG_PINK_CLOUD loadspritegfx ANIM_TAG_OPENING_EYE @eye @@ -9120,7 +9063,7 @@ Move_BABY_DOLL_EYES:: blendoff end -Move_NUZZLE:: +gBattleAnimMove_Nuzzle:: loadspritegfx ANIM_TAG_MAGENTA_HEART loadspritegfx ANIM_TAG_ITEM_BAG loadspritegfx ANIM_TAG_SPARK_2 @@ -9141,7 +9084,7 @@ Move_NUZZLE:: waitforvisualfinish end -Move_HOLD_BACK:: +gBattleAnimMove_HoldBack:: loadspritegfx ANIM_TAG_PAW_PRINT @ yellow/brown loadspritegfx ANIM_TAG_IMPACT @ hit loadspritegfx ANIM_TAG_PURPLE_SWIPE @ swipe @@ -9168,7 +9111,7 @@ Move_HOLD_BACK:: blendoff end -Move_INFESTATION:: +gBattleAnimMove_Infestation:: loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color loadspritegfx ANIM_TAG_SMALL_BUBBLES @circle particles monbg ANIM_DEF_PARTNER @@ -9201,7 +9144,7 @@ InfestationVortex: delay 0x1 return -Move_POWER_UP_PUNCH:: +gBattleAnimMove_PowerUpPunch:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_BREATH @@ -9218,7 +9161,7 @@ Move_POWER_UP_PUNCH:: blendoff end -Move_OBLIVION_WING:: +gBattleAnimMove_OblivionWing:: loadspritegfx ANIM_TAG_HYDRO_PUMP loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_BLUE_STAR @@ -9258,7 +9201,7 @@ OblivionWingBeam: delay 0x2 return -Move_THOUSAND_ARROWS:: +gBattleAnimMove_ThousandArrows:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation loadspritegfx ANIM_TAG_ELECTRICITY @charge animation loadspritegfx ANIM_TAG_LEAF @green color @@ -9346,7 +9289,7 @@ ThousandArrowsDown: playsewithpan SE_M_DIG, SOUND_PAN_ATTACKER return -Move_THOUSAND_WAVES:: +gBattleAnimMove_ThousandWaves:: loadspritegfx ANIM_TAG_ZYGARDE_HEXES @Hex loadspritegfx ANIM_TAG_FLYING_DIRT @heat wave animation loadspritegfx ANIM_TAG_LEAF @green color @@ -9475,7 +9418,7 @@ ThousandWavesRotatingImpact: createsprite gThousandWavesPoundImpactTemplate, ANIM_TARGET, 2, 0x1, 0xfffa, 0x0, 0x3 return -Move_LANDS_WRATH:: +gBattleAnimMove_LandsWrath:: loadspritegfx ANIM_TAG_WATER_ORB @whirl motion loadspritegfx ANIM_TAG_SPARK_2 @yellow color monbg ANIM_ATTACKER @@ -9514,7 +9457,7 @@ LandsWrathVortex: delay 0x2 return -Move_LIGHT_OF_RUIN:: +gBattleAnimMove_LightOfRuin:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge loadspritegfx ANIM_TAG_ELECTRIC_ORBS @createvisualtask particles loadspritegfx ANIM_TAG_ORBS @beam particles @@ -9575,7 +9518,7 @@ LightOfRuinBeam: delay 0x1 return -Move_ORIGIN_PULSE:: +gBattleAnimMove_OriginPulse:: loadspritegfx ANIM_TAG_THIN_RING @uproar loadspritegfx ANIM_TAG_WATER_ORB @blue color loadspritegfx ANIM_TAG_ORBS @circles @@ -9647,7 +9590,7 @@ Move_ORIGIN_PULSE:: blendoff end -Move_PRECIPICE_BLADES:: +gBattleAnimMove_PrecipiceBlades:: loadspritegfx ANIM_TAG_LARGE_SPIKE loadspritegfx ANIM_TAG_FIRE_PLUME createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_LARGE_SPIKE, 0, 10, 10, 0x159F @Blood orange @@ -9703,7 +9646,7 @@ PrecipiceBladesOpponent: createsprite gPrecipiceBladesSpikeTemplate, ANIM_ATTACKER, 69, ANIM_ATTACKER, 0, -17, 120, 0x0 goto PrecipiceBladesContinue -Move_DRAGON_ASCENT:: +gBattleAnimMove_DragonAscent:: loadspritegfx ANIM_TAG_DRAGON_ASCENT loadspritegfx ANIM_TAG_IMPACT createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 11, 11, RGB(16, 31, 16) @@ -9743,7 +9686,7 @@ Move_DRAGON_ASCENT:: call UnsetPsychicBg end -Move_HYPERSPACE_FURY:: +gBattleAnimMove_HyperspaceFury:: loadspritegfx ANIM_TAG_HOOPA_HAND @Hoopa Hand loadspritegfx ANIM_TAG_HOOPA_RING @Hoopa Ring loadspritegfx ANIM_TAG_IMPACT @@ -9830,7 +9773,7 @@ HyperspaceFuryRandomImpact: return @@@@@@@@@@@@@@@@@@@@@@@ GEN 7 @@@@@@@@@@@@@@@@@@@@@@@ -Move_SHORE_UP:: +gBattleAnimMove_ShoreUp:: loadspritegfx ANIM_TAG_FLYING_DIRT @sandstorm loadspritegfx ANIM_TAG_BLUE_STAR @heal2 playsewithpan SE_M_SANDSTORM, 0x0 @@ -9853,7 +9796,7 @@ Move_SHORE_UP:: waitforvisualfinish end -Move_FIRST_IMPRESSION:: +gBattleAnimMove_FirstImpression:: loadspritegfx ANIM_TAG_SWEAT_BEAD @astonish loadspritegfx ANIM_TAG_IMPACT @pound hit loadspritegfx ANIM_TAG_RAZOR_LEAF @green @@ -9883,7 +9826,7 @@ Move_FIRST_IMPRESSION:: clearmonbg ANIM_TARGET end -Move_BANEFUL_BUNKER:: +gBattleAnimMove_BanefulBunker:: loadspritegfx ANIM_TAG_PROTECT @protect loadspritegfx ANIM_TAG_POISON_BUBBLE @poison monbg ANIM_ATK_PARTNER @@ -9909,33 +9852,31 @@ Move_BANEFUL_BUNKER:: clearmonbg ANIM_ATK_PARTNER end -Move_SPIRIT_SHACKLE:: +gBattleAnimMove_SpiritShackle:: loadspritegfx ANIM_TAG_SPIRIT_ARROW @Arrow - loadspritegfx ANIM_TAG_CHAIN_LINK @Chain - monbg ANIM_DEF_PARTNER - splitbgprio ANIM_TARGET - setalpha 12, 8 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x10, 0x0 - waitforvisualfinish + loadspritegfx ANIM_TAG_PURPLE_CHAIN + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PURPLE_CHAIN, 0, 9, 9, RGB_BLACK + monbg ANIM_TARGET playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER - createsprite gSpiritShackleArrowTemplate, ANIM_TARGET, 2, 0x10, 0x0, 0x0, 0x0, 0xf - delay 0x8 + createsprite gSpiritShackleArrowTemplate, ANIM_TARGET, 2, 16, 0, 0, 0, 15 + delay 8 createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 10, 1 waitforvisualfinish - loopsewithpan SE_SHINY, SOUND_PAN_ATTACKER, 0x1c, 0x2 - createsprite gSpiritShackleChainTemplate, ANIM_TARGET, 2, 0xfff0, 0xfff0 - delay 0x4 - createsprite gSpiritShackleChainTemplate, ANIM_TARGET, 2, 0xfff0, 0x0 - delay 0x4 - createsprite gSpiritShackleChainTemplate, ANIM_TARGET, 2, 0xfff0, 0x10 + loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 6, 2 + createsprite gChainBindingSpriteTemplate, ANIM_TARGET, 4, 0, 16, 0, 1 + delay 7 + createsprite gChainBindingSpriteTemplate, ANIM_TARGET, 2, 0, 8, 1, 1 + delay 3 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 8, 1 + delay 20 + setarg 7, 0xFFFF + playsewithpan SE_M_BIND, SOUND_PAN_TARGET waitforvisualfinish - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x10, 0x0, 0x0 - waitforvisualfinish - clearmonbg ANIM_DEF_PARTNER + clearmonbg ANIM_TARGET blendoff end -Move_DARKEST_LARIAT:: +gBattleAnimMove_DarkestLariat:: fadetobg BG_DARK waitbgfadeout createvisualtask AnimTask_StartSlidingBg, 0x5, 0x0, 0x0, 0x0, 0xffff @@ -9973,7 +9914,7 @@ DarkestLariatImpact: delay 0x8 return -Move_SPARKLING_ARIA:: +gBattleAnimMove_SparklingAria:: loadspritegfx ANIM_TAG_WATER_ORB @blue color loadspritegfx ANIM_TAG_BUBBLE @circles loadspritegfx ANIM_TAG_HYDRO_PUMP @hydro pump @@ -10065,7 +10006,7 @@ SparklingAriaCharge: delay 0x4 return -Move_ICE_HAMMER:: +gBattleAnimMove_IceHammer:: loadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST @punch loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice loadspritegfx ANIM_TAG_ECLIPSING_ORB @gray color @@ -10096,7 +10037,7 @@ Move_ICE_HAMMER:: blendoff end -Move_FLORAL_HEALING:: +gBattleAnimMove_FloralHealing:: loadspritegfx ANIM_TAG_SPARKLE_2 @heal loadspritegfx ANIM_TAG_FLOWER @flowers loadspritegfx ANIM_TAG_LEAF @leaves @@ -10201,7 +10142,7 @@ CIRCLES_LEAVES: delay 0x2 return -Move_HIGH_HORSEPOWER:: +gBattleAnimMove_HighHorsepower:: loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST @horseshoe monbg ANIM_TARGET @@ -10226,7 +10167,7 @@ Move_HIGH_HORSEPOWER:: waitbgfadein end -Move_STRENGTH_SAP:: +gBattleAnimMove_StrengthSap:: loadspritegfx ANIM_TAG_GRAY_SMOKE @smoke loadspritegfx ANIM_TAG_TEAL_ALERT @inward loadspritegfx ANIM_TAG_RED_HEART @heart color @@ -10294,7 +10235,7 @@ Move_STRENGTH_SAP:: clearmonbg ANIM_DEF_PARTNER end -Move_SOLAR_BLADE:: +gBattleAnimMove_SolarBlade:: loadspritegfx ANIM_TAG_ORBS choosetwoturnanim SolarBeamSetUp SolarBladeUnleash SolarBladeUnleash: @@ -10332,7 +10273,7 @@ SolarBladeSunRays: delay 0x6 return -Move_LEAFAGE:: +gBattleAnimMove_Leafage:: loadspritegfx ANIM_TAG_RAZOR_LEAF @leaf loadspritegfx ANIM_TAG_IMPACT @hit monbg ANIM_DEF_PARTNER @@ -10347,7 +10288,7 @@ Move_LEAFAGE:: clearmonbg ANIM_DEF_PARTNER end -Move_SPOTLIGHT:: +gBattleAnimMove_Spotlight:: loadspritegfx ANIM_TAG_SPOTLIGHT loadspritegfx ANIM_TAG_TAG_HAND createvisualtask AnimTask_CreateSpotlight, 0x2 @@ -10361,7 +10302,7 @@ Move_SPOTLIGHT:: createvisualtask AnimTask_RemoveSpotlight, 0x2 end -Move_TOXIC_THREAD:: +gBattleAnimMove_ToxicThread:: loadspritegfx ANIM_TAG_STRING loadspritegfx ANIM_TAG_WEB_THREAD createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_STRING, 0, 0xA, 0xA, 0x6038 @Purple @@ -10403,7 +10344,7 @@ Move_TOXIC_THREAD:: createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x9, 0x0, 0x0 end -Move_LASER_FOCUS:: +gBattleAnimMove_LaserFocus:: loadspritegfx ANIM_TAG_EYE_SPARKLE @red loadspritegfx ANIM_TAG_OPENING_EYE @eyes loadspritegfx ANIM_TAG_LEER @leer @@ -10420,7 +10361,7 @@ Move_LASER_FOCUS:: clearmonbg ANIM_ATTACKER end -Move_GEAR_UP:: +gBattleAnimMove_GearUp:: loadspritegfx ANIM_TAG_GEAR loadspritegfx ANIM_TAG_SPARK_2 @sparks createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_ATTACKER, 0x2, 0x0, 0x9, 0x039B @@ -10473,7 +10414,7 @@ GearUpSparks: delay 0xF return -Move_THROAT_CHOP:: +gBattleAnimMove_ThroatChop:: loadspritegfx ANIM_TAG_HANDS_AND_FEET @karate chop loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_SMALL_RED_EYE @red color @@ -10508,7 +10449,7 @@ Move_THROAT_CHOP:: blendoff end -Move_POLLEN_PUFF:: +gBattleAnimMove_PollenPuff:: createvisualtask AnimTask_IsTargetSameSide, 0x5 jumpargeq 0x0, 0x1, PollenPuffAlly PollenPuffOpponent: @@ -10624,7 +10565,7 @@ PollenPuffAlly: blendoff end -Move_ANCHOR_SHOT:: +gBattleAnimMove_AnchorShot:: loadspritegfx ANIM_TAG_CHAIN_LINK loadspritegfx ANIM_TAG_ANCHOR playsewithpan SE_FALL SOUND_PAN_TARGET @@ -10646,7 +10587,7 @@ Move_ANCHOR_SHOT:: clearmonbg ANIM_TARGET end -Move_PSYCHIC_TERRAIN:: +gBattleAnimMove_PsychicTerrain:: loadspritegfx ANIM_TAG_ORBS @Recover Ball loadspritegfx ANIM_TAG_GREEN_SPARKLE @Green Star loadspritegfx ANIM_TAG_POISON_BUBBLE @Purple Colour @@ -10684,7 +10625,7 @@ Move_PSYCHIC_TERRAIN:: waitforvisualfinish end -Move_LUNGE:: +gBattleAnimMove_Lunge:: loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_TEAL_ALERT @hit particles loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @psycho boost charge @@ -10736,7 +10677,7 @@ Move_LUNGE:: clearmonbg ANIM_DEF_PARTNER end -Move_FIRE_LASH:: +gBattleAnimMove_FireLash:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET @@ -10779,7 +10720,7 @@ Move_FIRE_LASH:: clearmonbg ANIM_DEF_PARTNER end -Move_POWER_TRIP:: +gBattleAnimMove_PowerTrip:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color loadspritegfx ANIM_TAG_PURPLE_FLAME @dark violet color @@ -10820,7 +10761,7 @@ PowerTripBuffUp: createsprite gPowerTripFocusEnergyTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return -Move_BURN_UP:: +gBattleAnimMove_BurnUp:: loadspritegfx ANIM_TAG_THIN_RING @ring loadspritegfx ANIM_TAG_SMALL_RED_EYE @red color loadspritegfx ANIM_TAG_PINK_CLOUD @yawn @@ -10880,7 +10821,7 @@ Move_BURN_UP:: blendoff end -Move_SPEED_SWAP:: +gBattleAnimMove_SpeedSwap:: loadspritegfx ANIM_TAG_THIN_RING @ring loadspritegfx ANIM_TAG_ICE_CHUNK @blue green loadspritegfx ANIM_TAG_ORBS @circle @@ -10914,7 +10855,7 @@ Move_SPEED_SWAP:: clearmonbg ANIM_TARGET end -Move_SMART_STRIKE:: +gBattleAnimMove_SmartStrike:: loadspritegfx ANIM_TAG_POWER_GEM @gem loadspritegfx ANIM_TAG_AIR_WAVE @sonicboom loadspritegfx ANIM_TAG_IMPACT @hit @@ -10953,7 +10894,7 @@ Move_SMART_STRIKE:: waitforvisualfinish end -Move_PURIFY:: +gBattleAnimMove_Purify:: loadspritegfx ANIM_TAG_FLASH_CANNON_BALL @Ball loadspritegfx ANIM_TAG_BLACK_SMOKE @smoke loadspritegfx ANIM_TAG_ICE_CHUNK @White Colour @@ -10981,7 +10922,7 @@ Move_PURIFY:: blendoff end -Move_REVELATION_DANCE:: +gBattleAnimMove_RevelationDance:: loadspritegfx ANIM_TAG_ORBS @circles loadspritegfx ANIM_TAG_FLOWER @particles loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @another yellow @@ -11036,7 +10977,7 @@ Move_REVELATION_DANCE:: clearmonbg ANIM_TARGET end -Move_CORE_ENFORCER:: +gBattleAnimMove_CoreEnforcer:: loadspritegfx ANIM_TAG_SPARK_2 @yellow color loadspritegfx ANIM_TAG_LEAF @green color loadspritegfx ANIM_TAG_RAZOR_LEAF @another green color @@ -11254,7 +11195,7 @@ Move_CORE_ENFORCER:: blendoff end -Move_TROP_KICK:: +gBattleAnimMove_TropKick:: loadspritegfx ANIM_TAG_HANDS_AND_FEET @kick loadspritegfx ANIM_TAG_LEAF @leaves loadspritegfx ANIM_TAG_FLOWER @flowers @@ -11275,7 +11216,7 @@ Move_TROP_KICK:: clearmonbg ANIM_DEF_PARTNER end -Move_INSTRUCT:: +gBattleAnimMove_Instruct:: loadspritegfx ANIM_TAG_FINGER @finger loadspritegfx ANIM_TAG_SPOTLIGHT @spotlight setalpha 12, 8 @@ -11305,7 +11246,7 @@ Move_INSTRUCT:: blendoff end -General_BeakBlastSetUp: +gBattleAnimGeneral_BeakBlastSetUp:: loadspritegfx ANIM_TAG_SMALL_EMBER @Fire playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER delay 0x3 @@ -11313,7 +11254,7 @@ General_BeakBlastSetUp: createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x38, 0x0 waitforvisualfinish end -Move_BEAK_BLAST:: +gBattleAnimMove_BeakBlast:: loadspritegfx ANIM_TAG_IMPACT createvisualtask AnimTask_BlendBattleAnimPal, 0xA, F_PAL_ATTACKER, 0x2, 0x0, 0x9, 0x1F waitforvisualfinish @@ -11335,7 +11276,7 @@ Move_BEAK_BLAST:: waitforvisualfinish end -Move_CLANGING_SCALES:: +gBattleAnimMove_ClangingScales:: loadspritegfx ANIM_TAG_METAL_SOUND_WAVES @metal sound loadspritegfx ANIM_TAG_POISON_BUBBLE @purple color monbg ANIM_DEF_PARTNER @@ -11364,7 +11305,7 @@ ClangingScalesMetalSound: delay 0x2 return -Move_DRAGON_HAMMER:: +gBattleAnimMove_DragonHammer:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_GRAY_SMOKE createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROUND_SHADOW, 0, 12, 12, 0x7D7F @Pinkish purple @@ -11403,7 +11344,7 @@ Move_DRAGON_HAMMER:: blendoff end -Move_BRUTAL_SWING:: +gBattleAnimMove_BrutalSwing:: loadspritegfx ANIM_TAG_IMPACT @hits loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color monbg ANIM_TARGET @@ -11438,7 +11379,7 @@ Move_BRUTAL_SWING:: clearmonbg ANIM_TARGET end -Move_AURORA_VEIL:: +gBattleAnimMove_AuroraVeil:: loadspritegfx ANIM_TAG_GUARD_RING fadetobg BG_AURORA waitbgfadeout @@ -11462,7 +11403,7 @@ Move_AURORA_VEIL:: blendoff end -General_ShellTrapSetUp: +gBattleAnimGeneral_ShellTrapSetUp:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -11479,7 +11420,7 @@ General_ShellTrapSetUp: clearmonbg ANIM_TARGET blendoff end -Move_SHELL_TRAP:: +gBattleAnimMove_ShellTrap:: ShellTrapUnleash: loadspritegfx ANIM_TAG_IMPACT @pound loadspritegfx ANIM_TAG_SMALL_RED_EYE @red @@ -11655,7 +11596,7 @@ ShellTrapFireLaunch2: delay 0x3 return -Move_FLEUR_CANNON:: +gBattleAnimMove_FleurCannon:: loadspritegfx ANIM_TAG_ORBS @beam particles loadspritegfx ANIM_TAG_ELECTRICITY @discharge loadspritegfx ANIM_TAG_PINK_PETAL @pink color @@ -11710,7 +11651,7 @@ FleurCannonBeam: delay 0x1 return -Move_PSYCHIC_FANGS:: +gBattleAnimMove_PsychicFangs:: loadspritegfx ANIM_TAG_SHARP_TEETH @Teeth loadspritegfx ANIM_TAG_IMPACT @Hit loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL @Screen @@ -11763,7 +11704,7 @@ PsychicFangsDestroyWall: delay 0x10 goto PsychicFangsEnd -Move_STOMPING_TANTRUM:: +gBattleAnimMove_StompingTantrum:: loadspritegfx ANIM_TAG_ROCKS @rock colour loadspritegfx ANIM_TAG_SMALL_ROCK @small rock loadspritegfx ANIM_TAG_IMPACT @pound hit @@ -11800,7 +11741,7 @@ StompingTantrumImpact: createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x1 return -Move_SHADOW_BONE:: +gBattleAnimMove_ShadowBone:: loadspritegfx ANIM_TAG_BONE loadspritegfx ANIM_TAG_IMPACT fadetobg BG_NIGHTMARE @@ -11826,7 +11767,7 @@ Move_SHADOW_BONE:: blendoff end -Move_ACCELEROCK:: +gBattleAnimMove_Accelerock:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_IMPACT monbg ANIM_ATK_PARTNER @@ -11849,7 +11790,7 @@ Move_ACCELEROCK:: waitforvisualfinish end -Move_LIQUIDATION:: +gBattleAnimMove_Liquidation:: loadspritegfx ANIM_TAG_WATER_IMPACT loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -11868,7 +11809,7 @@ Move_LIQUIDATION:: blendoff end -Move_PRISMATIC_LASER:: +gBattleAnimMove_PrismaticLaser:: loadspritegfx ANIM_TAG_ICE_CHUNK @blue green color loadspritegfx ANIM_TAG_SPARK_H @yellow color loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @red color @@ -11990,7 +11931,7 @@ PrismaticLaserRain: createsprite gPrismaticLaserGreenRainTemplate, ANIM_TARGET, 2, -23, 0x28, 4, ANIM_TARGET return -Move_SPECTRAL_THIEF:: +gBattleAnimMove_SpectralThief:: choosetwoturnanim SpectralThiefSteal SpectralThiefUnleash SpectralThiefUnleash: loadspritegfx ANIM_TAG_HANDS_AND_FEET @Black Colour @@ -12111,7 +12052,7 @@ SpectralThiefBuffUp: createsprite gSpectralThiefBlackBuffTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return -Move_SUNSTEEL_STRIKE:: +gBattleAnimMove_SunsteelStrike:: loadspritegfx ANIM_TAG_ROUND_SHADOW @fly loadspritegfx ANIM_TAG_AIR_WAVE_2 @black color loadspritegfx ANIM_TAG_ROCKS @rock colour @@ -12175,7 +12116,7 @@ SunsteelStrikeBeam: delay 0x1 return -Move_MOONGEIST_BEAM:: +gBattleAnimMove_MoongeistBeam:: loadspritegfx ANIM_TAG_MOON loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @@ -12256,7 +12197,7 @@ MoongeistBeamOrbs: delay 0x1 return -Move_TEARFUL_LOOK:: +gBattleAnimMove_TearfulLook:: loadspritegfx ANIM_TAG_SMALL_BUBBLES @tears loadspritegfx ANIM_TAG_OPENING_EYE @eye monbg ANIM_DEF_PARTNER @@ -12282,7 +12223,7 @@ Move_TEARFUL_LOOK:: clearmonbg ANIM_DEF_PARTNER end -Move_ZING_ZAP:: +gBattleAnimMove_ZingZap:: loadspritegfx ANIM_TAG_SPARK_2 @sparks loadspritegfx ANIM_TAG_YELLOW_BALL @ball loadspritegfx ANIM_TAG_THIN_RING @ring @@ -12334,7 +12275,7 @@ ZingZapSparks2: createsprite gSparkElectricitySpriteTemplate, ANIM_ATTACKER, 0, 0xee, 0x18, 0xa5, 0xa, 0x0, 0x1, 0x1 return -Move_NATURES_MADNESS:: +gBattleAnimMove_NaturesMadness:: loadspritegfx ANIM_TAG_ICE_CRYSTALS @small circles loadspritegfx ANIM_TAG_THIN_RING @ring loadspritegfx ANIM_TAG_SPARKLE_2 @stars @@ -12415,7 +12356,7 @@ Move_NATURES_MADNESS:: blendoff end -Move_MULTI_ATTACK:: +gBattleAnimMove_MultiAttack:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_CUT @cut monbg ANIM_TARGET @@ -12452,7 +12393,7 @@ MultiAttackBuff: createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0x0, 0x1 return -Move_MIND_BLOWN:: +gBattleAnimMove_MindBlown:: loadspritegfx ANIM_TAG_PINK_HEART @pink color loadspritegfx ANIM_TAG_SMALL_BUBBLES @blue color loadspritegfx ANIM_TAG_BLACEPHALON_HEAD @head @@ -12509,7 +12450,7 @@ MindBlownPinkOrbs: createsprite gMindBlownPinkOrbsTemplate, ANIM_TARGET, 2, 0x1, 0x1, 0xFFDA, 0xFF94, 0x8 @between up and upper left return -Move_PLASMA_FISTS:: +gBattleAnimMove_PlasmaFists:: loadspritegfx ANIM_TAG_SHOCK_3 @charge loadspritegfx ANIM_TAG_SPARK_2 @ElectricityEffect loadspritegfx ANIM_TAG_SPARK @shock wave @@ -12594,7 +12535,7 @@ PlasmaFistsImpact: createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x1, 0x2 return -Move_PHOTON_GEYSER:: +gBattleAnimMove_PhotonGeyser:: loadspritegfx ANIM_TAG_SHOCK_3 @charge loadspritegfx ANIM_TAG_SPARK_2 @ElectricityEffect loadspritegfx ANIM_TAG_SMALL_RED_EYE @red color @@ -12704,46 +12645,388 @@ PhotonGeyserBeam: createsprite gPhotonGeyserBeam, ANIM_TARGET, 3, 0, -77, ANIM_TARGET, 180, 2, 0 return -Move_ZIPPY_ZAP:: - end @to do: +gBattleAnimMove_ZippyZap:: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_SPARK_2 + monbg ANIM_ATK_PARTNER + setalpha 12, 8 + playsewithpan SE_M_CHARGE, SOUND_PAN_ATTACKER + createsprite gGrowingShockWaveOrbSpriteTemplate, ANIM_ATTACKER, 2 @electric circle + waitforvisualfinish + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 24, 6, 1, 5 + createvisualtask AnimTask_TraceMonBlended, 2, 0, 4, 7, 3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + delay 4 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 0, 0, ANIM_TARGET, 1 + call ElectricityEffect + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + blendoff + waitforvisualfinish + end -Move_SPLISHY_SPLASH:: - end @to do: +gBattleAnimMove_SplishySplash:: + loadspritegfx ANIM_TAG_SPARK_2 + createvisualtask AnimTask_CreateSurfWave, 2, ANIM_SURF_PAL_SURF + delay 24 + panse SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 10, 1 + call ElectricityEffect + end -Move_FLOATY_FALL:: - end @to do: +gBattleAnimMove_FloatyFall:: + loadspritegfx ANIM_TAG_ROUND_SHADOW + loadspritegfx ANIM_TAG_IMPACT + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROUND_SHADOW, 0, 12, 12, RGB_YELLOW + monbg ANIM_DEF_PARTNER + setalpha 12, 8 + playsewithpan SE_M_FLY, SOUND_PAN_ATTACKER + createsprite gFlyBallUpSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 13, 336 + waitforvisualfinish + playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER + createsprite gFlyBallAttackSpriteTemplate, ANIM_ATTACKER, 2, 20, FALSE + delay 20 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + waitforvisualfinish + end -Move_PIKA_PAPOW:: - end @to do: +gBattleAnimMove_PikaPapow:: + createvisualtask AnimTask_GetReturnPowerLevel, 2 + delay 2 + jumpreteq 0, gBattleAnimMove_ThunderShock + jumpreteq 1, gBattleAnimMove_ShockWave + jumpreteq 2, gBattleAnimMove_Thunderbolt + jumpreteq 3, gBattleAnimMove_Thunder -Move_BOUNCY_BUBBLE:: - end @to do: +gBattleAnimMove_BouncyBubble:: + loadspritegfx ANIM_TAG_BUBBLE + loadspritegfx ANIM_TAG_SMALL_BUBBLES + loadspritegfx ANIM_TAG_ORBS + loadspritegfx ANIM_TAG_BLUE_STAR + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_TARGET + splitbgprio ANIM_TARGET + setalpha 12, 8 + delay 1 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 0, 12, RGB(13, 12, 31) + waitforvisualfinish + playsewithpan SE_M_ABSORB, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 0 + delay 2 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 5, 5, 1 + waitforvisualfinish + call WaterBubblesEffectLong + call GigaDrainAbsorbEffect + waitforvisualfinish + delay 15 + call HealingEffect + waitforvisualfinish + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 1, 12, 0, RGB(13, 12, 31) + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + end -Move_BUZZY_BUZZ:: - end @to do: +gBattleAnimMove_BuzzyBuzz:: + loadspritegfx ANIM_TAG_ELECTRIC_ORBS + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + loadspritegfx ANIM_TAG_SPARK + loadspritegfx ANIM_TAG_LIGHTNING + loadspritegfx ANIM_TAG_SHOCK_3 + loadspritegfx ANIM_TAG_SPARK_2 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 6, RGB_BLACK + waitforvisualfinish + createsprite gSpriteTemplate_SpiritBreakChargeBall, ANIM_TARGET, 1, ANIM_TARGET + delay 10 + createvisualtask AnimTask_ElectricBolt, 5, 24, -52, 0 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET + delay 7 + createvisualtask AnimTask_ElectricBolt, 5, -24, -52, 0 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET + delay 7 + createvisualtask AnimTask_ElectricBolt, 5, 0, -60, 1 + playsewithpan SE_M_THUNDERBOLT, SOUND_PAN_TARGET + delay 9 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 0, 13, RGB_BLACK + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0, 13, 0, RGB_BLACK + waitforvisualfinish + delay 20 + waitplaysewithpan SE_M_THUNDERBOLT2, SOUND_PAN_TARGET, 19 + call ElectricityEffect + waitforvisualfinish + delay 20 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 6, 0, RGB_BLACK + waitforvisualfinish + end -Move_SIZZLY_SLIDE:: - end @to do: +gBattleAnimMove_SizzlySlide:: + loadspritegfx ANIM_TAG_SMALL_EMBER + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_ATK_PARTNER + setalpha 12, 8 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24 + playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER + waitforvisualfinish + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 24, 6, 1, 5 + createvisualtask AnimTask_TraceMonBlended, 2, 0, 4, 7, 3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + delay 4 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 5, 0, 6, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, 0, 0, ANIM_TARGET, 1 + createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_TARGET, RGB_RED, 12, 1, 1 + playsewithpan SE_M_FLAME_WHEEL2, SOUND_PAN_TARGET + call FireSpreadEffect + delay 7 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 9 + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + end -Move_GLITZY_GLOW:: - end @to do: +gBattleAnimMove_GlitzyGlow:: + loadspritegfx ANIM_TAG_THIN_RING @hypervoice ring + loadspritegfx ANIM_TAG_SPARK_2 @yellow color + loadspritegfx ANIM_TAG_WATER_ORB @blue color + loadspritegfx ANIM_TAG_POISON_BUBBLE @violet color + loadspritegfx ANIM_TAG_SMALL_EMBER @flame wheel particle + loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_CIRCLE_OF_LIGHT, 0, 12, 12, 0x289F + monbg ANIM_DEF_PARTNER + splitbgprio_foes ANIM_TARGET + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 0, 12, 0 @Darken + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + createsprite gGrowingShockWaveOrbSpriteTemplate, ANIM_ATTACKER, 0, 0 + delay 18 + panse SE_M_SCREECH, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 2, 0 + createsprite gSynchronoiseVioletRingTemplate, ANIM_ATTACKER, 0, 25, 0, 0, 0, 0, 0, 1 + delay 1 + createsprite gSynchronoiseBlueRingTemplate, ANIM_ATTACKER, 0, 25, 0, 0, 0, 0, 0, 1 + delay 1 + createsprite gSynchronoiseYellowRingTemplate, ANIM_ATTACKER, 0, 25, 0, 0, 0, 0, 0, 1 + delay 36 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1 + createvisualtask AnimTask_ShakeBattleTerrain, 2, 1, 0, 6, 1 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 1, 12, 0, 0 @Darken + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + delay 1 + unloadspritegfx ANIM_TAG_THIN_RING @hypervoice ring + unloadspritegfx ANIM_TAG_SPARK_2 @yellow color + unloadspritegfx ANIM_TAG_WATER_ORB @blue color + unloadspritegfx ANIM_TAG_POISON_BUBBLE @violet color + unloadspritegfx ANIM_TAG_SMALL_EMBER @flame wheel particle + unloadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT + waitforvisualfinish + goto gBattleAnimMove_LightScreen -Move_BADDY_BAD:: - end @to do: +gBattleAnimMove_BaddyBad:: + loadspritegfx ANIM_TAG_STRAIGHT_BEAM + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_STRAIGHT_BEAM, 0, 14, 14, RGB_BLACK + monbg ANIM_ATTACKER + splitbgprio ANIM_ATTACKER + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + fadetobg BG_DARK + waitbgfadein + delay 10 + playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER + createvisualtask AnimTask_NightShadeClone, 5, 133 + delay 10 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 6, 0, 16, RGB_BLACK + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 4, 0, 96, 1 + panse SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 2, 0 + call PhotonGeyserBeam + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 1, 16, 0, RGB_BLACK + waitforvisualfinish + delay 1 + restorebg + waitbgfadein + waitforvisualfinish + clearmonbg ANIM_ATTACKER + unloadspritegfx ANIM_TAG_STRAIGHT_BEAM + waitforvisualfinish + goto gBattleAnimMove_Reflect -Move_SAPPY_SEED:: - end @to do: +gBattleAnimMove_SappySeed:: + loadspritegfx ANIM_TAG_SPROUT + loadspritegfx ANIM_TAG_SEED + playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 4, 0, 40, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 20, ANIM_TARGET, 1 + delay 2 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 20, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 10, ANIM_TARGET, 1 + delay 2 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 20, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 10, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 + delay 2 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 20, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 10, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -10, ANIM_TARGET, 1 + delay 2 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 20, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 10, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -10, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -20, ANIM_TARGET, 1 + delay 2 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 20, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 10, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -10, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -20, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -30, ANIM_TARGET, 1 + delay 2 + call FullBeanstalk + call FallingSeeds + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + call FullBeanstalk + waitforvisualfinish + end +FullBeanstalk: + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 20, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 10, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -10, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -20, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -30, ANIM_TARGET, 1 + createsprite gSproutGrowSpriteTemplate, ANIM_ATTACKER, 3, 0, -40, ANIM_TARGET, 1 + delay 2 + return +FallingSeeds: + createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, -20, 0, -10, 0 + playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET + createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, 28, 0, 10, 0 + playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET + createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, -10, 0, -5, 0 + playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET + createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, 10, 0, 6, 0 + playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET + createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, 24, 0, 10, 0 + playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET + createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, -32, 0, -10, 0 + playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET + createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, -20, 0, -10, 0 + playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET + createsprite gFallingSeedSpriteTemplate, ANIM_TARGET, 2, 30, 0, 10, 0 + playsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET + return -Move_FREEZY_FROST:: - end @to do: +gBattleAnimMove_FreezyFrost:: + loadspritegfx ANIM_TAG_ICICLE_SPEAR + loadspritegfx ANIM_TAG_ICE_SPIKES + loadspritegfx ANIM_TAG_IMPACT + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_ICICLE_SPEAR, 0, 0, 12, RGB_BLACK + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_ICE_SPIKES, 0, 0, 12, RGB_BLACK + waitforvisualfinish + call FreezyFrostHitEffect + call FreezyFrostHitEffect + call FreezyFrostHitEffect + call FreezyFrostHitEffect + waitforvisualfinish + call IceSpikesEffectLong + waitforvisualfinish + end +FreezyFrostHitEffect: + createsprite gFreezyFrostRisingSpearSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, -4, 16 + playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET + delay 1 + createsprite gFreezyFrostRisingSpearSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 4109, 16 + playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET + delay 1 + createsprite gFreezyFrostRisingSpearSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, 4, 16 + playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET + delay 1 + createsprite gFreezyFrostRisingSpearSpriteTemplate ANIM_TARGET, 2, ANIM_TARGET, -16, 16 + playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET + delay 1 + return -Move_SPARKLY_SWIRL:: - end @to do: +gBattleAnimMove_SparklySwirl:: + loadspritegfx ANIM_TAG_GUST + loadspritegfx ANIM_TAG_PINK_PETAL + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_GUST, 0, 15, 15, RGB(31, 21, 21) + monbg ANIM_DEF_PARTNER + splitbgprio ANIM_TARGET + playsewithpan SE_M_GUST, SOUND_PAN_TARGET + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 47, 1 + call HurricaneGust + call PinkPetalVortex + call HurricaneGust + call PinkPetalVortex + call HurricaneGust + call PinkPetalVortex + waitforvisualfinish + stopsound + clearmonbg ANIM_TARGET + end +PinkPetalVortex: + createsprite gPinkPetalVortexTemplate, ANIM_TARGET, 2, 0, 28, 528, 30, 13, 50, 1 + delay 2 + createsprite gPinkPetalVortexTemplate, ANIM_TARGET, 2, 0, 32, 480, 20, 16, -46, 1 + delay 2 + createsprite gPinkPetalVortexTemplate, ANIM_TARGET, 2, 0, 33, 576, 20, 8, 42, 1 + delay 2 + createsprite gPinkPetalVortexTemplate, ANIM_TARGET, 2, 0, 31, 400, 25, 11, -42, 1 + delay 2 + createsprite gPinkPetalVortexTemplate, ANIM_TARGET, 2, 0, 28, 512, 25, 16, 46, 1 + delay 2 + createsprite gPinkPetalVortexTemplate, ANIM_TARGET, 2, 0, 33, 464, 30, 15, -50, 1 + delay 2 + return -Move_VEEVEE_VOLLEY:: - end @to do: +gBattleAnimMove_VeeveeVolley:: + createvisualtask AnimTask_GetReturnPowerLevel, 2 + delay 2 + jumpreteq 0, gBattleAnimMove_Tackle + jumpreteq 1, gBattleAnimMove_Headbutt + jumpreteq 2, gBattleAnimMove_TakeDown + jumpreteq 3, gBattleAnimMove_DoubleEdge -Move_DOUBLE_IRON_BASH:: +gBattleAnimMove_DoubleIronBash:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 0x1c, 0x2 @@ -12774,10 +13057,10 @@ Move_DOUBLE_IRON_BASH:: end @@@@@@@@@@@@@@@@@@@@@@@ GEN 8 @@@@@@@@@@@@@@@@@@@@@@@ -Move_DYNAMAX_CANNON:: - goto Move_HYPER_BEAM +gBattleAnimMove_DynamaxCannon:: + goto gBattleAnimMove_HyperBeam -Move_SNIPE_SHOT:: +gBattleAnimMove_SnipeShot:: loadspritegfx ANIM_TAG_IMPACT_2 loadspritegfx ANIM_TAG_LEER createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 16, 0 @;Black @@ -12795,7 +13078,7 @@ Move_SNIPE_SHOT:: waitforvisualfinish end -Move_JAW_LOCK:: +gBattleAnimMove_JawLock:: loadspritegfx ANIM_TAG_SHARP_TEETH loadspritegfx ANIM_TAG_IMPACT createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SHARP_TEETH, 0, 10, 10, 0x0B1D @Light orange @@ -12815,7 +13098,7 @@ Move_JAW_LOCK:: delay 0x1 end -Move_STUFF_CHEEKS:: +gBattleAnimMove_StuffCheeks:: loadspritegfx ANIM_TAG_BERRY_NORMAL loadspritegfx ANIM_TAG_SHARP_TEETH loadspritegfx ANIM_TAG_THIN_RING @@ -12853,7 +13136,7 @@ BiteOpponent: createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0xffDF, 0x10, 0x4, 0x0, 0xfccd, 0xa return -Move_NO_RETREAT:: +gBattleAnimMove_NoRetreat:: loadspritegfx ANIM_TAG_SMALL_EMBER loopsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER 0x7 0x12 createsprite gNoRetreatFlameTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 20, 10, 0xA0, 0 @@ -12862,7 +13145,7 @@ Move_NO_RETREAT:: waitforvisualfinish end -Move_TAR_SHOT:: +gBattleAnimMove_TarShot:: loadspritegfx ANIM_TAG_POISON_BUBBLE createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_POISON_BUBBLE, 0, 15, 15, 0 @Black monbg ANIM_TARGET @@ -12886,7 +13169,7 @@ Move_TAR_SHOT:: clearmonbg ANIM_TARGET end -Move_MAGIC_POWDER:: +gBattleAnimMove_MagicPowder:: loadspritegfx ANIM_TAG_POISON_POWDER loadspritegfx ANIM_TAG_WATER_GUN loopsewithpan SE_M_MORNING_SUN, SOUND_PAN_ATTACKER 0xE 0x8 @@ -12914,7 +13197,7 @@ Move_MAGIC_POWDER:: waitforvisualfinish end -Move_DRAGON_DARTS:: +gBattleAnimMove_DragonDarts:: loadspritegfx ANIM_TAG_DREEPY_SHINY loadspritegfx ANIM_TAG_DREEPY loadspritegfx ANIM_TAG_AIR_WAVE @@ -12928,7 +13211,7 @@ Move_DRAGON_DARTS:: waitforvisualfinish end -Move_TEATIME:: +gBattleAnimMove_Teatime:: loadspritegfx ANIM_TAG_TEAPOT loadspritegfx ANIM_TAG_THOUGHT_BUBBLE createsprite gThoughtBubbleSpriteTemplate, ANIM_ATTACKER, 11, 0, 100 @@ -12942,7 +13225,7 @@ Move_TEATIME:: waitforvisualfinish end -Move_OCTOLOCK:: +gBattleAnimMove_Octolock:: loadspritegfx ANIM_TAG_TENDRILS createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_TENDRILS, 0, 12, 12, 0x3D98 @Pinkish Red loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET 0x6 0x4 @@ -12961,7 +13244,7 @@ Move_OCTOLOCK:: waitforvisualfinish end -Move_BOLT_BEAK:: +gBattleAnimMove_BoltBeak:: loadspritegfx ANIM_TAG_HORN_HIT loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 @@ -13014,7 +13297,7 @@ BoltBeakSparks: delay 0x4 return -Move_FISHIOUS_REND:: +gBattleAnimMove_FishiousRend:: loadspritegfx ANIM_TAG_SHARP_TEETH @Teeth loadspritegfx ANIM_TAG_SMALL_BUBBLES createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SHARP_TEETH, 0, 10, 10, 0x726A @Blue Teeth @@ -13068,10 +13351,10 @@ FishousRendBubbles: createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0xA, 0x0 return -Move_COURT_CHANGE:: - goto Move_TRICK_ROOM +gBattleAnimMove_CourtChange:: + goto gBattleAnimMove_TrickRoom -Move_CLANGOROUS_SOUL:: +gBattleAnimMove_ClangorousSoul:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_WATER_ORB @blue loadspritegfx ANIM_TAG_POISON_BUBBLE @purple @@ -13088,6 +13371,9 @@ Move_CLANGOROUS_SOUL:: createsprite gClangorousSoulRedFistTemplate, ANIM_ATTACKER, 2, 0x10, 0, 0, 0, 10, ANIM_ATTACKER, ANIM_LEFT_FIST, 1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish + unloadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST + unloadspritegfx ANIM_TAG_SPARKLE_2 @stars + waitforvisualfinish loadspritegfx ANIM_TAG_THIN_RING @ring playsewithpan SE_SHINY, SOUND_PAN_ATTACKER createsprite gClangorousSoulRedRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 @@ -13107,7 +13393,7 @@ ClangorousSoulStarBuffEffect: createsprite gGrantingStarsSpriteTemplate, ANIM_ATTACKER, 2, 0xc, 0xfffb, 0x0, 0x0, 0x20, 0x3c return -Move_BODY_PRESS:: +gBattleAnimMove_BodyPress:: loadspritegfx ANIM_TAG_ROUND_SHADOW @fly and bounce animation loadspritegfx ANIM_TAG_GRAY_SMOKE @smoke createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_ROUND_SHADOW, 0, 0xD, 0xD, 0x1E5D @Orange @@ -13124,10 +13410,10 @@ Move_BODY_PRESS:: waitforvisualfinish end -Move_DECORATE:: - goto Move_FLOWER_SHIELD +gBattleAnimMove_Decorate:: + goto gBattleAnimMove_FlowerShield -Move_DRUM_BEATING:: +gBattleAnimMove_DrumBeating:: loadspritegfx ANIM_TAG_MUSIC_NOTES loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE loadspritegfx ANIM_TAG_ROOTS @@ -13188,10 +13474,33 @@ Move_DRUM_BEATING:: blendoff end -Move_SNAP_TRAP:: @ placeholder - goto Move_BITE +gBattleAnimMove_SnapTrap:: + loadspritegfx ANIM_TAG_LEAF @leaves + loadspritegfx ANIM_TAG_FLOWER @flowers + loadspritegfx ANIM_TAG_SHARP_TEETH + loadspritegfx ANIM_TAG_IMPACT + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SHARP_TEETH, 0, 10, 10, 0x0688 + monbg ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_BITE, SOUND_PAN_TARGET + createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, -32, 0, 0, 819, 10 + createsprite gSharpTeethSpriteTemplate, ANIM_ATTACKER, 2, 0, 32, 4, 0, -819, 10 + createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 4, 0, 6, 1 + playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET + delay 10 + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, 192, 176, 40 + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, -192, 240, 40 + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, 192, -160, 40 + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, -192, -112, 40 + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, 160, 48, 40 + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, -224, -32, 40 + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, 112, -128, 40 + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end -Move_PYRO_BALL:: +gBattleAnimMove_PyroBall:: loadspritegfx ANIM_TAG_FLAT_ROCK loadspritegfx ANIM_TAG_SMALL_EMBER playsewithpan SE_LEDGE, SOUND_PAN_ATTACKER @;Hop @@ -13219,13 +13528,13 @@ Move_PYRO_BALL:: waitforvisualfinish end -Move_BEHEMOTH_BLADE:: - goto Move_SACRED_SWORD +gBattleAnimMove_BehemothBlade:: + goto gBattleAnimMove_SacredSword -Move_BEHEMOTH_BASH:: - goto Move_SUNSTEEL_STRIKE +gBattleAnimMove_BehemothBash:: + goto gBattleAnimMove_SunsteelStrike -Move_AURA_WHEEL:: +gBattleAnimMove_AuraWheel:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SPARK_2 @@ -13273,7 +13582,7 @@ Move_AURA_WHEEL:: blendoff end -Move_BREAKING_SWIPE:: +gBattleAnimMove_BreakingSwipe:: loadspritegfx ANIM_TAG_IMPACT @hits loadspritegfx ANIM_TAG_SPARK_2 createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 12, 12, 0x001F @Red @@ -13303,7 +13612,7 @@ Move_BREAKING_SWIPE:: clearmonbg ANIM_TARGET end -Move_BRANCH_POKE:: +gBattleAnimMove_BranchPoke:: loadspritegfx ANIM_TAG_BRANCH loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER @@ -13315,7 +13624,7 @@ Move_BRANCH_POKE:: waitforvisualfinish end -Move_OVERDRIVE:: +gBattleAnimMove_Overdrive:: loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_SPARK_2 loadspritegfx ANIM_TAG_ELECTRICITY @@ -13341,7 +13650,7 @@ OverdriveRings: createvisualtask SoundTask_WaitForCry, 0x5 return -Move_APPLE_ACID:: +gBattleAnimMove_AppleAcid:: loadspritegfx ANIM_TAG_APPLE loadspritegfx ANIM_TAG_POISON_BUBBLE createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_POISON_BUBBLE, 0, 12, 12, 0x061D @Orange @@ -13377,7 +13686,7 @@ Move_APPLE_ACID:: clearmonbg ANIM_TARGET end -Move_GRAV_APPLE:: +gBattleAnimMove_GravApple:: loadspritegfx ANIM_TAG_APPLE fadetobg BG_IN_AIR waitbgfadeout @@ -13428,7 +13737,7 @@ SmallAppleShower: return @ credits to Skeli -Move_SPIRIT_BREAK:: +gBattleAnimMove_SpiritBreak:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_TEAL_ALERT loadspritegfx ANIM_TAG_EXPLOSION_2 @@ -13454,7 +13763,7 @@ Move_SPIRIT_BREAK:: waitforvisualfinish end -Move_STRANGE_STEAM:: +gBattleAnimMove_StrangeSteam:: loadspritegfx ANIM_TAG_PINK_CLOUD loadspritegfx ANIM_TAG_FINGER loadspritegfx ANIM_TAG_WATER_GUN @blue colour @@ -13487,7 +13796,7 @@ StrangeSteamCloud: delay 0x2 return -Move_LIFE_DEW:: +gBattleAnimMove_LifeDew:: loadspritegfx ANIM_TAG_WATER_DROPLET loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_ATK_PARTNER @@ -13513,7 +13822,7 @@ Move_LIFE_DEW:: clearmonbg ANIM_ATK_PARTNER end -Move_OBSTRUCT:: +gBattleAnimMove_Obstruct:: loadspritegfx ANIM_TAG_NOISE_LINE @growl loadspritegfx ANIM_TAG_PROTECT loadspritegfx ANIM_TAG_OBSTRUCT_CROSS @@ -13535,7 +13844,7 @@ Move_OBSTRUCT:: end @Credits to Skeli -Move_FALSE_SURRENDER:: +gBattleAnimMove_FalseSurrender:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_CROSS_IMPACT monbg ANIM_ATTACKER @@ -13573,7 +13882,7 @@ Move_FALSE_SURRENDER:: waitbgfadein end -Move_METEOR_ASSAULT:: +gBattleAnimMove_MeteorAssault:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_METEOR loadspritegfx ANIM_TAG_EXPLOSION @@ -13612,10 +13921,10 @@ BasicExplosion: createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, 0x1, 0x1 return -Move_ETERNABEAM:: - goto Move_HYPER_BEAM +gBattleAnimMove_Eternabeam:: + goto gBattleAnimMove_HyperBeam -Move_STEEL_BEAM:: +gBattleAnimMove_SteelBeam:: loadspritegfx ANIM_TAG_CLAW_SLASH loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK @@ -13676,7 +13985,7 @@ SetSteelBeamBgPlayer: fadetobg BG_STEEL_BEAM_PLAYER @Credits to Skeli -Move_EXPANDING_FORCE:: +gBattleAnimMove_ExpandingForce:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_EXPLOSION_2 createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0xA, 0xA, 0x7DDE @@ -13787,7 +14096,7 @@ MaxKnuckleExplosionGeyser: @Credits to Skeli -Move_STEEL_ROLLER:: +gBattleAnimMove_SteelRoller:: loadspritegfx ANIM_TAG_STEAMROLLER loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -13810,7 +14119,7 @@ SteelRollerRocks: return @Credits to Skeli -Move_SCALE_SHOT:: +gBattleAnimMove_ScaleShot:: loadspritegfx ANIM_TAG_SHELL_RIGHT loadspritegfx ANIM_TAG_IMPACT createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 0x4, 0x6 @@ -13827,7 +14136,7 @@ Move_SCALE_SHOT:: end @Credits to Skeli -Move_METEOR_BEAM:: +gBattleAnimMove_MeteorBeam:: loadspritegfx ANIM_TAG_ROCKS fadetobg BG_COSMIC waitbgfadeout @@ -13886,11 +14195,11 @@ MeteorBeamRockLaunch: delay 0x2 return -Move_SHELL_SIDE_ARM:: +gBattleAnimMove_ShellSideArm:: createvisualtask AnimTask_ShellSideArm, 0x5 - jumpargeq 0x0, TRUE, Move_SHELL_SIDE_ARM_PHYSICAL - jumpargeq 0x0, FALSE, Move_SHELL_SIDE_ARM_SPECIAL -Move_SHELL_SIDE_ARM_PHYSICAL:: @ Modified Body Slam, placeholder + jumpargeq 0x0, TRUE, gBattleAnimMove_ShellSideArmPhysical + jumpargeq 0x0, FALSE, gBattleAnimMove_ShellSideArmSpecial +gBattleAnimMove_ShellSideArmPhysical:: @ Modified Body Slam, placeholder loadspritegfx ANIM_TAG_IMPACT createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 6, 6, RGB_MAGENTA monbg ANIM_DEF_PARTNER @@ -13916,7 +14225,7 @@ Move_SHELL_SIDE_ARM_PHYSICAL:: @ Modified Body Slam, placeholder clearmonbg ANIM_DEF_PARTNER blendoff end -Move_SHELL_SIDE_ARM_SPECIAL:: @ Modified Snipe Shot, placeholder +gBattleAnimMove_ShellSideArmSpecial:: @ Modified Snipe Shot, placeholder loadspritegfx ANIM_TAG_IMPACT_2 loadspritegfx ANIM_TAG_LEER createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT_2, 0, 6, 6, RGB_MAGENTA @@ -13933,7 +14242,7 @@ Move_SHELL_SIDE_ARM_SPECIAL:: @ Modified Snipe Shot, placeholder end @Credits to Skeli -Move_MISTY_EXPLOSION:: +gBattleAnimMove_MistyExplosion:: loadspritegfx ANIM_TAG_EXPLOSION createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, 0x1, 0x8, 0x9, 0x7A5B, 0x8, 0x0, 0x8 createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_LEFT, 8, 0, 40, 1 @@ -13950,7 +14259,7 @@ Move_MISTY_EXPLOSION:: end @Credits to Skeli -Move_GRASSY_GLIDE:: +gBattleAnimMove_GrassyGlide:: loadspritegfx ANIM_TAG_LEAF @leaves loadspritegfx ANIM_TAG_IMPACT @hits loadspritegfx ANIM_TAG_WHIP_HIT @@ -13966,7 +14275,7 @@ Move_GRASSY_GLIDE:: end @Credits to Skeli -Move_RISING_VOLTAGE:: +gBattleAnimMove_RisingVoltage:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_SPARK_2 @@ -14038,7 +14347,7 @@ ANIM_RISING_VOLTAGE_STRONGER: end -Move_TERRAIN_PULSE:: +gBattleAnimMove_TerrainPulse:: loadspritegfx ANIM_TAG_DRAGON_PULSE monbg ANIM_TARGET setalpha 12, 8 @@ -14121,7 +14430,7 @@ TerrainPulseEnd: clearmonbg ANIM_TARGET end -Move_SKITTER_SMACK:: +gBattleAnimMove_SkitterSmack:: loadspritegfx ANIM_TAG_IMPACT @Hits loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour @@ -14170,7 +14479,7 @@ Move_SKITTER_SMACK:: end @Credits to Skeli -Move_BURNING_JEALOUSY:: +gBattleAnimMove_BurningJealousy:: loadspritegfx ANIM_TAG_SMALL_EMBER playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 42, 1 @@ -14223,7 +14532,7 @@ BurningJealousyFlames: @Credits to Skeli -Move_LASH_OUT:: +gBattleAnimMove_LashOut:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_HANDS_AND_FEET @black color loadspritegfx ANIM_TAG_SLAM_HIT_2 @@ -14264,7 +14573,7 @@ Move_LASH_OUT:: end -Move_POLTERGEIST:: +gBattleAnimMove_Poltergeist:: loadspritegfx ANIM_TAG_EYE_SPARKLE loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour @@ -14303,7 +14612,7 @@ Move_POLTERGEIST:: end @Credits to Skeli -Move_CORROSIVE_GAS:: +gBattleAnimMove_CorrosiveGas:: loadspritegfx ANIM_TAG_PINK_CLOUD @Fumes createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_PINK_CLOUD, 0x0, 0xE, 0xE, 0x19EF @;Garbage green monbg ANIM_ATTACKER @@ -14329,7 +14638,7 @@ Move_CORROSIVE_GAS:: end @Credits to Skeli -Move_COACHING:: +gBattleAnimMove_Coaching:: playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 1 waitforvisualfinish @@ -14340,7 +14649,7 @@ Move_COACHING:: end @Credits to Skeli -Move_FLIP_TURN:: +gBattleAnimMove_FlipTurn:: loadspritegfx ANIM_TAG_ICE_CRYSTALS @;Bubbles loadspritegfx ANIM_TAG_HYDRO_PUMP loadspritegfx ANIM_TAG_WATER_IMPACT @@ -14364,7 +14673,7 @@ Move_FLIP_TURN:: @Credits to Skeli -Move_TRIPLE_AXEL:: +gBattleAnimMove_TripleAxel:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -14409,7 +14718,7 @@ TripleAxelEnd: end @Credits to Skeli -Move_DUAL_WINGBEAT:: +gBattleAnimMove_DualWingbeat:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_WHITE_FEATHER setalpha 12, 8 @@ -14466,7 +14775,7 @@ DualWingbeatFeatherScatterRight: return @ credits to Skeli -Move_SCORCHING_SANDS:: +gBattleAnimMove_ScorchingSands:: loadspritegfx ANIM_TAG_MUD_SAND loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_ATK_PARTNER @@ -14491,7 +14800,7 @@ Move_SCORCHING_SANDS:: end @ credits to skeli -Move_JUNGLE_HEALING:: +gBattleAnimMove_JungleHealing:: loadspritegfx ANIM_TAG_ROOTS loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_SPARKLE_2 @@ -14529,7 +14838,7 @@ Move_JUNGLE_HEALING:: end @ credits to ghoulslash -Move_SILK_TRAP:: +gBattleAnimMove_SilkTrap:: loadspritegfx ANIM_TAG_PROTECT loadspritegfx ANIM_TAG_SPIDER_WEB splitbgprio ANIM_ATTACKER @@ -14545,7 +14854,7 @@ Move_SILK_TRAP:: end @ Also used by Snow weather. Credits to Dat.H A -Move_SNOWSCAPE:: +gBattleAnimMove_Snowscape:: loadspritegfx ANIM_TAG_SNOWFLAKES playsewithpan SE_M_GUST, SOUND_PAN_ATTACKER createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 0, 4, RGB(11, 18, 22) @@ -14562,7 +14871,7 @@ Move_SNOWSCAPE:: end @Credits to Skeli -Move_WICKED_BLOW:: +gBattleAnimMove_WickedBlow:: loadspritegfx ANIM_TAG_FOCUS_ENERGY loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT @@ -14625,7 +14934,7 @@ WickedBlowBuffEffect: @Credits to Skeli -Move_SURGING_STRIKES:: +gBattleAnimMove_SurgingStrikes:: loadspritegfx ANIM_TAG_IMPACT_2 loadspritegfx ANIM_TAG_WATER_IMPACT jumpifmoveturn 1 SURGING_STRIKES_1 @@ -14672,7 +14981,7 @@ SURGING_STRIKES_2: @Credits to Skeli -Move_THUNDER_CAGE:: +gBattleAnimMove_ThunderCage:: loadspritegfx ANIM_TAG_SHOCK_3 @Thunderbolt Ball loadspritegfx ANIM_TAG_SPARK @Electric lines loadspritegfx ANIM_TAG_SPARK_H @Thunder Wave @@ -14711,7 +15020,7 @@ ThunderCageBolts: @Credits to Skeli -Move_DRAGON_ENERGY:: +gBattleAnimMove_DragonEnergy:: loadspritegfx ANIM_TAG_HYDRO_PUMP createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_HYDRO_PUMP, 0x0, 0xC, 0xC, 0x2C5E @;Regidrago Reddish Reddish, Purple monbg ANIM_TARGET @@ -14770,7 +15079,7 @@ DragonEnergyShot: @Credits to Skeli -Move_FREEZING_GLARE:: +gBattleAnimMove_FreezingGlare:: loadspritegfx ANIM_TAG_SMALL_RED_EYE loadspritegfx ANIM_TAG_EYE_SPARKLE loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice @@ -14789,7 +15098,7 @@ Move_FREEZING_GLARE:: @Credits to Skeli -Move_FIERY_WRATH:: +gBattleAnimMove_FieryWrath:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_PURPLE_RING monbg ANIM_DEF_PARTNER @@ -14869,7 +15178,7 @@ FieryWrathGeyser: @Credits to Skeli -Move_THUNDEROUS_KICK:: +gBattleAnimMove_ThunderousKick:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_SPARK_2 @@ -14906,7 +15215,7 @@ Move_THUNDEROUS_KICK:: @Credits to Skeli -Move_GLACIAL_LANCE:: +gBattleAnimMove_GlacialLance:: loadspritegfx ANIM_TAG_ICICLE_SPEAR loadspritegfx ANIM_TAG_ICE_CUBE loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice @@ -14931,12 +15240,49 @@ Move_GLACIAL_LANCE:: end -Move_ASTRAL_BARRAGE:: - goto Move_SHADOW_BALL +gBattleAnimMove_AstralBarrage:: + loadspritegfx ANIM_TAG_FLAT_ROCK + loadspritegfx ANIM_TAG_ICE_CRYSTALS + loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_FLAT_ROCK, 0x0, 0xA, 0xA, RGB(2, 1, 4) + createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_ICE_CRYSTALS, 0x0, 0xA, 0xA, RGB(2, 1, 4) + monbg ANIM_ATK_PARTNER + splitbgprio ANIM_ATTACKER + setalpha 12, 8 + fadetobg BG_GHOST + waitbgfadein + createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_ATTACKER, 2, 4, 1, 180, 1 + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_FAINT_ATTACK, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 5, 20, 0, 5 + createsprite gSuperpowerRockSpriteTemplate, ANIM_ATTACKER, 41, 200, 96, 1, 120 + delay 8 + createsprite gSuperpowerRockSpriteTemplate, ANIM_ATTACKER, 41, 20, 248, 4, 112 + delay 8 + createsprite gSuperpowerRockSpriteTemplate, ANIM_ATTACKER, 41, 130, 160, 2, 104 + delay 8 + createsprite gSuperpowerRockSpriteTemplate, ANIM_ATTACKER, 41, 160, 192, 0, 96 + delay 8 + createsprite gSuperpowerRockSpriteTemplate, ANIM_ATTACKER, 41, 60, 288, 3, 88 + delay 74 + panse SE_M_BLIZZARD, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 + call BlizzardIceCrystals + call BlizzardIceCrystals + playsewithpan SE_M_BLIZZARD2, SOUND_PAN_TARGET + waitforvisualfinish + playsewithpan SE_M_NIGHTMARE, SOUND_PAN_TARGET + createspriteontargets gCurseGhostSpriteTemplate, ANIM_TARGET, 3, 2, 8, -5, ANIM_TARGET, 0 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 8, 0, 16, 1 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 8, 0, 16, 1 + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + restorebg + waitbgfadein + blendoff + delay 1 + end @Credits to Skeli -Move_EERIE_SPELL:: +gBattleAnimMove_EerieSpell:: loadspritegfx ANIM_TAG_PURPLE_FLAME call SetPsychicBackground waitforvisualfinish @@ -14979,7 +15325,7 @@ EerieSpellConvergingFlames: @@@@@@@@@@@@@@@@@@@@@@@ GEN 9 @@@@@@@@@@@@@@@@@@@@@@@ @ credits to Skeli -Move_DIRE_CLAW:: +gBattleAnimMove_DireClaw:: loadspritegfx ANIM_TAG_SLASH loadspritegfx ANIM_TAG_POISON_BUBBLE createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SLASH, 0x0, 0xC, 0xC, 0x6038 @;Purple @@ -15000,7 +15346,7 @@ Move_DIRE_CLAW:: @ credits to Skeli -Move_PSYSHIELD_BASH:: +gBattleAnimMove_PsyshieldBash:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_WATER_GUN @Blue colour call SetPsychicBackground @@ -15029,7 +15375,7 @@ Move_PSYSHIELD_BASH:: end @ credits to skeli -Move_POWER_SHIFT:: +gBattleAnimMove_PowerShift:: loadspritegfx ANIM_TAG_BLUEGREEN_ORB loadspritegfx ANIM_TAG_RED_HEART @Red colour for orb monbg ANIM_ATK_PARTNER @@ -15045,7 +15391,7 @@ Move_POWER_SHIFT:: @ credits to skeli -Move_STONE_AXE:: +gBattleAnimMove_StoneAxe:: loadspritegfx ANIM_TAG_SLAM_HIT_2 @Cut loadspritegfx ANIM_TAG_ROCKS monbg ANIM_TARGET @@ -15075,12 +15421,13 @@ StoneAxeRockFragments: @Credits to Skeli -Move_SPRINGTIDE_STORM:: +gBattleAnimMove_SpringtideStorm:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_RED_HEART playsewithpan SE_M_GUST, SOUND_PAN_TARGET - createvisualtaskontargets AnimTask_ShakeMon2, 2, 0, ANIM_TARGET, 0, 4, 0x58, 1 - createvisualtask AnimTask_BlendColorCycle, 0x2, F_PAL_TARGET, 0x2, 0x6, 0x0, 0xB, 0x7ADF + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 88, 1 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 88, 1 + createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 2, 6, 0, 11, 0x7ADF call HurricaneGustCentered call SpringtideStormHeartSwirl call HurricaneGustCentered @@ -15113,7 +15460,7 @@ SpringtideStormHeartSwirl: @Credits to Skeli -Move_MYSTICAL_POWER:: +gBattleAnimMove_MysticalPower:: loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_POISON_BUBBLE @Purple Colour loadspritegfx ANIM_TAG_HYDRO_PUMP @Blue colour @@ -15168,7 +15515,7 @@ MysticalPowerFoeTwoRingsOnly: @Credits to Skeli -Move_RAGING_FURY:: +gBattleAnimMove_RagingFury:: loadspritegfx ANIM_TAG_SMALL_EMBER loopsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER, 0x8, 0x3 createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET), 2, 5, 3, 8, RGB_RED @@ -15185,7 +15532,7 @@ Move_RAGING_FURY:: end @Credits to Skeli -Move_WAVE_CRASH:: +gBattleAnimMove_WaveCrash:: loadspritegfx ANIM_TAG_WATER_IMPACT loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_ICE_CRYSTALS @Bubbles on attacker @@ -15206,7 +15553,7 @@ Move_WAVE_CRASH:: @Credits to Skeli -Move_CHLOROBLAST:: +gBattleAnimMove_Chloroblast:: loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_HYDRO_PUMP createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_THIN_RING, 0x0, 0xA, 0xA, 0x03AC @@ -15267,7 +15614,7 @@ ChloroblastShot: return @Credits to Skeli -Move_MOUNTAIN_GALE:: +gBattleAnimMove_MountainGale:: loadspritegfx ANIM_TAG_ROCKS @Rocks loadspritegfx ANIM_TAG_DRAGON_ASCENT_FOE @White Rock Colour monbg ANIM_TARGET @@ -15300,7 +15647,7 @@ MountainGaleIceRock: @Credits to Skeli -Move_VICTORY_DANCE:: +gBattleAnimMove_VictoryDance:: loadspritegfx ANIM_TAG_HOLLOW_ORB createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 40, 6, 3, 3 playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER @@ -15320,7 +15667,7 @@ Move_VICTORY_DANCE:: end @Credits to Skeli -Move_HEADLONG_RUSH:: +gBattleAnimMove_HeadlongRush:: loadspritegfx ANIM_TAG_MUD_SAND @Dig loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_EXPLOSION_2 @@ -15407,7 +15754,7 @@ MaxQuake_DirtGeyser: @Credits to Skeli -Move_BARB_BARRAGE:: +gBattleAnimMove_BarbBarrage:: loadspritegfx ANIM_TAG_SPIKES loadspritegfx ANIM_TAG_SHADOW_BALL @Spikes colour loadspritegfx ANIM_TAG_POISON_BUBBLE @@ -15440,7 +15787,7 @@ BarbBarrageSpikeShoot: @Credits to Skeli -Move_ESPER_WING:: +gBattleAnimMove_EsperWing:: loadspritegfx ANIM_TAG_PUNISHMENT_BLADES @Punishment Blade loadspritegfx ANIM_TAG_WHITE_FEATHER createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_WHITE_FEATHER, 0x0, 0xA, 0xA, 0x7DDE @@ -15477,7 +15824,7 @@ WingAttackFeatherScatter: @Credits to Skeli -Move_BITTER_MALICE:: +gBattleAnimMove_BitterMalice:: loadspritegfx ANIM_TAG_PURPLE_RING loadspritegfx ANIM_TAG_EYE_SPARKLE loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -15511,7 +15858,7 @@ BitterMaliceSwirl: return @ credits to Skeli -Move_SHELTER:: +gBattleAnimMove_Shelter:: loadspritegfx ANIM_TAG_SHELL_LEFT loadspritegfx ANIM_TAG_SHELL_RIGHT playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER @@ -15527,7 +15874,7 @@ Move_SHELTER:: @Credits to Skeli -Move_TRIPLE_ARROWS:: +gBattleAnimMove_TripleArrows:: loadspritegfx ANIM_TAG_SPIRIT_ARROW @Arrow loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_DEF_PARTNER @@ -15561,7 +15908,7 @@ TripleArrowsOnOpponent: @Credits to Skeli -Move_INFERNAL_PARADE:: +gBattleAnimMove_InfernalParade:: loadspritegfx ANIM_TAG_PURPLE_FLAME loadspritegfx ANIM_TAG_WISP_FIRE monbg ANIM_TARGET @@ -15607,7 +15954,7 @@ InfernalFlames: @Credits to Skeli -Move_CEASELESS_EDGE:: +gBattleAnimMove_CeaselessEdge:: loadspritegfx ANIM_TAG_SLASH playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, ANIM_ATTACKER, 0x2C, 0x0, 0x0, 0x5 @@ -15645,12 +15992,13 @@ CeaselessEdgeSlashes: @Credits to Skeli -Move_BLEAKWIND_STORM:: +gBattleAnimMove_BleakwindStorm:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_ICE_CRYSTALS playsewithpan SE_M_GUST, SOUND_PAN_TARGET - createvisualtaskontargets AnimTask_ShakeMon2, 2, 0, ANIM_TARGET, 0, 4, 0x58, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x4, 0x0, 0xB, 0x7FFF + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 88, 1 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 88, 1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 4, 0, 11, 0x7FFF call HurricaneGustCentered call BleakwindStormIceSwirl call HurricaneGustCentered @@ -15665,7 +16013,7 @@ Move_BLEAKWIND_STORM:: call BleakwindStormIceSwirl waitforvisualfinish stopsound - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0xB, 0x0, 0x7FFF + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 1, 11, 0, 0x7FFF waitforvisualfinish end BleakwindStormIceSwirl: @@ -15684,16 +16032,17 @@ BleakwindStormIceSwirl: @Credits to Skeli -Move_WILDBOLT_STORM:: +gBattleAnimMove_WildboltStorm:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_SPARK_2 fadetobg BG_MAX_LIGHTNING waitbgfadeout - createvisualtask AnimTask_StartSlidingBg, 0x5, 0xff00, 0x0, 0x1, 0xffff + createvisualtask AnimTask_StartSlidingBg, 5, -256, 0, 1, 0xffff waitbgfadein playsewithpan SE_M_GUST, SOUND_PAN_TARGET - createvisualtaskontargets AnimTask_ShakeMon2, 2, 0, ANIM_TARGET, 0, 4, 0x58, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 0x4, 0x0, 0xB, 0x07FE + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 88, 1 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 88, 1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 4, 0, 11, 0x07FE call HurricaneGustCentered call WildboltStormSparkSwirl call HurricaneGustCentered @@ -15708,7 +16057,7 @@ Move_WILDBOLT_STORM:: call WildboltStormSparkSwirl waitforvisualfinish stopsound - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0xB, 0x0, 0x07FE + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 1, 11, 0, 0x07FE call UnsetPsychicBg waitforvisualfinish end @@ -15729,13 +16078,14 @@ WildboltStormSparkSwirl: @Credits to Skeli -Move_SANDSEAR_STORM:: +gBattleAnimMove_SandsearStorm:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_SMALL_EMBER createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_GUST, 0x0, 0xA, 0xA, 0x190B playsewithpan SE_M_GUST, SOUND_PAN_TARGET - createvisualtaskontargets AnimTask_ShakeMon2, 2, 0, ANIM_TARGET, 0, 4, 0x58, 1 - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x4, 0x0, 0xB, 0x1F + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 88, 1 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 88, 1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 4, 0, 11, 0x1F call HurricaneGustCentered call SandsearStormFireSpin call HurricaneGustCentered @@ -15750,7 +16100,7 @@ Move_SANDSEAR_STORM:: call SandsearStormFireSpin waitforvisualfinish stopsound - createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_TARGET, 0x1, 0xB, 0x0, 0x1F + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_TARGET | F_PAL_DEF_PARTNER), 1, 11, 0, 0x1F waitforvisualfinish end @@ -15770,7 +16120,7 @@ SandsearStormFireSpin: @Credits to Skeli -Move_LUNAR_BLESSING:: +gBattleAnimMove_LunarBlessing:: loadspritegfx ANIM_TAG_MOON loadspritegfx ANIM_TAG_SPARKLE_2 loadspritegfx ANIM_TAG_GUARD_RING @@ -15805,7 +16155,7 @@ Move_LUNAR_BLESSING:: @Credits to Skeli -Move_TAKE_HEART:: +gBattleAnimMove_TakeHeart:: loadspritegfx ANIM_TAG_RED_HEART loadspritegfx ANIM_TAG_SPARKLE_2 loadspritegfx ANIM_TAG_GUARD_RING @@ -15834,7 +16184,7 @@ TakeHeartRings: delay 0x4 return -Move_BITTER_BLADE:: +gBattleAnimMove_BitterBlade:: loadspritegfx ANIM_TAG_FOCUS_ENERGY loadspritegfx ANIM_TAG_CLAW_SLASH loadspritegfx ANIM_TAG_POISON_BUBBLE @@ -15870,7 +16220,7 @@ Move_BITTER_BLADE:: blendoff end -Move_DOUBLE_SHOCK:: +gBattleAnimMove_DoubleShock:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_LIGHTNING @@ -15902,13 +16252,13 @@ Move_DOUBLE_SHOCK:: waitforvisualfinish end -Move_SYRUP_BOMB:: +gBattleAnimMove_SyrupBomb:: createvisualtask AnimTask_SyrupBomb, 0x5 - jumpargeq 0x0, FALSE, Move_SYRUP_BOMB_RED - jumpargeq 0x0, TRUE, Move_SYRUP_BOMB_YELLOW + jumpargeq 0x0, FALSE, gBattleAnimMove_SyrupBombRed + jumpargeq 0x0, TRUE, gBattleAnimMove_SyrupBombYellow @ Credits to Dat.H A -Move_SYRUP_BOMB_RED:: +gBattleAnimMove_SyrupBombRed:: loadspritegfx ANIM_TAG_SYRUP_BLOB_RED loadspritegfx ANIM_TAG_SYRUP_SPLAT_RED loadspritegfx ANIM_TAG_SYRUP_SHELL_RED @@ -15946,7 +16296,7 @@ SyrupBombProjectileRed: delay 3 return -Move_SYRUP_BOMB_YELLOW:: +gBattleAnimMove_SyrupBombYellow:: loadspritegfx ANIM_TAG_SYRUP_BLOB_YELLOW loadspritegfx ANIM_TAG_SYRUP_SPLAT_YELLOW loadspritegfx ANIM_TAG_SYRUP_SHELL_YELLOW @@ -15984,7 +16334,7 @@ SyrupBombProjectileYellow: delay 3 return -General_SyrupBombSpeedDrop:: +gBattleAnimGeneral_SyrupBombSpeedDrop:: createvisualtask AnimTask_StickySyrup, 0x5 jumpargeq 0x0, FALSE, SyrupBombSpeedDropRed jumpargeq 0x0, TRUE, SyrupBombSpeedDropYellow @@ -16009,7 +16359,7 @@ SyrupBombSpeedDropYellow: waitforvisualfinish end -Move_CHILLY_RECEPTION:: +gBattleAnimMove_ChillyReception:: loadspritegfx ANIM_TAG_CONFETTI loadspritegfx ANIM_TAG_PINK_CLOUD loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -16080,10 +16430,33 @@ ChillyReceptionSnowballs: delay 3 return -Move_BURNING_BULWARK:: - goto Move_PROTECT +gBattleAnimMove_BurningBulwark:: + loadspritegfx ANIM_TAG_PROTECT @protect + loadspritegfx ANIM_TAG_SMALL_EMBER @fire + monbg ANIM_ATK_PARTNER + splitbgprio ANIM_ATTACKER + waitplaysewithpan SE_M_REFLECT, SOUND_PAN_ATTACKER 16 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_PROTECT, 0, 13, 13, 0x015B + createsprite gProtectSpriteTemplate, ANIM_ATTACKER, 2, 24, 0, 90 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 0 + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 4 + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 8 + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 12 + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 16 + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 20 + delay 2 + createsprite gFireSpiralOutwardSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 56, 24 + createvisualtask AnimTask_BlendMonInAndOut, 3, ANIM_ATTACKER, RGB_RED, 10, 0, 2 + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + end -Move_ALLURING_VOICE:: +gBattleAnimMove_AlluringVoice:: loadspritegfx ANIM_TAG_THIN_RING createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x6e7d waitforvisualfinish @@ -16104,7 +16477,7 @@ Move_ALLURING_VOICE:: end @ Credits to Z-nogyroP -Move_AQUA_CUTTER:: +gBattleAnimMove_AquaCutter:: loadspritegfx ANIM_TAG_SLASH_2 loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -16143,7 +16516,7 @@ Move_AQUA_CUTTER:: end @ Credits to Z-nogyroP -Move_GIGATON_HAMMER:: +gBattleAnimMove_GigatonHammer:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_WOOD_HAMMER_HAMMER loadspritegfx ANIM_TAG_CLAW_SLASH @@ -16172,7 +16545,7 @@ GigatonHammerImpact: return @ Credits to Z-nogyroP -Move_ICE_SPINNER:: +gBattleAnimMove_IceSpinner:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_RAPID_SPIN monbg ANIM_ATTACKER @@ -16215,10 +16588,16 @@ IceCrystalSpinEffect: return @ Credits to Z-nogyroP -Move_RAGING_BULL:: +gBattleAnimMove_RagingBull:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ANGER loadspritegfx ANIM_TAG_BREATH + loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL + loadspritegfx ANIM_TAG_TORN_METAL + choosetwoturnanim RagingBullNormal, RagingBullShatteredWall +RagingBullNormal: + monbg ANIM_TARGET + setalpha 12, 8 createsprite gBreathPuffSpriteTemplate, ANIM_ATTACKER, 2 loopsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 4, 2 createsprite gAngerMarkSpriteTemplate, ANIM_ATTACKER, 2, 0, -20, -28 @@ -16250,10 +16629,53 @@ Move_RAGING_BULL:: waitforvisualfinish restorebg waitbgfadein + clearmonbg ANIM_TARGET + end +RagingBullShatteredWall: + monbg ANIM_TARGET + setalpha 12, 8 + createsprite gBreathPuffSpriteTemplate, ANIM_ATTACKER, 2 + loopsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 4, 2 + createsprite gAngerMarkSpriteTemplate, ANIM_ATTACKER, 2, 0, -20, -28 + delay 20 + createsprite gAngerMarkSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, -28 + waitforvisualfinish + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 18, 6, 2, 4 + waitforvisualfinish + playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER + call SetImpactBackground + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 + delay 3 + waitforvisualfinish + createsprite gBrickBreakWallSpriteTemplate, ANIM_ATTACKER, 3, ANIM_TARGET, 0, 0, 90, 10 + playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 4, -10, 0, ANIM_TARGET, 0 + createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 1, -32, 0, 0, 3 + delay 20 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 0 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 0 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 4, 0, 12, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + delay 20 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_ATTACKER, 1 + createvisualtask AnimTask_RotateMonSpriteToSide, 2, 8, -256, ANIM_TARGET, 1 + waitforvisualfinish + createsprite gBrickBreakWallShardSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 0, -8, -12 + createsprite gBrickBreakWallShardSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 1, 8, -12 + createsprite gBrickBreakWallShardSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 2, -8, 12 + createsprite gBrickBreakWallShardSpriteTemplate, ANIM_ATTACKER, 2, ANIM_TARGET, 3, 8, 12 + playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_TARGET + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 5 + delay 3 + createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 1, 0, 7 + waitforvisualfinish + restorebg + waitbgfadein + clearmonbg ANIM_TARGET end @ Credits to Z-nogyroP. Simple anim that combines Force Palm + Fake Out -Move_UPPER_HAND:: +gBattleAnimMove_UpperHand:: loadspritegfx ANIM_TAG_SHADOW_BALL loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT @@ -16279,7 +16701,7 @@ Move_UPPER_HAND:: blendoff end -Move_JET_PUNCH:: +gBattleAnimMove_JetPunch:: loadspritegfx ANIM_TAG_ICE_CRYSTALS loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT @@ -16321,7 +16743,7 @@ Move_JET_PUNCH:: blendoff end -Move_PSYCHIC_NOISE:: +gBattleAnimMove_PsychicNoise:: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE loadspritegfx ANIM_TAG_THIN_RING monbg ANIM_DEF_PARTNER @@ -16351,7 +16773,7 @@ Move_PSYCHIC_NOISE:: call UnsetPsychicBg end -Move_TEMPER_FLARE:: +gBattleAnimMove_TemperFlare:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ANGER @@ -16388,7 +16810,7 @@ Move_TEMPER_FLARE:: waitforvisualfinish end -Move_TRAILBLAZE:: +gBattleAnimMove_Trailblaze:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_FLOWER @@ -16434,7 +16856,7 @@ TrailblazeVortex: delay 0x2 return -Move_LAST_RESPECTS:: +gBattleAnimMove_LastRespects:: loadspritegfx ANIM_TAG_FOCUS_ENERGY loadspritegfx ANIM_TAG_SWEAT_BEAD @blue color loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT @@ -16480,7 +16902,7 @@ Move_LAST_RESPECTS:: waitbgfadein end -Move_TIDY_UP:: +gBattleAnimMove_TidyUp:: loadspritegfx ANIM_TAG_PINK_CLOUD monbg ANIM_ATTACKER setalpha 12, 4 @@ -16501,7 +16923,7 @@ Move_TIDY_UP:: blendoff end -Move_KOWTOW_CLEAVE:: +gBattleAnimMove_KowtowCleave:: loadspritegfx ANIM_TAG_SLASH loadspritegfx ANIM_TAG_CROSS_IMPACT loadspritegfx ANIM_TAG_LEER @@ -16532,7 +16954,7 @@ Move_KOWTOW_CLEAVE:: waitbgfadein end -Move_LUMINA_CRASH:: +gBattleAnimMove_LuminaCrash:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_IMPACT @@ -16596,7 +17018,7 @@ Move_LUMINA_CRASH:: blendoff end -Move_TORCH_SONG:: +gBattleAnimMove_TorchSong:: loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_IMPACT @@ -16655,7 +17077,7 @@ TorchSongEffect: createvisualtask SoundTask_WaitForCry, 5 return -Move_AQUA_STEP:: +gBattleAnimMove_AquaStep:: loadspritegfx ANIM_TAG_GLOWY_BLUE_ORB loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_RAPID_SPIN @@ -16694,7 +17116,7 @@ Move_AQUA_STEP:: clearmonbg ANIM_ATTACKER end -Move_RAGE_FIST:: +gBattleAnimMove_RageFist:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_ANGER @@ -16732,7 +17154,7 @@ Move_RAGE_FIST:: waitbgfadein end -Move_CHILLING_WATER:: +gBattleAnimMove_ChillingWater:: loadspritegfx ANIM_TAG_ICE_CRYSTALS loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_TARGET @@ -16761,7 +17183,7 @@ Move_CHILLING_WATER:: clearmonbg ANIM_TARGET end -Move_HYDRO_STEAM:: +gBattleAnimMove_HydroSteam:: loadspritegfx ANIM_TAG_WATER_ORB loadspritegfx ANIM_TAG_WATER_IMPACT createvisualtask AnimTask_ShakeMon, 5, ANIM_ATTACKER, 0, 2, 40, 1 @@ -16795,7 +17217,7 @@ Move_HYDRO_STEAM:: waitforvisualfinish end -Move_POUNCE:: +gBattleAnimMove_Pounce:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -16812,7 +17234,7 @@ Move_POUNCE:: blendoff end -Move_ELECTRO_SHOT:: +gBattleAnimMove_ElectroShot:: choosetwoturnanim ElectroShotSetUp, ElectroShotUnleash ElectroShotEnd: waitforvisualfinish @@ -16900,7 +17322,7 @@ ElectroShotUnleash: blendoff end -Move_IVY_CUDGEL:: +gBattleAnimMove_IvyCudgel:: loadspritegfx ANIM_TAG_IVY_CUDGEL_GRASS loadspritegfx ANIM_TAG_WOOD_HAMMER loadspritegfx ANIM_TAG_WOOD_HAMMER_HAMMER @@ -16953,7 +17375,7 @@ IvyCudgelWater: waitforvisualfinish end -Move_SPICY_EXTRACT:: +gBattleAnimMove_SpicyExtract:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_POISON_BUBBLE loadspritegfx ANIM_TAG_SMALL_BUBBLES @@ -16998,7 +17420,7 @@ Move_SPICY_EXTRACT:: waitforvisualfinish end -Move_AXE_KICK:: +gBattleAnimMove_AxeKick:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER @@ -17013,50 +17435,624 @@ Move_AXE_KICK:: createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4 end -Move_TERA_BLAST:: -Move_ORDER_UP:: -Move_SPIN_OUT:: -Move_POPULATION_BOMB:: -Move_GLAIVE_RUSH:: -Move_REVIVAL_BLESSING:: -Move_SALT_CURE:: -Move_TRIPLE_DIVE:: -Move_MORTAL_SPIN:: -Move_DOODLE:: -Move_FILLET_AWAY:: -Move_FLOWER_TRICK:: -Move_MAKE_IT_RAIN:: -Move_RUINATION:: -Move_COLLISION_COURSE:: -Move_ELECTRO_DRIFT:: -Move_SHED_TAIL:: -Move_HYPER_DRILL:: -Move_TWIN_BEAM:: -Move_ARMOR_CANNON:: -Move_COMEUPPANCE:: -Move_BLAZING_TORQUE:: -Move_WICKED_TORQUE:: -Move_NOXIOUS_TORQUE:: -Move_COMBAT_TORQUE:: -Move_MAGICAL_TORQUE:: -Move_PSYBLADE:: -Move_BLOOD_MOON:: -Move_MATCHA_GOTCHA:: -Move_TERA_STARSTORM:: -Move_FICKLE_BEAM:: -Move_THUNDERCLAP:: -Move_MIGHTY_CLEAVE:: -Move_TACHYON_CUTTER:: -Move_HARD_PRESS:: -Move_DRAGON_CHEER:: -Move_SUPERCELL_SLAM:: -Move_MALIGNANT_CHAIN:: +gBattleAnimMove_SpinOut:: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_RAPID_SPIN + loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 + createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK + waitforvisualfinish + call SetHighSpeedBg + loopsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, 8, 3 + waitforvisualfinish + monbg ANIM_ATTACKER + createsprite gRapidSpinSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 32, -32, 40, -2 + createvisualtask AnimTask_RapinSpinMonElevation, 2, 0, 2, 0 + loopsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, 8, 4 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 2 + createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, FALSE, 1, 10, 1, 0 + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + waitforvisualfinish + delay 8 + createvisualtask AnimTask_RapinSpinMonElevation, 2, 0, 2, 1 + loopsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, 8, 4 + waitforvisualfinish + call UnsetHighSpeedBg + clearmonbg ANIM_ATTACKER + end + +gBattleAnimMove_MortalSpin:: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_RAPID_SPIN + loadspritegfx ANIM_TAG_POISON_BUBBLE + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_RAPID_SPIN, 0, 6, 6, RGB(15, 0, 15) + monbg ANIM_ATTACKER + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 1, 0, 13, RGB(10, 2, 19) + delay 16 + createsprite gRapidSpinSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 32, -32, 40, -2 + createvisualtask AnimTask_RapinSpinMonElevation, 2, 0, 2, 0 + loopsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, 8, 4 + waitforvisualfinish + createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, 0, 0, ANIM_TARGET, 2 + createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 2, FALSE, 1, 10, 1, 0 + createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 1, 13, 0, RGB(10, 2, 19) + call PoisonBubblesEffect + waitforvisualfinish + delay 8 + createvisualtask AnimTask_RapinSpinMonElevation, 2, 0, 2, 1 + loopsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER, 8, 4 + waitforvisualfinish + clearmonbg ANIM_ATTACKER + blendoff + end + +gBattleAnimMove_FilletAway:: + loadspritegfx ANIM_TAG_CUT + createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 0 + playsewithpan SE_M_CUT, SOUND_PAN_ATTACKER + delay 5 + createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 20, -27, 0 + playsewithpan SE_M_CUT, SOUND_PAN_ATTACKER + delay 5 + createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 60, -37, 0 + playsewithpan SE_M_CUT, SOUND_PAN_ATTACKER + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 0, 9, 0x7FFF + waitforvisualfinish + createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 2, 4, 4 + waitforvisualfinish + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 2, 9, 0, 0x7FFF + waitforvisualfinish + blendoff + end + +gBattleAnimMove_FlowerTrick:: + loadspritegfx ANIM_TAG_SPOTLIGHT + loadspritegfx ANIM_TAG_LEAF @leaves + loadspritegfx ANIM_TAG_FLOWER @flowers + loadspritegfx ANIM_TAG_IMPACT + createvisualtask AnimTask_CreateSpotlight, 2 + createvisualtask AnimTask_HardwarePaletteFade, 2, (BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN), 3, 0, 10, FALSE + waitforvisualfinish + createsprite gSpotlightSpriteTemplate, ANIM_TARGET, 2, 0, -8 + delay 16 + createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_ENCORE2, SOUND_PAN_TARGET + createvisualtask AnimTask_SwayMon, 5, 1, 8, 1536, 5, ANIM_TARGET + waitforvisualfinish + playsewithpan SE_M_DOUBLE_SLAP, SOUND_PAN_TARGET + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, 192, 176, 40 + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, -192, 240, 40 + createsprite gTropKickFlowerTemplate, ANIM_TARGET, 1, 0, 10, 192, -160, 40 + createsprite gTropKickFlowerTemplate, ANIM_TARGET, 1, 0, 10, -192, -112, 40 + createsprite gTropKickFlowerTemplate, ANIM_TARGET, 1, 0, 10, 160, 48, 40 + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, -224, -32, 40 + createsprite gTropKickLeavesTemplate, ANIM_TARGET, 1, 0, 10, 112, -128, 40 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 2 + waitforvisualfinish + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 6, 1 + waitforvisualfinish + createvisualtask AnimTask_HardwarePaletteFade, 2, (BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN), 3, 10, 0, TRUE + createvisualtask AnimTask_RemoveSpotlight, 2 + end + +gBattleAnimMove_MakeItRain:: + loadspritegfx ANIM_TAG_COIN + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_ATTACKER + setalpha 12, 8 + playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER + createsprite gCoinThrowSpriteTemplate, ANIM_ATTACKER, 2, 20, 0, 0, 0, 1152 + waitforvisualfinish + playsewithpan SE_M_PAY_DAY, SOUND_PAN_TARGET + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 1, 0, 0, ANIM_TARGET, 2 + createsprite gFallingCoinSpriteTemplate, ANIM_ATTACKER, 2 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1 + waitforvisualfinish + delay 20 + createvisualtask AnimTask_IsTargetPlayerSide, 2 + jumpretfalse MakingItRainOnOpponent + jumprettrue MakingItRainOnPlayer +MakingItRainContinue: + waitbgfadeout + createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_ATTACKER, 2, 7, 1, 11, 1 + loopsewithpan SE_M_PAY_DAY, SOUND_PAN_TARGET, 8, 15 + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, -5, 0, -5, 1 + delay 2 + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, 5, 0, 6, 1 + delay 2 + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, 19, 0, 10, 1 + delay 2 + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, -23, 0, -10, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 5, 50, 1 + createvisualtask AnimTask_ShakeMon, 2, ANIM_DEF_PARTNER, 0, 5, 50, 1 + call MakingItRain + call MakingItRain + call MakingItRain + restorebg + waitbgfadein + blendoff + waitforvisualfinish + clearmonbg ANIM_ATTACKER + end +MakingItRainOnOpponent: + fadetobg BG_IMPACT_OPPONENT + goto MakingItRainContinue +MakingItRainOnPlayer: + fadetobg BG_IMPACT_PLAYER + goto MakingItRainContinue +MakingItRain: + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, -20, 0, -10, 1 + delay 2 + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, 28, 0, 10, 1 + delay 2 + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, -10, 0, -5, 1 + delay 2 + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, 10, 0, 6, 1 + delay 2 + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, 24, 0, 10, 1 + delay 2 + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, -32, 0, -10, 1 + delay 2 + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, -20, 0, -10, 1 + delay 2 + createsprite gMakingItRainTemplate, ANIM_TARGET, 2, 30, 0, 10, 1 + delay 2 + return + +gBattleAnimMove_ShedTail:: + loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 24, 3 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 12, 4, 2, 3 + waitforvisualfinish + playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER + createvisualtask AnimTask_MonToSubstitute, 2 + end + +gBattleAnimMove_HyperDrill:: + loadspritegfx ANIM_TAG_IMPACT + loadspritegfx ANIM_TAG_HORN_HIT + fadetobgfromset BG_GUILLOTINE_OPPONENT, BG_GUILLOTINE_PLAYER, BG_GUILLOTINE_CONTESTS + waitbgfadein + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0 + playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER + waitforvisualfinish + delay 2 + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 1 + createsprite gHornHitSpriteTemplate, ANIM_TARGET, 4, 0, 0, 12 + waitforvisualfinish + playse 20 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 2, 0, 40, 1 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 10, 0, 40, 1 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 0, 1, 3 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 4 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 0, 2, 1, 3 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 4 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, -4, 3, 1, 3 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 4 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, -8, -5, 1, 3 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 4 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 4, -12, 1, 3 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 4 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 16, 0, 1, 3 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 4 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 5, 18, 1, 3 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 4 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, -17, 12, 1, 2 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 4 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, -21, -15, 1, 2 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 4 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 8, -27, 1, 2 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 4 + createsprite gFlashingHitSplatSpriteTemplate, ANIM_TARGET, 3, 32, 0, 1, 2 + playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET + delay 4 + createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 2 + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 + playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET + waitforvisualfinish + createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 1, RGB_BLACK, 8, RGB_BLACK, 0 + restorebg + waitbgfadein + blendoff + end + +gBattleAnimMove_TwinBeam:: + loadspritegfx ANIM_TAG_BLUE_RING + loadspritegfx ANIM_TAG_GOLD_RING + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + call SetPsychicBackground + createvisualtask AnimTask_StartSinAnimTimer, 5, 100 + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_TELEPORT, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 2, 9, 0, 10 + call PsywaveRings + call PsybeamRings + call PsywaveRings + call PsybeamRings + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 1, 4, 0, 12, RGB(31, 18, 31) + call PsywaveRings + call PsybeamRings + call PsywaveRings + call PsybeamRings + call PsywaveRings + call PsybeamRings + call PsywaveRings + call PsybeamRings + waitforvisualfinish + delay 1 + call UnsetPsychicBg + end + +gBattleAnimMove_Comeuppance:: + loadspritegfx ANIM_TAG_IMPACT + monbg ANIM_TARGET + fadetobg BG_DARK + waitbgfadein + delay 0 + playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER + createvisualtask AnimTask_ShakeMon2, 5, ANIM_ATTACKER, 1, 0, 15, 1 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 3, 0, 9, RGB_RED + waitforvisualfinish + delay 10 + createvisualtask AnimTask_SwayMon, 5, 0, 16, 6144, 8, ANIM_ATTACKER + delay 5 + setalpha 12, 8 + createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 4, 0, 30, 1 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 1, 0 + playsewithpan SE_M_COMET_PUNCH, +63 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 24, 8, 1, 0 + playsewithpan SE_M_COMET_PUNCH, +63 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -24, -16, 1, 0 + playsewithpan SE_M_COMET_PUNCH, +63 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 8, 4, 1, 0 + playsewithpan SE_M_COMET_PUNCH, +63 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, -16, 19, 1, 0 + playsewithpan SE_M_COMET_PUNCH, +63 + delay 5 + createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 3, 18, -18, 1, 0 + playsewithpan SE_M_COMET_PUNCH, +63 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + restorebg + waitbgfadein + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 3, 9, 0, RGB_RED + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + end + +gBattleAnimMove_BloodMoon:: + loadspritegfx ANIM_TAG_BLOOD_MOON + loadspritegfx ANIM_TAG_BEAM + loadspritegfx ANIM_TAG_RED_EXPLOSION + createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_BG, 0, 16, 16, RGB_BLACK + createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 8, 1, ANIM_ATTACKER + delay 8 + playsewithpan SE_M_BARRIER, SOUND_PAN_ATTACKER + createsprite gMoonUpSpriteTemplate, ANIM_ATTACKER, 2 + waitforvisualfinish + delay 15 + playsewithpan SE_M_DETECT, 0 + waitforvisualfinish + createvisualtask AnimTask_IsTargetPlayerSide, 2 + jumpargeq 7 ANIM_TARGET BloodMoonOnPlayer +BloodMoonOnOpponent: + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_HYPER_BEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 1, 10, 0, 5 + call BloodMoonOnslaughtOpponent + call BloodMoonOnslaughtOpponent + call BloodMoonOnslaughtOpponent + call BloodMoonOnslaughtOpponent + call BloodMoonOnslaughtOpponent + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 140, -16, 165, 40, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gRedExplosionSpriteTemplate, ANIM_TARGET, 4, 6, 5, 1, 0 + delay 0 + waitforvisualfinish + goto BloodMoonFinish +BloodMoonOnPlayer: + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_HYPER_BEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 1, 10, 0, 5 + call BloodMoonOnslaughtPlayer + call BloodMoonOnslaughtPlayer + call BloodMoonOnslaughtPlayer + call BloodMoonOnslaughtPlayer + call BloodMoonOnslaughtPlayer + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 40, -16, 75, 80, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + delay 0 + waitforvisualfinish +BloodMoonFinish: + createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_BG, 0, 0, 0, RGB_BLACK + waitforvisualfinish + clearmonbg ANIM_ATTACKER + end +BloodMoonOnslaughtOpponent: + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 140, -16, 165, 40, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gRedExplosionSpriteTemplate, ANIM_TARGET, 4, 6, 5, 1, 0 + delay 0 + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 140, -16, 165, 40, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gRedExplosionSpriteTemplate, ANIM_TARGET, 4, -16, -15, 1, 0 + delay 0 + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 140, -16, 165, 40, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gRedExplosionSpriteTemplate, ANIM_TARGET, 4, 16, -5, 1, 0 + delay 0 + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 140, -16, 165, 40, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gRedExplosionSpriteTemplate, ANIM_TARGET, 4, -12, 18, 1, 0 + delay 0 + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 140, -16, 165, 40, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gRedExplosionSpriteTemplate, ANIM_TARGET, 4, 0, 5, 1, 0 + delay 0 + return +BloodMoonOnslaughtPlayer: + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 40, -16, 75, 80, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gRedExplosionSpriteTemplate, ANIM_TARGET, 4, 6, 5, 1, 0 + delay 0 + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 40, -16, 75, 80, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gRedExplosionSpriteTemplate, ANIM_TARGET, 4, -16, -15, 1, 0 + delay 0 + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 40, -16, 75, 80, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gRedExplosionSpriteTemplate, ANIM_TARGET, 4, 16, -5, 1, 0 + delay 0 + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 40, -16, 75, 80, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gRedExplosionSpriteTemplate, ANIM_TARGET, 4, -12, 18, 1, 0 + delay 0 + createsprite gBloodMoonOnslaughtSpriteTemplate, ANIM_TARGET, 2, 40, -16, 75, 80, 4 + createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 4, 0, 12, 1 + createsprite gRedExplosionSpriteTemplate, ANIM_TARGET, 4, 0, 5, 1, 0 + delay 0 + return + +gBattleAnimMove_FickleBeam:: + createvisualtask AnimTask_IsPowerOver99, 2 + waitforvisualfinish + jumpreteq FALSE, FickleBeamRegular + jumpreteq TRUE, FickleBeamIntense +FickleBeamRegular: + loadspritegfx ANIM_TAG_GOLD_RING + playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_PSYBEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 3, 4, 0, 15 + call PsybeamRings + call PsybeamRings + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 4, 25, 1 + createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 2, 2, 0, 12, RGB(15, 8, 30) + call PsybeamRings + call PsybeamRings + call PsybeamRings + call PsybeamRings + call PsybeamRings + call PsybeamRings + call PsybeamRings + call PsybeamRings + call PsybeamRings + waitforvisualfinish + end +FickleBeamIntense: + loadspritegfx ANIM_TAG_ORBS + fadetobgfromset BG_SPACIAL_REND_ON_OPPONENT BG_SPACIAL_REND_ON_PLAYER BG_SPACIAL_REND_ON_OPPONENT + waitbgfadein + delay 10 + playsewithpan SE_M_HYPER_BEAM, SOUND_PAN_ATTACKER + createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 4, 1 + waitforvisualfinish + delay 30 + createsoundtask SoundTask_LoopSEAdjustPanning, SE_M_HYPER_BEAM2, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 1, 15, 0, 5 + createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 4, 50, 1 + createvisualtask AnimTask_FlashAnimTagWithColor, 2, ANIM_TAG_ORBS, 1, 12, RGB_RED, 16, 0, 0 + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 50, 1 + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + call HyperBeamOrbs + waitforvisualfinish + restorebg + waitbgfadein + end + +gBattleAnimMove_Thunderclap:: + loadspritegfx ANIM_TAG_LIGHTNING + monbg ANIM_ATK_PARTNER + setalpha 12, 8 + createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 24, 6, 1, 5 + createvisualtask AnimTask_TraceMonBlended, 2, 0, 4, 7, 3 + playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER + delay 4 + playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_TARGET + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -32 + playsewithpan SE_M_TRI_ATTACK2, SOUND_PAN_TARGET + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, -16 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, 0 + delay 1 + createsprite gLightningSpriteTemplate, ANIM_TARGET, 2, 0, 16 + delay 10 + createvisualtask AnimTask_ShakeTargetInPattern, 2, 30, 3, TRUE, 0 + delay 2 + createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_BG, 3, 16, 0, RGB_WHITE + createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_TARGET, 0, 16, 16, RGB_BLACK + delay 4 + createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_TARGET, 0, 0, 0, RGB_BLACK + waitforvisualfinish + clearmonbg ANIM_ATK_PARTNER + blendoff + waitforvisualfinish + end + +gBattleAnimMove_HardPress:: + loadspritegfx ANIM_TAG_EXPLOSION + loadspritegfx ANIM_TAG_ACUPRESSURE + loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE + setalpha 15, 0 + call SetSteelBeamBackground + createvisualtask AnimTask_CompressTargetHorizontallyFast, 2 + createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, 0, 0, 1, 1 + delay 3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, 24, -24, 1, 1 + delay 3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, -16, 16, 1, 1 + delay 3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, -24, -12, 1, 1 + delay 3 + playsewithpan SE_M_EXPLOSION, SOUND_PAN_ATTACKER + createsprite gCrushGripExplosionTemplate, ANIM_TARGET, 0, 16, 16, 1, 1 + waitforvisualfinish + blendoff + call UnsetHighSpeedBg + end + +gBattleAnimMove_DragonCheer:: + loadspritegfx ANIM_TAG_NOISE_LINE + loadspritegfx ANIM_TAG_CONFETTI + loadspritegfx ANIM_TAG_PINK_CLOUD + createvisualtask AnimTask_DeepInhale, 2, ANIM_ATTACKER + delay 12 + call RoarEffect + createvisualtask SoundTask_PlayCryHighPitch, 2, ANIM_ATTACKER, 3 + waitforvisualfinish + monbg ANIM_ATTACKER + playsewithpan SE_BALL_OPEN, SOUND_PAN_TARGET + createsprite gSmokeBallEscapeCloudSpriteTemplate, ANIM_ATTACKER, 122, 3, -14, 18, 24 + createsprite gSmokeBallEscapeCloudSpriteTemplate, ANIM_ATTACKER, 121, 3, 14, 6, 24 + createsprite gSmokeBallEscapeCloudSpriteTemplate, ANIM_ATTACKER, 120, 3, -12, 12, 24 + createsprite gSmokeBallEscapeCloudSpriteTemplate, ANIM_ATTACKER, 119, 3, 14, 18, 24 + createsprite gSmokeBallEscapeCloudSpriteTemplate, ANIM_ATTACKER, 118, 3, 0, 0, 24 + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + call CreateFlatterConfetti + waitforvisualfinish + clearmonbg ANIM_ATTACKER + delay 10 + end + +gBattleAnimMove_MalignantChain:: + loadspritegfx ANIM_TAG_PURPLE_CHAIN + loadspritegfx ANIM_TAG_POISON_BUBBLE + loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 6, 2 + createsprite gChainBindingSpriteTemplate, ANIM_TARGET, 4, 0, 16, 0, 1 + delay 7 + createsprite gChainBindingSpriteTemplate, ANIM_TARGET, 2, 0, 8, 1, 1 + delay 3 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 8, 1 + delay 20 + setarg 7, -1 + playsewithpan SE_M_BIND, SOUND_PAN_TARGET + waitforvisualfinish + call PoisonBubblesEffect + waitforvisualfinish + end + +gBattleAnimMove_PopulationBomb:: + loadspritegfx ANIM_TAG_CUT + monbg ANIM_TARGET + setalpha 12, 8 + playsewithpan SE_M_CUT, SOUND_PAN_TARGET + createvisualtask AnimTask_RandomBool, 2 + jumpretfalse PopulationBombSliceRight + jumprettrue PopulationBombSliceLeft +PopulationBombSliceRight: + createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 0 + goto PopulationBombContinue +PopulationBombSliceLeft: + createsprite gCuttingSliceSpriteTemplate, ANIM_ATTACKER, 2, 40, -32, 1 +PopulationBombContinue: + delay 5 + createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 0, 3, 10, 1 + waitforvisualfinish + clearmonbg ANIM_TARGET + blendoff + waitforvisualfinish + end + +gBattleAnimMove_TeraBlast:: +gBattleAnimMove_OrderUp:: +gBattleAnimMove_GlaiveRush:: +gBattleAnimMove_RevivalBlessing:: +gBattleAnimMove_SaltCure:: +gBattleAnimMove_TripleDive:: +gBattleAnimMove_Doodle:: +gBattleAnimMove_Ruination:: +gBattleAnimMove_CollisionCourse:: +gBattleAnimMove_ElectroDrift:: +gBattleAnimMove_ArmorCannon:: +gBattleAnimMove_BlazingTorque:: +gBattleAnimMove_WickedTorque:: +gBattleAnimMove_NoxiousTorque:: +gBattleAnimMove_CombatTorque:: +gBattleAnimMove_MagicalTorque:: +gBattleAnimMove_Psyblade:: +gBattleAnimMove_MatchaGotcha:: +gBattleAnimMove_TeraStarstorm:: +gBattleAnimMove_MightyCleave:: +gBattleAnimMove_TachyonCutter:: +gBattleAnimMove_SupercellSlam:: end @to do @@@@@@@@@@@@@@@@@@@@@@@ GEN 1-3 @@@@@@@@@@@@@@@@@@@@@@@ -Move_NONE:: -Move_MIRROR_MOVE:: -Move_POUND:: +gBattleAnimMove_None:: +gBattleAnimMove_MirrorMove:: +gBattleAnimMove_Pound:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -17068,7 +18064,7 @@ Move_POUND:: blendoff end -Move_DOUBLE_SLAP:: +gBattleAnimMove_DoubleSlap:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -17087,7 +18083,7 @@ DoubleSlapRight: createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 8, 0, ANIM_TARGET, 2 goto DoubleSlapContinue -Move_POISON_POWDER:: +gBattleAnimMove_PoisonPowder:: loadspritegfx ANIM_TAG_POISON_POWDER loadspritegfx ANIM_TAG_POISON_BUBBLE loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 10, 6 @@ -17112,7 +18108,7 @@ Move_POISON_POWDER:: waitforvisualfinish end -Move_STUN_SPORE:: +gBattleAnimMove_StunSpore:: loadspritegfx ANIM_TAG_STUN_SPORE loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 10, 6 createsprite gStunSporeParticleSpriteTemplate, ANIM_TARGET, 2, -30, -22, 117, 80, 5, 1 @@ -17136,7 +18132,7 @@ Move_STUN_SPORE:: waitforvisualfinish end -Move_SLEEP_POWDER:: +gBattleAnimMove_SleepPowder:: loadspritegfx ANIM_TAG_SLEEP_POWDER loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 10, 6 createsprite gSleepPowderParticleSpriteTemplate, ANIM_TARGET, 2, -30, -22, 117, 80, 5, 1 @@ -17160,7 +18156,7 @@ Move_SLEEP_POWDER:: waitforvisualfinish end -Move_SWIFT:: +gBattleAnimMove_Swift:: loadspritegfx ANIM_TAG_YELLOW_STAR loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -17187,7 +18183,7 @@ Move_SWIFT:: blendoff end -Move_STRENGTH:: +gBattleAnimMove_Strength:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -17213,7 +18209,7 @@ Move_STRENGTH:: blendoff end -Move_TACKLE:: +gBattleAnimMove_Tackle:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -17227,7 +18223,7 @@ Move_TACKLE:: blendoff end -Move_BODY_SLAM:: +gBattleAnimMove_BodySlam:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -17253,7 +18249,7 @@ Move_BODY_SLAM:: blendoff end -Move_SUPERSONIC:: +gBattleAnimMove_Supersonic:: loadspritegfx ANIM_TAG_GOLD_RING monbg ANIM_ATK_PARTNER splitbgprio_foes ANIM_ATTACKER @@ -17275,7 +18271,7 @@ SupersonicRing: delay 2 return -Move_SCREECH:: +gBattleAnimMove_Screech:: loadspritegfx ANIM_TAG_PURPLE_RING createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 3, 0, 2, 1 call ScreechRing @@ -17290,7 +18286,7 @@ ScreechRing: delay 2 return -Move_FLAME_WHEEL:: +gBattleAnimMove_FlameWheel:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET @@ -17332,7 +18328,7 @@ FlameWheel1: @ Unused delay 4 return -Move_PIN_MISSILE:: +gBattleAnimMove_PinMissile:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -17361,7 +18357,7 @@ Move_PIN_MISSILE:: blendoff end -Move_ICICLE_SPEAR:: +gBattleAnimMove_IcicleSpear:: loadspritegfx ANIM_TAG_ICICLE_SPEAR loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -17390,7 +18386,7 @@ Move_ICICLE_SPEAR:: blendoff end -Move_TAKE_DOWN:: +gBattleAnimMove_TakeDown:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -17413,7 +18409,7 @@ Move_TAKE_DOWN:: blendoff end -Move_DOUBLE_EDGE:: +gBattleAnimMove_DoubleEdge:: loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_SWIFT, SOUND_PAN_ATTACKER createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 4, 2, RGB_WHITE, 10, RGB_BLACK, 0 @@ -17446,7 +18442,7 @@ Move_DOUBLE_EDGE:: waitforvisualfinish end -Move_POISON_STING:: +gBattleAnimMove_PoisonSting:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_POISON_BUBBLE @@ -17466,7 +18462,7 @@ Move_POISON_STING:: blendoff end -Move_TWINEEDLE:: +gBattleAnimMove_Twineedle:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -17486,7 +18482,7 @@ Move_TWINEEDLE:: blendoff end -Move_FIRE_BLAST:: +gBattleAnimMove_FireBlast:: loadspritegfx ANIM_TAG_SMALL_EMBER createsoundtask SoundTask_FireBlast, SE_M_FLAME_WHEEL, SE_M_FLAME_WHEEL2 call FireBlastRing @@ -17534,7 +18530,7 @@ FireBlastCross: createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0, 0, 15, 2, 2 return -Move_LEECH_SEED:: +gBattleAnimMove_LeechSeed:: loadspritegfx ANIM_TAG_SEED playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER createsprite gLeechSeedSpriteTemplate, ANIM_TARGET, 2, 15, 0, 0, 24, 35, -32 @@ -17549,7 +18545,7 @@ Move_LEECH_SEED:: waitforvisualfinish end -Move_EMBER:: +gBattleAnimMove_Ember:: loadspritegfx ANIM_TAG_SMALL_EMBER loopsewithpan SE_M_EMBER, SOUND_PAN_ATTACKER, 5, 2 createsprite gEmberSpriteTemplate, ANIM_TARGET, 2, 20, 0, -16, 24, 20, 1 @@ -17588,7 +18584,7 @@ SetImpactContestsBG: changebg BG_IMPACT_CONTESTS goto SetImpactBackgroundRet -Move_MEGA_PUNCH:: +gBattleAnimMove_MegaPunch:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET @@ -17613,7 +18609,7 @@ Move_MEGA_PUNCH:: waitbgfadein end -Move_MEGA_KICK:: +gBattleAnimMove_MegaKick:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET @@ -17638,7 +18634,7 @@ Move_MEGA_KICK:: waitbgfadein end -Move_COMET_PUNCH:: +gBattleAnimMove_CometPunch:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET @@ -17660,7 +18656,7 @@ CometPunchRight: createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 8, 0, 8, 1, 0 goto CometPunchContinue -Move_SONIC_BOOM:: +gBattleAnimMove_SonicBoom:: loadspritegfx ANIM_TAG_AIR_WAVE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -17685,7 +18681,7 @@ SonicBoomHit: delay 4 return -Move_THUNDER_SHOCK:: +gBattleAnimMove_ThunderShock:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SPARK_2 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 6, RGB_BLACK @@ -17706,7 +18702,7 @@ Move_THUNDER_SHOCK:: waitforvisualfinish end -Move_THUNDERBOLT:: +gBattleAnimMove_Thunderbolt:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SHOCK_3 loadspritegfx ANIM_TAG_SPARK_2 @@ -17755,7 +18751,7 @@ Move_THUNDERBOLT:: waitforvisualfinish end -Move_THUNDER_WAVE:: +gBattleAnimMove_ThunderWave:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_SPARK_2 loadspritegfx ANIM_TAG_SPARK_H @@ -17776,7 +18772,7 @@ Move_THUNDER_WAVE:: waitforvisualfinish end -Move_BEAT_UP:: +gBattleAnimMove_BeatUp:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_TARGET @@ -17810,7 +18806,7 @@ BeatUpRight: playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET goto BeatUpContinue -Move_STOMP:: +gBattleAnimMove_Stomp:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -17826,13 +18822,13 @@ Move_STOMP:: blendoff end -Move_TAIL_WHIP:: +gBattleAnimMove_TailWhip:: loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 24, 3 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 12, 4, 2, 3 waitforvisualfinish end -Move_CUT:: +gBattleAnimMove_Cut:: loadspritegfx ANIM_TAG_CUT monbg ANIM_TARGET setalpha 12, 8 @@ -17846,7 +18842,7 @@ Move_CUT:: waitforvisualfinish end -Move_HIDDEN_POWER:: +gBattleAnimMove_HiddenPower:: loadspritegfx ANIM_TAG_RED_ORB playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0 @@ -17876,7 +18872,7 @@ Move_HIDDEN_POWER:: createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 224 end -Move_REVERSAL:: +gBattleAnimMove_Reversal:: loadspritegfx ANIM_TAG_BLUE_ORB loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT @@ -17904,7 +18900,7 @@ Move_REVERSAL:: createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 5, FALSE, 1, 8, 1, 0 end -Move_PURSUIT:: +gBattleAnimMove_Pursuit:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET fadetobg BG_DARK @@ -17931,7 +18927,7 @@ PursuitOnSwitchout: createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 5, FALSE, 1, 6, 1, 0 goto PursuitContinue -Move_SPIKE_CANNON:: +gBattleAnimMove_SpikeCannon:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -17955,7 +18951,7 @@ Move_SPIKE_CANNON:: blendoff end -Move_SWORDS_DANCE:: +gBattleAnimMove_SwordsDance:: loadspritegfx ANIM_TAG_SWORD monbg ANIM_ATTACKER setalpha 12, 8 @@ -17970,7 +18966,7 @@ Move_SWORDS_DANCE:: delay 1 end -Move_PSYCH_UP:: +gBattleAnimMove_PsychUp:: loadspritegfx ANIM_TAG_SPIRAL monbg ANIM_ATK_PARTNER createvisualtask AnimTask_BlendColorCycleExclude, 2, 1, 2, 6, 1, 11, RGB_BLACK @@ -17989,7 +18985,7 @@ Move_PSYCH_UP:: waitforvisualfinish end -Move_DIZZY_PUNCH:: +gBattleAnimMove_DizzyPunch:: loadspritegfx ANIM_TAG_DUCK loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT @@ -18026,7 +19022,7 @@ DizzyPunchLunge: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 7, 1 return -Move_FIRE_SPIN:: +gBattleAnimMove_FireSpin:: loadspritegfx ANIM_TAG_SMALL_EMBER playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 47, 1 @@ -18051,7 +19047,7 @@ FireSpinEffect: delay 2 return -Move_FURY_CUTTER:: +gBattleAnimMove_FuryCutter:: loadspritegfx ANIM_TAG_CUT monbg ANIM_TARGET setalpha 12, 8 @@ -18089,7 +19085,7 @@ FuryCutterStrongest: createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 3, 3, RGB(9, 8, 10), 4, RGB_BLACK, 0 goto FuryCutterContinue2 -Move_SELF_DESTRUCT:: +gBattleAnimMove_SelfDestruct:: loadspritegfx ANIM_TAG_EXPLOSION createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 1, 0, 9, RGB_RED createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_LEFT, 6, 0, 38, 1 @@ -18120,7 +19116,7 @@ SelfDestructExplode: delay 6 return -Move_SLAM:: +gBattleAnimMove_Slam:: loadspritegfx ANIM_TAG_SLAM_HIT loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -18144,7 +19140,7 @@ Move_SLAM:: blendoff end -Move_VINE_WHIP:: +gBattleAnimMove_VineWhip:: loadspritegfx ANIM_TAG_WHIP_HIT playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 @@ -18155,7 +19151,7 @@ Move_VINE_WHIP:: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 6, 1 end -Move_DRILL_PECK:: +gBattleAnimMove_DrillPeck:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_WHIRLWIND_LINES createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0 @@ -18174,7 +19170,7 @@ Move_DRILL_PECK:: waitforvisualfinish end -Move_WATERFALL:: +gBattleAnimMove_Waterfall:: loadspritegfx ANIM_TAG_WATER_IMPACT loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -18259,7 +19255,7 @@ RisingWaterHitEffect: createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, -20 return -Move_EXPLOSION:: +gBattleAnimMove_Explosion:: loadspritegfx ANIM_TAG_EXPLOSION createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 8, 9, RGB(26, 8, 8), 8, RGB_BLACK, 8 createvisualtask AnimTask_ShakeMon2, 5, ANIM_PLAYER_LEFT, 8, 0, 40, 1 @@ -18292,7 +19288,7 @@ Explosion1: delay 6 return -Move_DEFENSE_CURL:: +gBattleAnimMove_DefenseCurl:: loadspritegfx ANIM_TAG_ECLIPSING_ORB loopsewithpan SE_M_TRI_ATTACK, SOUND_PAN_ATTACKER, 18, 3 createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, FALSE @@ -18304,7 +19300,7 @@ Move_DEFENSE_CURL:: waitforvisualfinish end -Move_PROTECT:: +gBattleAnimMove_Protect:: loadspritegfx ANIM_TAG_PROTECT monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER @@ -18314,7 +19310,7 @@ Move_PROTECT:: clearmonbg ANIM_ATK_PARTNER end -Move_DETECT:: +gBattleAnimMove_Detect:: loadspritegfx ANIM_TAG_SPARKLE_4 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 9, RGB_BLACK waitforvisualfinish @@ -18329,7 +19325,7 @@ Move_DETECT:: waitforvisualfinish end -Move_FRUSTRATION:: +gBattleAnimMove_Frustration:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ANGER monbg ANIM_DEF_PARTNER @@ -18434,7 +19430,7 @@ Frustration_Weak: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1 goto Frustration_Continue -Move_SAFEGUARD:: +gBattleAnimMove_Safeguard:: loadspritegfx ANIM_TAG_GUARD_RING monbg ANIM_ATK_PARTNER setalpha 8, 8 @@ -18452,7 +19448,7 @@ Move_SAFEGUARD:: blendoff end -Move_PAIN_SPLIT:: +gBattleAnimMove_PainSplit:: loadspritegfx ANIM_TAG_PAIN_SPLIT createsprite gPainSplitProjectileSpriteTemplate, ANIM_ATTACKER, 2, -8, -42, ANIM_ATTACKER createsprite gPainSplitProjectileSpriteTemplate, ANIM_TARGET, 2, -8, -42, ANIM_TARGET @@ -18476,7 +19472,7 @@ Move_PAIN_SPLIT:: createvisualtask AnimTask_PainSplitMovement, 2, ANIM_TARGET, 2 end -Move_VISE_GRIP:: +gBattleAnimMove_ViseGrip:: loadspritegfx ANIM_TAG_CUT loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -18492,7 +19488,7 @@ Move_VISE_GRIP:: blendoff end -Move_GUILLOTINE:: +gBattleAnimMove_Guillotine:: loadspritegfx ANIM_TAG_CUT loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -18517,7 +19513,7 @@ Move_GUILLOTINE:: waitbgfadein end -Move_PAY_DAY:: +gBattleAnimMove_PayDay:: loadspritegfx ANIM_TAG_COIN loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -18535,7 +19531,7 @@ Move_PAY_DAY:: blendoff end -Move_OUTRAGE:: +gBattleAnimMove_Outrage:: loadspritegfx ANIM_TAG_SMALL_EMBER loopsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER, 8, 3 createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_ATTACKER | F_PAL_TARGET), 2, 5, 3, 8, RGB(14, 13, 0) @@ -18580,7 +19576,7 @@ OutrageFlames: createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, -1280, -768, 3 return -Move_SPARK:: +gBattleAnimMove_Spark:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_SPARK_2 delay 0 @@ -18626,7 +19622,7 @@ Move_SPARK:: waitforvisualfinish end -Move_ATTRACT:: +gBattleAnimMove_Attract:: loadspritegfx ANIM_TAG_RED_HEART loopsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER, 12, 3 createvisualtask AnimTask_SwayMon, 5, 0, 12, 4096, 4, ANIM_ATTACKER @@ -18655,7 +19651,7 @@ Move_ATTRACT:: createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 10, RGB(31, 25, 27) end -Move_GROWTH:: +gBattleAnimMove_Growth:: call GrowthEffect waitforvisualfinish call GrowthEffect @@ -18667,7 +19663,7 @@ GrowthEffect: createvisualtask AnimTask_ScaleMonAndRestore, 5, -3, -3, 16, ANIM_ATTACKER, 0 return -Move_WHIRLWIND:: +gBattleAnimMove_Whirlwind:: loadspritegfx ANIM_TAG_WHIRLWIND_LINES createsprite gWhirlwindLineSpriteTemplate, ANIM_ATTACKER, 2, 0, -8, ANIM_TARGET, 60, 0 createsprite gWhirlwindLineSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, ANIM_TARGET, 60, 1 @@ -18686,7 +19682,7 @@ Move_WHIRLWIND:: waitforvisualfinish end -Move_CONFUSE_RAY:: +gBattleAnimMove_ConfuseRay:: loadspritegfx ANIM_TAG_YELLOW_BALL monbg ANIM_DEF_PARTNER fadetobg BG_GHOST @@ -18706,7 +19702,7 @@ Move_CONFUSE_RAY:: waitbgfadein end -Move_LOCK_ON:: +gBattleAnimMove_LockOn:: loadspritegfx ANIM_TAG_LOCK_ON createsprite gLockOnTargetSpriteTemplate, ANIM_ATTACKER, 40 createsprite gLockOnMoveTargetSpriteTemplate, ANIM_ATTACKER, 40, 1 @@ -18718,7 +19714,7 @@ Move_LOCK_ON:: waitforvisualfinish end -Move_MEAN_LOOK:: +gBattleAnimMove_MeanLook:: loadspritegfx ANIM_TAG_EYE monbg ANIM_DEF_PARTNER playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -18733,7 +19729,7 @@ Move_MEAN_LOOK:: waitforvisualfinish end -Move_ROCK_THROW:: +gBattleAnimMove_RockThrow:: loadspritegfx ANIM_TAG_ROCKS createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_TARGET, 2, 6, 1, 15, 1 createsprite gFallingRockSpriteTemplate, ANIM_TARGET, 2, 0, 1, 0, 0 @@ -18754,7 +19750,7 @@ Move_ROCK_THROW:: waitforvisualfinish end -Move_ROCK_SLIDE:: +gBattleAnimMove_RockSlide:: loadspritegfx ANIM_TAG_ROCKS monbg ANIM_DEF_PARTNER createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_ATTACKER, 2, 7, 1, 11, 1 @@ -18805,7 +19801,7 @@ RockSlideRocks: delay 2 return -Move_THIEF:: +gBattleAnimMove_Thief:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET delay 1 @@ -18825,7 +19821,7 @@ Move_THIEF:: waitbgfadein end -Move_BUBBLE_BEAM:: +gBattleAnimMove_BubbleBeam:: loadspritegfx ANIM_TAG_BUBBLE loadspritegfx ANIM_TAG_SMALL_BUBBLES monbg ANIM_TARGET @@ -18863,7 +19859,7 @@ BulbblebeamCreateBubbles: delay 3 return -Move_ICY_WIND:: +gBattleAnimMove_IcyWind:: loadspritegfx ANIM_TAG_ICE_CRYSTALS loadspritegfx ANIM_TAG_ICE_SPIKES monbg ANIM_DEF_PARTNER @@ -18899,7 +19895,7 @@ IcyWindSwirlingSnowballs: createsprite gSwirlingSnowballSpriteTemplate, ANIM_TARGET, 40, 0, -5, 0, -5, 72, 1 return -Move_SMOKESCREEN:: +gBattleAnimMove_Smokescreen:: loadspritegfx ANIM_TAG_BLACK_SMOKE loadspritegfx ANIM_TAG_BLACK_BALL playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER @@ -18923,7 +19919,7 @@ Move_SMOKESCREEN:: waitforvisualfinish end -Move_CONVERSION:: +gBattleAnimMove_Conversion:: loadspritegfx ANIM_TAG_CONVERSION monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER @@ -18975,7 +19971,7 @@ Move_CONVERSION:: blendoff end -Move_CONVERSION_2:: +gBattleAnimMove_Conversion2:: loadspritegfx ANIM_TAG_CONVERSION monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET @@ -19020,7 +20016,7 @@ Move_CONVERSION_2:: blendoff end -Move_ROLLING_KICK:: +gBattleAnimMove_RollingKick:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -19042,7 +20038,7 @@ Move_ROLLING_KICK:: blendoff end -Move_HEADBUTT:: +gBattleAnimMove_Headbutt:: loadspritegfx ANIM_TAG_IMPACT createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0 playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER @@ -19058,7 +20054,7 @@ Move_HEADBUTT:: waitforvisualfinish end -Move_HORN_ATTACK:: +gBattleAnimMove_HornAttack:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HORN_HIT createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0 @@ -19076,7 +20072,7 @@ Move_HORN_ATTACK:: waitforvisualfinish end -Move_FURY_ATTACK:: +gBattleAnimMove_FuryAttack:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HORN_HIT createvisualtask AnimTask_RotateMonSpriteToSide, 2, 4, 256, ANIM_ATTACKER, 2 @@ -19100,7 +20096,7 @@ FuryAttackLeft: playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET goto FuryAttackContinue -Move_HORN_DRILL:: +gBattleAnimMove_HornDrill:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HORN_HIT jumpifcontest HornDrillInContest @@ -19167,7 +20163,7 @@ HornDrillInContest: createvisualtask AnimTask_StartSlidingBg, 5, 2304, 768, 0, -1 goto HornDrillContinue -Move_THRASH:: +gBattleAnimMove_Thrash:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET createvisualtask AnimTask_ThrashMoveMonHorizontal, 2 @@ -19185,7 +20181,7 @@ Move_THRASH:: playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET end -Move_SING:: +gBattleAnimMove_Sing:: loadspritegfx ANIM_TAG_MUSIC_NOTES monbg ANIM_DEF_PARTNER createvisualtask AnimTask_MusicNotesRainbowBlend, 2 @@ -19221,7 +20217,7 @@ Move_SING:: waitforvisualfinish end -Move_LOW_KICK:: +gBattleAnimMove_LowKick:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4 @@ -19234,7 +20230,7 @@ Move_LOW_KICK:: createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4 end -Move_EARTHQUAKE:: +gBattleAnimMove_Earthquake:: createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_RIGHT, 10, 50 createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_LEFT, 10, 50 playsewithpan SE_M_EARTHQUAKE, 0 @@ -19244,7 +20240,7 @@ Move_EARTHQUAKE:: createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 end -Move_FISSURE:: +gBattleAnimMove_Fissure:: loadspritegfx ANIM_TAG_MUD_SAND createvisualtask AnimTask_HorizontalShake, 3, ANIM_PLAYER_RIGHT, 10, 50 createvisualtask AnimTask_HorizontalShake, 3, ANIM_TARGET, 10, 50 @@ -19287,7 +20283,7 @@ FissureDirtPlumeClose: playsewithpan SE_M_DIG, SOUND_PAN_TARGET return -Move_DIG:: +gBattleAnimMove_Dig:: choosetwoturnanim DigSetUp, DigUnleash DigEnd: end @@ -19335,7 +20331,7 @@ DigThrowDirt: delay 32 return -Move_MEDITATE:: +gBattleAnimMove_Meditate:: call SetPsychicBackground createvisualtask AnimTask_MeditateStretchAttacker, 2 playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER @@ -19345,7 +20341,7 @@ Move_MEDITATE:: call UnsetPsychicBg end -Move_AGILITY:: +gBattleAnimMove_Agility:: monbg ANIM_ATK_PARTNER setalpha 12, 8 createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 24, 6, 4, 4 @@ -19366,7 +20362,7 @@ Move_AGILITY:: delay 1 end -Move_QUICK_ATTACK:: +gBattleAnimMove_QuickAttack:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_ATK_PARTNER setalpha 12, 8 @@ -19383,7 +20379,7 @@ Move_QUICK_ATTACK:: waitforvisualfinish end -Move_RAGE:: +gBattleAnimMove_Rage:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ANGER monbg ANIM_TARGET @@ -19404,7 +20400,7 @@ Move_RAGE:: clearmonbg ANIM_TARGET end -Move_TELEPORT:: +gBattleAnimMove_Teleport:: call SetPsychicBackground createvisualtask AnimTask_Teleport, 2 playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER @@ -19439,12 +20435,12 @@ DoubleTeamAnimRet: delay 1 return -Move_DOUBLE_TEAM:: +gBattleAnimMove_DoubleTeam:: createvisualtask AnimTask_DoubleTeam, 2 call DoubleTeamAnimRet end -Move_MINIMIZE:: +gBattleAnimMove_Minimize:: setalpha 10, 8 createvisualtask AnimTask_Minimize, 2 loopsewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER, 34, 3 @@ -19452,7 +20448,7 @@ Move_MINIMIZE:: blendoff end -Move_METRONOME:: +gBattleAnimMove_Metronome:: loadspritegfx ANIM_TAG_FINGER loadspritegfx ANIM_TAG_THOUGHT_BUBBLE createsprite gThoughtBubbleSpriteTemplate, ANIM_ATTACKER, 11, 0, 100 @@ -19464,7 +20460,7 @@ Move_METRONOME:: waitforvisualfinish end -Move_SKULL_BASH:: +gBattleAnimMove_SkullBash:: choosetwoturnanim SkullBashSetUp, SkullBashAttack SkullBashEnd: end @@ -19497,7 +20493,7 @@ SkullBashAttack: createvisualtask AnimTask_SkullBashPosition, 2, 1 goto SkullBashEnd -Move_AMNESIA:: +gBattleAnimMove_Amnesia:: loadspritegfx ANIM_TAG_AMNESIA call SetPsychicBackground delay 8 @@ -19509,7 +20505,7 @@ Move_AMNESIA:: call UnsetPsychicBg end -Move_KINESIS:: +gBattleAnimMove_Kinesis:: loadspritegfx ANIM_TAG_ALERT loadspritegfx ANIM_TAG_BENT_SPOON playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -19528,7 +20524,7 @@ Move_KINESIS:: call UnsetPsychicBg end -Move_GLARE:: +gBattleAnimMove_Glare:: loadspritegfx ANIM_TAG_SMALL_RED_EYE loadspritegfx ANIM_TAG_EYE_SPARKLE createvisualtask AnimTask_GlareEyeDots, 5, 0 @@ -19546,7 +20542,7 @@ Move_GLARE:: createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_BG, 0, 16, 0, RGB_BLACK end -Move_BARRAGE:: +gBattleAnimMove_Barrage:: loadspritegfx ANIM_TAG_RED_BALL createvisualtask AnimTask_BarrageBall, 3 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER @@ -19557,7 +20553,7 @@ Move_BARRAGE:: loopsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET, 8, 2 end -Move_SKY_ATTACK:: +gBattleAnimMove_SkyAttack:: choosetwoturnanim SkyAttackSetUp, SkyAttackUnleash SkyAttackEnd: end @@ -19623,20 +20619,20 @@ SkyAttackUnleash: call UnsetSkyBg goto SkyAttackEnd -Move_FLASH:: +gBattleAnimMove_Flash:: playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER createvisualtask AnimTask_Flash, 2 waitforvisualfinish end -Move_SPLASH:: +gBattleAnimMove_Splash:: createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 3 delay 8 loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 38, 3 waitforvisualfinish end -Move_ACID_ARMOR:: +gBattleAnimMove_AcidArmor:: monbg ANIM_ATTACKER setalpha 15, 0 createvisualtask AnimTask_AcidArmor, 2, ANIM_ATTACKER @@ -19647,13 +20643,13 @@ Move_ACID_ARMOR:: delay 1 end -Move_SHARPEN:: +gBattleAnimMove_Sharpen:: loadspritegfx ANIM_TAG_SPHERE_TO_CUBE createsprite gSharpenSphereSpriteTemplate, ANIM_ATTACKER, 2 waitforvisualfinish end -Move_SUPER_FANG:: +gBattleAnimMove_SuperFang:: loadspritegfx ANIM_TAG_FANG_ATTACK createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 1, 0, 20, 1 playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER @@ -19673,7 +20669,7 @@ Move_SUPER_FANG:: blendoff end -Move_SLASH:: +gBattleAnimMove_Slash:: loadspritegfx ANIM_TAG_SLASH createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, 1, -8, 0 playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET @@ -19684,7 +20680,7 @@ Move_SLASH:: waitforvisualfinish end -Move_STRUGGLE:: +gBattleAnimMove_Struggle:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_MOVEMENT_WAVES monbg ANIM_TARGET @@ -19702,7 +20698,7 @@ Move_STRUGGLE:: blendoff end -Move_SKETCH:: +gBattleAnimMove_Sketch:: loadspritegfx ANIM_TAG_PENCIL monbg ANIM_TARGET createvisualtask AnimTask_SketchDrawMon, 2 @@ -19713,7 +20709,7 @@ Move_SKETCH:: loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 38, 2 end -Move_NIGHTMARE:: +gBattleAnimMove_Nightmare:: fadetobg BG_GHOST waitbgfadein jumpifcontest NightmareInContest @@ -19735,7 +20731,7 @@ NightmareInContest: waitbgfadein end -Move_FLAIL:: +gBattleAnimMove_Flail:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -19750,7 +20746,7 @@ Move_FLAIL:: blendoff end -Move_SPITE:: +gBattleAnimMove_Spite:: fadetobg BG_GHOST playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER waitbgfadein @@ -19784,7 +20780,7 @@ UnsetHighSpeedBg: waitbgfadein return -Move_MACH_PUNCH:: +gBattleAnimMove_MachPunch:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_ATK_PARTNER @@ -19804,7 +20800,7 @@ Move_MACH_PUNCH:: call UnsetHighSpeedBg end -Move_FORESIGHT:: +gBattleAnimMove_Foresight:: loadspritegfx ANIM_TAG_MAGNIFYING_GLASS monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -19823,7 +20819,7 @@ Move_FORESIGHT:: clearmonbg ANIM_DEF_PARTNER end -Move_DESTINY_BOND:: +gBattleAnimMove_DestinyBond:: loadspritegfx ANIM_TAG_WHITE_SHADOW fadetobg BG_GHOST playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -19843,7 +20839,7 @@ Move_DESTINY_BOND:: clearmonbg 5 end -Move_ENDURE:: +gBattleAnimMove_Endure:: loadspritegfx ANIM_TAG_FOCUS_ENERGY playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect @@ -19868,7 +20864,7 @@ EndureEffect: createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -12, 0, 1 return -Move_CHARM:: +gBattleAnimMove_Charm:: loadspritegfx ANIM_TAG_MAGENTA_HEART createvisualtask AnimTask_RockMonBackAndForth, 5, ANIM_ATTACKER, 2, 0 createsprite gMagentaHeartSpriteTemplate, ANIM_ATTACKER, 3, 0, 20 @@ -19882,7 +20878,7 @@ Move_CHARM:: waitforvisualfinish end -Move_ROLLOUT:: +gBattleAnimMove_Rollout:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_MUD_SAND loadspritegfx ANIM_TAG_ROCKS @@ -19899,7 +20895,7 @@ Move_ROLLOUT:: blendoff end -Move_FALSE_SWIPE:: +gBattleAnimMove_FalseSwipe:: loadspritegfx ANIM_TAG_SLASH_2 loadspritegfx ANIM_TAG_IMPACT createsprite gFalseSwipeSliceSpriteTemplate, ANIM_TARGET, 2 @@ -19926,7 +20922,7 @@ Move_FALSE_SWIPE:: playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET end -Move_SWAGGER:: +gBattleAnimMove_Swagger:: loadspritegfx ANIM_TAG_BREATH loadspritegfx ANIM_TAG_ANGER createvisualtask AnimTask_GrowAndShrink, 2 @@ -19944,7 +20940,7 @@ Move_SWAGGER:: waitforvisualfinish end -Move_MILK_DRINK:: +gBattleAnimMove_MilkDrink:: loadspritegfx ANIM_TAG_MILK_BOTTLE loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_BLUE_STAR @@ -19965,7 +20961,7 @@ Move_MILK_DRINK:: waitforvisualfinish end -Move_MAGNITUDE:: +gBattleAnimMove_Magnitude:: createvisualtask AnimTask_IsPowerOver99, 2 waitforvisualfinish jumpreteq FALSE, MagnitudeRegular @@ -19987,7 +20983,7 @@ MagnitudeIntense: createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14 goto MagnitudeEnd -Move_RAPID_SPIN:: +gBattleAnimMove_RapidSpin:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_RAPID_SPIN monbg ANIM_ATTACKER @@ -20006,7 +21002,7 @@ Move_RAPID_SPIN:: clearmonbg ANIM_ATTACKER end -Move_MOONLIGHT:: +gBattleAnimMove_Moonlight:: loadspritegfx ANIM_TAG_MOON loadspritegfx ANIM_TAG_GREEN_SPARKLE loadspritegfx ANIM_TAG_BLUE_STAR @@ -20033,7 +21029,7 @@ Move_MOONLIGHT:: waitforvisualfinish end -Move_EXTREME_SPEED:: +gBattleAnimMove_ExtremeSpeed:: loadspritegfx ANIM_TAG_SPEED_DUST loadspritegfx ANIM_TAG_IMPACT call SetHighSpeedBg @@ -20069,7 +21065,7 @@ Move_EXTREME_SPEED:: delay 1 end -Move_UPROAR:: +gBattleAnimMove_Uproar:: loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE loadspritegfx ANIM_TAG_THIN_RING monbg ANIM_DEF_PARTNER @@ -20094,7 +21090,7 @@ Move_UPROAR:: clearmonbg ANIM_DEF_PARTNER end -Move_HEAT_WAVE:: +gBattleAnimMove_HeatWave:: loadspritegfx ANIM_TAG_FLYING_DIRT createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_FLYING_DIRT, 0, 6, 6, RGB_RED createvisualtask AnimTask_LoadSandstormBackground, 5, TRUE @@ -20119,7 +21115,7 @@ Move_HEAT_WAVE:: end @ Also used by Hail weather -Move_HAIL:: +gBattleAnimMove_Hail:: loadspritegfx ANIM_TAG_HAIL loadspritegfx ANIM_TAG_ICE_CRYSTALS createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 0, 6, RGB_BLACK @@ -20130,7 +21126,7 @@ Move_HAIL:: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 6, 0, RGB_BLACK end -Move_TORMENT:: +gBattleAnimMove_Torment:: loadspritegfx ANIM_TAG_ANGER loadspritegfx ANIM_TAG_THOUGHT_BUBBLE createvisualtask AnimTask_TormentAttacker, 2 @@ -20143,7 +21139,7 @@ Move_TORMENT:: playsewithpan SE_M_SWAGGER2, SOUND_PAN_TARGET end -Move_MEMENTO:: +gBattleAnimMove_Memento:: setalpha 0, 16 delay 1 createvisualtask AnimTask_InitMementoShadow, 2 @@ -20167,14 +21163,14 @@ Move_MEMENTO:: delay 1 end -Move_FACADE:: +gBattleAnimMove_Facade:: loadspritegfx ANIM_TAG_SWEAT_DROP createvisualtask AnimTask_SquishAndSweatDroplets, 2, ANIM_ATTACKER, 3 createvisualtask AnimTask_FacadeColorBlend, 2, ANIM_ATTACKER, 72 loopsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER, 24, 3 end -Move_SMELLING_SALTS:: +gBattleAnimMove_SmellingSalts:: loadspritegfx ANIM_TAG_TAG_HAND loadspritegfx ANIM_TAG_SMELLINGSALT_EFFECT createsprite gSmellingSaltsHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0, 2 @@ -20189,7 +21185,7 @@ Move_SMELLING_SALTS:: loopsewithpan SE_M_SWAGGER2, SOUND_PAN_TARGET, 16, 3 end -Move_FOLLOW_ME:: +gBattleAnimMove_FollowMe:: loadspritegfx ANIM_TAG_FINGER createsprite gFollowMeFingerSpriteTemplate, ANIM_ATTACKER, 2, 0 playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER @@ -20199,7 +21195,7 @@ Move_FOLLOW_ME:: loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 22, 3 end -Move_CHARGE:: +gBattleAnimMove_Charge:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_ELECTRICITY @@ -20234,7 +21230,7 @@ Move_CHARGE:: blendoff end -Move_TAUNT:: +gBattleAnimMove_Taunt:: loadspritegfx ANIM_TAG_FINGER_2 loadspritegfx ANIM_TAG_THOUGHT_BUBBLE loadspritegfx ANIM_TAG_ANGER @@ -20254,7 +21250,7 @@ Move_TAUNT:: playsewithpan SE_M_SWAGGER2, SOUND_PAN_TARGET end -Move_HELPING_HAND:: +gBattleAnimMove_HelpingHand:: loadspritegfx ANIM_TAG_TAG_HAND createvisualtask AnimTask_HelpingHandAttackerMovement, 5 createsprite gHelpingHandClapSpriteTemplate, ANIM_ATTACKER, 40, 0 @@ -20271,7 +21267,7 @@ Move_HELPING_HAND:: createvisualtask AnimTask_BlendMonInAndOut, 2, ANIM_ATK_PARTNER, RGB_YELLOW, 12, 1, 1 end -Move_ASSIST:: +gBattleAnimMove_Assist:: loadspritegfx ANIM_TAG_PAW_PRINT createsprite gAssistPawprintSpriteTemplate, ANIM_ATTACKER, 50, 112, -16, 140, 128, 36 delay 2 @@ -20288,7 +21284,7 @@ Move_ASSIST:: playsewithpan SE_M_SCRATCH, 0 end -Move_SUPERPOWER:: +gBattleAnimMove_Superpower:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_METEOR loadspritegfx ANIM_TAG_FLAT_ROCK @@ -20322,7 +21318,7 @@ Move_SUPERPOWER:: delay 1 end -Move_RECYCLE:: +gBattleAnimMove_Recycle:: loadspritegfx ANIM_TAG_RECYCLE monbg ANIM_ATTACKER setalpha 0, 16 @@ -20338,7 +21334,7 @@ Move_RECYCLE:: delay 1 end -Move_BRICK_BREAK:: +gBattleAnimMove_BrickBreak:: loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -20402,7 +21398,7 @@ BrickBreakShatteredWall: clearmonbg ANIM_TARGET end -Move_YAWN:: +gBattleAnimMove_Yawn:: loadspritegfx ANIM_TAG_PINK_CLOUD createvisualtask AnimTask_DeepInhale, 2, ANIM_ATTACKER playsewithpan SE_M_YAWN, SOUND_PAN_ATTACKER @@ -20418,7 +21414,7 @@ Move_YAWN:: playsewithpan SE_M_YAWN, SOUND_PAN_TARGET end -Move_ENDEAVOR:: +gBattleAnimMove_Endeavor:: loadspritegfx ANIM_TAG_SWEAT_DROP loadspritegfx ANIM_TAG_IMPACT createvisualtask AnimTask_SquishAndSweatDroplets, 2, ANIM_ATTACKER, 2 @@ -20434,7 +21430,7 @@ Move_ENDEAVOR:: playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET end -Move_ERUPTION:: +gBattleAnimMove_Eruption:: loadspritegfx ANIM_TAG_WARM_ROCK createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 2, 0, 4, RGB_RED waitforvisualfinish @@ -20459,7 +21455,7 @@ Move_ERUPTION:: createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 40, F_PAL_BG | F_PAL_BATTLERS, 4, 4, 0, RGB_RED end -Move_SKILL_SWAP:: +gBattleAnimMove_SkillSwap:: loadspritegfx ANIM_TAG_BLUEGREEN_ORB call SetPsychicBackground createvisualtask AnimTask_SkillSwap, 3, ANIM_TARGET @@ -20472,7 +21468,7 @@ Move_SKILL_SWAP:: call UnsetPsychicBg end -Move_IMPRISON:: +gBattleAnimMove_Imprison:: loadspritegfx ANIM_TAG_HOLLOW_ORB loadspritegfx ANIM_TAG_X_SIGN call SetPsychicBackground @@ -20489,7 +21485,7 @@ Move_IMPRISON:: call UnsetPsychicBg end -Move_GRUDGE:: +gBattleAnimMove_Grudge:: loadspritegfx ANIM_TAG_PURPLE_FLAME monbg ANIM_ATTACKER splitbgprio_all @@ -20507,7 +21503,7 @@ Move_GRUDGE:: clearmonbg ANIM_ATTACKER end -Move_CAMOUFLAGE:: +gBattleAnimMove_Camouflage:: monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER setalpha 16, 0 @@ -20525,7 +21521,7 @@ Move_CAMOUFLAGE:: clearmonbg ANIM_ATK_PARTNER end -Move_TAIL_GLOW:: +gBattleAnimMove_TailGlow:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT monbg ANIM_ATTACKER setalpha 12, 8 @@ -20541,7 +21537,7 @@ Move_TAIL_GLOW:: delay 1 end -Move_LUSTER_PURGE:: +gBattleAnimMove_LusterPurge:: loadspritegfx ANIM_TAG_WHITE_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_IMPACT fadetobg BG_PSYCHIC @@ -20584,7 +21580,7 @@ Move_LUSTER_PURGE:: call UnsetPsychicBg end -Move_MIST_BALL:: +gBattleAnimMove_MistBall:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_WHITE_FEATHER delay 0 @@ -20604,7 +21600,7 @@ Move_MIST_BALL:: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 16, 0, RGB_WHITE end -Move_FEATHER_DANCE:: +gBattleAnimMove_FeatherDance:: loadspritegfx ANIM_TAG_WHITE_FEATHER monbg ANIM_DEF_PARTNER splitbgprio_all @@ -20626,7 +21622,7 @@ Move_FEATHER_DANCE:: clearmonbg ANIM_DEF_PARTNER end -Move_TEETER_DANCE:: +gBattleAnimMove_TeeterDance:: loadspritegfx ANIM_TAG_MUSIC_NOTES loadspritegfx ANIM_TAG_DUCK createvisualtask AnimTask_TeeterDanceMovement, 5 @@ -20646,7 +21642,7 @@ Move_TEETER_DANCE:: playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER end -Move_MUD_SPORT:: +gBattleAnimMove_MudSport:: loadspritegfx ANIM_TAG_MUD_SAND createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 6 delay 24 @@ -20693,7 +21689,7 @@ Move_MUD_SPORT:: waitplaysewithpan SE_M_BUBBLE2, 0, 10 end -Move_NEEDLE_ARM:: +gBattleAnimMove_NeedleArm:: loadspritegfx ANIM_TAG_GREEN_SPIKE loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -20736,7 +21732,7 @@ Move_NEEDLE_ARM:: createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 1, 1, -17, -17, 10 end -Move_SLACK_OFF:: +gBattleAnimMove_SlackOff:: loadspritegfx ANIM_TAG_BLUE_STAR createvisualtask AnimTask_SlackOffSquish, 2, ANIM_ATTACKER playsewithpan SE_M_YAWN, SOUND_PAN_ATTACKER @@ -20745,7 +21741,7 @@ Move_SLACK_OFF:: waitforvisualfinish end -Move_CRUSH_CLAW:: +gBattleAnimMove_CrushClaw:: loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL loadspritegfx ANIM_TAG_CLAW_SLASH loadspritegfx ANIM_TAG_TORN_METAL @@ -20766,7 +21762,7 @@ Move_CRUSH_CLAW:: clearmonbg ANIM_TARGET end -Move_AROMATHERAPY:: +gBattleAnimMove_Aromatherapy:: playsewithpan SE_M_PETAL_DANCE, 0 loadspritegfx ANIM_TAG_FLOWER loadspritegfx ANIM_TAG_THIN_RING @@ -20805,7 +21801,7 @@ Move_AROMATHERAPY:: waitforvisualfinish end -Move_FAKE_TEARS:: +gBattleAnimMove_FakeTears:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_THOUGHT_BUBBLE loadspritegfx ANIM_TAG_MUSIC_NOTES @@ -20828,7 +21824,7 @@ Move_FAKE_TEARS:: waitforvisualfinish end -Move_AIR_CUTTER:: +gBattleAnimMove_AirCutter:: loadspritegfx ANIM_TAG_AIR_WAVE loadspritegfx ANIM_TAG_CUT loadspritegfx ANIM_TAG_IMPACT @@ -20849,7 +21845,7 @@ Move_AIR_CUTTER:: delay 0 end -Move_ODOR_SLEUTH:: +gBattleAnimMove_OdorSleuth:: monbg ANIM_TARGET createvisualtask AnimTask_OdorSleuthMovement, 5 delay 24 @@ -20865,7 +21861,7 @@ Move_ODOR_SLEUTH:: playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER end -Move_GRASS_WHISTLE:: +gBattleAnimMove_GrassWhistle:: loadspritegfx ANIM_TAG_MUSIC_NOTES createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 4, RGB(18, 31, 12) waitforvisualfinish @@ -20902,7 +21898,7 @@ Move_GRASS_WHISTLE:: waitforvisualfinish end -Move_TICKLE:: +gBattleAnimMove_Tickle:: loadspritegfx ANIM_TAG_EYE_SPARKLE createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 0, 0, 16, RGB_BLACK waitforvisualfinish @@ -20920,7 +21916,7 @@ Move_TICKLE:: waitforvisualfinish end -Move_WATER_SPOUT:: +gBattleAnimMove_WaterSpout:: loadspritegfx ANIM_TAG_GLOWY_BLUE_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -20937,7 +21933,7 @@ Move_WATER_SPOUT:: blendoff end -Move_SHADOW_PUNCH:: +gBattleAnimMove_ShadowPunch:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET fadetobg BG_GHOST @@ -20958,7 +21954,7 @@ Move_SHADOW_PUNCH:: waitbgfadein end -Move_EXTRASENSORY:: +gBattleAnimMove_Extrasensory:: call SetPsychicBackground monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -20979,7 +21975,7 @@ Move_EXTRASENSORY:: call UnsetPsychicBg end -Move_AERIAL_ACE:: +gBattleAnimMove_AerialAce:: loadspritegfx ANIM_TAG_CUT monbg ANIM_TARGET setalpha 12, 8 @@ -20996,20 +21992,20 @@ Move_AERIAL_ACE:: blendoff end -Move_IRON_DEFENSE:: +gBattleAnimMove_IronDefense:: loopsewithpan SE_SHINY, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 8, 2, RGB_WHITEALPHA, 14, RGB_WHITEALPHA, 0 waitforvisualfinish end -Move_BLOCK:: +gBattleAnimMove_Block:: loadspritegfx ANIM_TAG_X_SIGN createsprite gBlockXSpriteTemplate, ANIM_TARGET, 66 playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET end -Move_HOWL:: +gBattleAnimMove_Howl:: loadspritegfx ANIM_TAG_NOISE_LINE createvisualtask AnimTask_DeepInhale, 2, ANIM_ATTACKER delay 12 @@ -21019,7 +22015,7 @@ Move_HOWL:: delay 30 end -Move_BULK_UP:: +gBattleAnimMove_BulkUp:: loadspritegfx ANIM_TAG_BREATH createvisualtask AnimTask_GrowAndShrink, 2 playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER @@ -21029,7 +22025,7 @@ Move_BULK_UP:: waitforvisualfinish end -Move_COVET:: +gBattleAnimMove_Covet:: loadspritegfx ANIM_TAG_MAGENTA_HEART loadspritegfx ANIM_TAG_ITEM_BAG createvisualtask AnimTask_RockMonBackAndForth, 5, ANIM_ATTACKER, 2, 0 @@ -21046,7 +22042,7 @@ Move_COVET:: loopsewithpan SE_M_DIZZY_PUNCH, SOUND_PAN_TARGET, 4, 3 end -Move_VOLT_TACKLE:: +gBattleAnimMove_VoltTackle:: loadspritegfx ANIM_TAG_SPARK loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_ELECTRICITY @@ -21093,7 +22089,7 @@ Move_VOLT_TACKLE:: waitforvisualfinish end -Move_WATER_SPORT:: +gBattleAnimMove_WaterSport:: loadspritegfx ANIM_TAG_GLOWY_BLUE_ORB createvisualtask AnimTask_WaterSport, 5 delay 8 @@ -21106,7 +22102,7 @@ Move_WATER_SPORT:: panse SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 end -Move_CALM_MIND:: +gBattleAnimMove_CalmMind:: loadspritegfx ANIM_TAG_THIN_RING monbg ANIM_ATK_PARTNER createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, ANIM_ATTACKER, 0, 0, 16, RGB_BLACK @@ -21129,7 +22125,7 @@ Move_CALM_MIND:: clearmonbg ANIM_ATK_PARTNER end -Move_LEAF_BLADE:: +gBattleAnimMove_LeafBlade:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_CROSS_IMPACT createvisualtask AnimTask_LeafBlade, 5 @@ -21154,7 +22150,7 @@ Move_LEAF_BLADE:: blendoff end -Move_DRAGON_DANCE:: +gBattleAnimMove_DragonDance:: loadspritegfx ANIM_TAG_HOLLOW_ORB monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER @@ -21178,7 +22174,7 @@ Move_DRAGON_DANCE:: delay 1 end -Move_SHOCK_WAVE:: +gBattleAnimMove_ShockWave:: loadspritegfx ANIM_TAG_ELECTRIC_ORBS loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_SPARK @@ -21208,13 +22204,13 @@ Move_SHOCK_WAVE:: blendoff end -Move_HARDEN:: +gBattleAnimMove_Harden:: loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK waitforvisualfinish end -Move_BELLY_DRUM:: +gBattleAnimMove_BellyDrum:: loadspritegfx ANIM_TAG_MUSIC_NOTES loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE createvisualtask AnimTask_MusicNotesRainbowBlend, 2 @@ -21257,7 +22253,7 @@ BellyDrumRight: createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 8, 2, 1 return -Move_MIND_READER:: +gBattleAnimMove_MindReader:: loadspritegfx ANIM_TAG_TEAL_ALERT loadspritegfx ANIM_TAG_OPENING_EYE loadspritegfx ANIM_TAG_ROUND_WHITE_HALO @@ -21297,7 +22293,7 @@ MindReaderEyeSpikeEffect: delay 2 return -Move_ICE_PUNCH:: +gBattleAnimMove_IcePunch:: monbg ANIM_DEF_PARTNER setalpha 12, 8 loadspritegfx ANIM_TAG_ICE_CRYSTALS @@ -21334,7 +22330,7 @@ Move_ICE_PUNCH:: blendoff end -Move_REST:: +gBattleAnimMove_Rest:: playsewithpan SE_M_SNORE, SOUND_PAN_ATTACKER loadspritegfx ANIM_TAG_LETTER_Z createsprite gSleepLetterZSpriteTemplate, ANIM_ATTACKER, 2, 4, -10, 16, 0, 0 @@ -21345,7 +22341,7 @@ Move_REST:: waitforvisualfinish end -Move_CONFUSION:: +gBattleAnimMove_Confusion:: monbg ANIM_DEF_PARTNER call SetPsychicBackground setalpha 8, 8 @@ -21362,7 +22358,7 @@ Move_CONFUSION:: call UnsetPsychicBg end -Move_PSYCHIC:: +gBattleAnimMove_Psychic:: monbg ANIM_DEF_PARTNER call SetPsychicBackground setalpha 8, 8 @@ -21379,7 +22375,7 @@ Move_PSYCHIC:: call UnsetPsychicBg end -Move_FUTURE_SIGHT:: +gBattleAnimMove_FutureSight:: goto FutureSight FutureSightContinue: waitforvisualfinish @@ -21399,7 +22395,7 @@ FutureSight: blendoff goto FutureSightContinue -Move_THUNDER:: +gBattleAnimMove_Thunder:: loadspritegfx ANIM_TAG_LIGHTNING fadetobg BG_THUNDER waitbgfadeout @@ -21457,7 +22453,7 @@ Move_THUNDER:: waitbgfadein end -Move_THUNDER_PUNCH:: +gBattleAnimMove_ThunderPunch:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_LIGHTNING @@ -21490,7 +22486,7 @@ Move_THUNDER_PUNCH:: blendoff end -Move_SACRED_FIRE:: +gBattleAnimMove_SacredFire:: loadspritegfx ANIM_TAG_FIRE loadspritegfx ANIM_TAG_FIRE_PLUME loopsewithpan SE_M_SACRED_FIRE, SOUND_PAN_ATTACKER, 7, 5 @@ -21547,7 +22543,7 @@ Move_SACRED_FIRE:: waitforvisualfinish end -Move_SCRATCH:: +gBattleAnimMove_Scratch:: loadspritegfx ANIM_TAG_SCRATCH monbg ANIM_TARGET setalpha 12, 8 @@ -21560,7 +22556,7 @@ Move_SCRATCH:: waitforvisualfinish end -Move_DRAGON_BREATH:: +gBattleAnimMove_DragonBreath:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -21594,7 +22590,7 @@ Move_DRAGON_BREATH:: clearmonbg ANIM_DEF_PARTNER end -Move_ROAR:: +gBattleAnimMove_Roar:: loadspritegfx ANIM_TAG_NOISE_LINE monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER @@ -21622,7 +22618,7 @@ RoarEffect: createsprite gRoarNoiseLineSpriteTemplate, ANIM_ATTACKER, 2, 24, 8, 1 return -Move_GROWL:: +gBattleAnimMove_Growl:: loadspritegfx ANIM_TAG_NOISE_LINE createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, DOUBLE_CRY_GROWL call RoarEffect @@ -21634,7 +22630,7 @@ Move_GROWL:: waitforvisualfinish end -Move_SNORE:: +gBattleAnimMove_Snore:: loadspritegfx ANIM_TAG_SNORE_Z monbg ANIM_ATK_PARTNER setalpha 8, 8 @@ -21655,7 +22651,7 @@ SnoreEffect: createsprite gSnoreZSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 42, -38, 24, 0, 0 return -Move_LIGHT_SCREEN:: +gBattleAnimMove_LightScreen:: loadspritegfx ANIM_TAG_SPARKLE_3 loadspritegfx ANIM_TAG_GREEN_LIGHT_WALL setalpha 0, 16 @@ -21682,7 +22678,7 @@ SpecialScreenSparkle: createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 10, 18, ANIM_ATTACKER, TRUE return -Move_MIRROR_COAT:: +gBattleAnimMove_MirrorCoat:: loadspritegfx ANIM_TAG_SPARKLE_3 loadspritegfx ANIM_TAG_RED_LIGHT_WALL setalpha 0, 16 @@ -21695,7 +22691,7 @@ Move_MIRROR_COAT:: blendoff end -Move_REFLECT:: +gBattleAnimMove_Reflect:: loadspritegfx ANIM_TAG_SPARKLE_4 loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL setalpha 0, 16 @@ -21712,7 +22708,7 @@ Move_REFLECT:: blendoff end -Move_BARRIER:: +gBattleAnimMove_Barrier:: loadspritegfx ANIM_TAG_GRAY_LIGHT_WALL setalpha 0, 16 waitplaysewithpan SE_M_BARRIER, SOUND_PAN_ATTACKER, 15 @@ -21722,7 +22718,7 @@ Move_BARRIER:: blendoff end -Move_BUBBLE:: +gBattleAnimMove_Bubble:: loadspritegfx ANIM_TAG_BUBBLE loadspritegfx ANIM_TAG_SMALL_BUBBLES monbg ANIM_TARGET @@ -21758,7 +22754,7 @@ Move_BUBBLE:: blendoff end -Move_SMOG:: +gBattleAnimMove_Smog:: loadspritegfx ANIM_TAG_PURPLE_GAS_CLOUD monbg ANIM_DEF_PARTNER splitbgprio_all @@ -21785,7 +22781,7 @@ SmogCloud: delay 7 return -Move_FEINT_ATTACK:: +gBattleAnimMove_FeintAttack:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_ATTACKER fadetobg BG_DARK @@ -21821,7 +22817,7 @@ Move_FEINT_ATTACK:: waitbgfadein end -Move_SAND_ATTACK:: +gBattleAnimMove_SandAttack:: loadspritegfx ANIM_TAG_MUD_SAND monbg ANIM_ATK_PARTNER splitbgprio ANIM_ATTACKER @@ -21849,7 +22845,7 @@ SandAttackDirt: delay 2 return -Move_MUD_SLAP:: +gBattleAnimMove_MudSlap:: loadspritegfx ANIM_TAG_MUD_SAND playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_ATTACKER createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, -10, 0, 0, 3 @@ -21872,7 +22868,7 @@ MudSlapMud: delay 2 return -Move_DRAGON_RAGE:: +gBattleAnimMove_DragonRage:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_FIRE_PLUME playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER @@ -21904,7 +22900,7 @@ Move_DRAGON_RAGE:: waitforvisualfinish end -Move_RAIN_DANCE:: +gBattleAnimMove_RainDance:: loadspritegfx ANIM_TAG_RAIN_DROPS playsewithpan SE_M_RAIN_DANCE, SOUND_PAN_ATTACKER createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 0, 4, RGB_BLACK @@ -21918,7 +22914,7 @@ Move_RAIN_DANCE:: waitforvisualfinish end -Move_BITE:: +gBattleAnimMove_Bite:: loadspritegfx ANIM_TAG_SHARP_TEETH loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -21935,7 +22931,7 @@ Move_BITE:: delay 1 end -Move_CRUNCH:: +gBattleAnimMove_Crunch:: loadspritegfx ANIM_TAG_SHARP_TEETH loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -21963,7 +22959,7 @@ Move_CRUNCH:: waitbgfadein end -Move_CLAMP:: +gBattleAnimMove_Clamp:: loadspritegfx ANIM_TAG_CLAMP loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -21980,7 +22976,7 @@ Move_CLAMP:: waitforvisualfinish end -Move_ICE_BEAM:: +gBattleAnimMove_IceBeam:: monbg ANIM_TARGET splitbgprio ANIM_TARGET setalpha 12, 8 @@ -22024,13 +23020,13 @@ IceBeamCreateCrystals: delay 1 return -Move_WITHDRAW:: +gBattleAnimMove_Withdraw:: playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER createvisualtask AnimTask_Withdraw, 5 waitforvisualfinish end -Move_AURORA_BEAM:: +gBattleAnimMove_AuroraBeam:: loadspritegfx ANIM_TAG_RAINBOW_RINGS fadetobg BG_AURORA waitbgfadein @@ -22066,7 +23062,7 @@ AuroraBeamCreateRings: delay 1 return -Move_SOLAR_BEAM:: +gBattleAnimMove_SolarBeam:: loadspritegfx ANIM_TAG_ORBS choosetwoturnanim SolarBeamSetUp, SolarBeamUnleash SolarBeamEnd: @@ -22155,7 +23151,7 @@ SolarBeamUnleash1: delay 4 return -Move_BLIZZARD:: +gBattleAnimMove_Blizzard:: loadspritegfx ANIM_TAG_ICE_CRYSTALS monbg ANIM_DEF_PARTNER call SetHighSpeedBg @@ -22195,7 +23191,7 @@ BlizzardIceCrystals: delay 3 return -Move_POWDER_SNOW:: +gBattleAnimMove_PowderSnow:: loadspritegfx ANIM_TAG_ICE_CRYSTALS monbg ANIM_DEF_PARTNER createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 1, 0, 3, RGB_BLACK @@ -22229,7 +23225,7 @@ PowderSnowSnowballs: delay 3 return -Move_HYDRO_PUMP:: +gBattleAnimMove_HydroPump:: loadspritegfx ANIM_TAG_WATER_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -22276,7 +23272,7 @@ HydroPumpHitSplats: createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, -15, ANIM_TARGET, 1 return -Move_SIGNAL_BEAM:: +gBattleAnimMove_SignalBeam:: loadspritegfx ANIM_TAG_GLOWY_RED_ORB loadspritegfx ANIM_TAG_GLOWY_GREEN_ORB loadspritegfx ANIM_TAG_DUCK @@ -22317,7 +23313,7 @@ SignalBeamOrbs: delay 1 return -Move_ABSORB:: +gBattleAnimMove_Absorb:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_IMPACT @@ -22370,7 +23366,7 @@ AbsorbEffect: delay 4 return -Move_MEGA_DRAIN:: +gBattleAnimMove_MegaDrain:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_IMPACT @@ -22431,7 +23427,7 @@ MegaDrainAbsorbEffect: delay 4 return -Move_GIGA_DRAIN:: +gBattleAnimMove_GigaDrain:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR loadspritegfx ANIM_TAG_IMPACT @@ -22500,7 +23496,7 @@ GigaDrainAbsorbEffect: delay 4 return -Move_LEECH_LIFE:: +gBattleAnimMove_LeechLife:: loadspritegfx ANIM_TAG_NEEDLE loadspritegfx ANIM_TAG_ORBS delay 1 @@ -22530,7 +23526,7 @@ Move_LEECH_LIFE:: blendoff end -Move_SYNTHESIS:: +gBattleAnimMove_Synthesis:: loadspritegfx ANIM_TAG_SPARKLE_2 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 16, RGB(27, 31, 18) playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER @@ -22543,7 +23539,7 @@ Move_SYNTHESIS:: waitforvisualfinish end -Move_TOXIC:: +gBattleAnimMove_Toxic:: loadspritegfx ANIM_TAG_TOXIC_BUBBLE loadspritegfx ANIM_TAG_POISON_BUBBLE call ToxicBubbles @@ -22568,7 +23564,7 @@ ToxicBubbles: delay 15 return -Move_SLUDGE:: +gBattleAnimMove_Sludge:: loadspritegfx ANIM_TAG_POISON_BUBBLE playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER createsprite gSludgeProjectileSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 0 @@ -22579,7 +23575,7 @@ Move_SLUDGE:: waitforvisualfinish end -Move_SLUDGE_BOMB:: +gBattleAnimMove_SludgeBomb:: loadspritegfx ANIM_TAG_POISON_BUBBLE call SludgeBombProjectile call SludgeBombProjectile @@ -22622,7 +23618,7 @@ SludgeBombProjectile: delay 3 return -Move_ACID:: +gBattleAnimMove_Acid:: loadspritegfx ANIM_TAG_POISON_BUBBLE monbg ANIM_DEF_PARTNER createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, 0, 0, TRUE @@ -22655,7 +23651,7 @@ Move_ACID:: clearmonbg ANIM_DEF_PARTNER end -Move_BONEMERANG:: +gBattleAnimMove_Bonemerang:: loadspritegfx ANIM_TAG_BONE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -22675,7 +23671,7 @@ Move_BONEMERANG:: blendoff end -Move_BONE_CLUB:: +gBattleAnimMove_BoneClub:: loadspritegfx ANIM_TAG_BONE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -22693,7 +23689,7 @@ Move_BONE_CLUB:: blendoff end -Move_BONE_RUSH:: +gBattleAnimMove_BoneRush:: loadspritegfx ANIM_TAG_BONE loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -22709,7 +23705,7 @@ Move_BONE_RUSH:: blendoff end -Move_SPIKES:: +gBattleAnimMove_Spikes:: loadspritegfx ANIM_TAG_SPIKES monbg ANIM_DEF_PARTNER playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER @@ -22726,7 +23722,7 @@ Move_SPIKES:: clearmonbg ANIM_DEF_PARTNER end -Move_MEGAHORN:: +gBattleAnimMove_Megahorn:: loadspritegfx ANIM_TAG_HORN_HIT_2 loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -22769,7 +23765,7 @@ MegahornInContest: createvisualtask AnimTask_StartSlidingBg, 5, 2304, 768, 0, -1 goto MegahornContinue -Move_GUST:: +gBattleAnimMove_Gust:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -22787,7 +23783,7 @@ Move_GUST:: blendoff end -Move_WING_ATTACK:: +gBattleAnimMove_WingAttack:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -22811,7 +23807,7 @@ Move_WING_ATTACK:: blendoff end -Move_PECK:: +gBattleAnimMove_Peck:: loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET createvisualtask AnimTask_RotateMonToSideAndRestore, 2, 3, -768, ANIM_TARGET, 2 @@ -22819,7 +23815,7 @@ Move_PECK:: waitforvisualfinish end -Move_AEROBLAST:: +gBattleAnimMove_Aeroblast:: loadspritegfx ANIM_TAG_AIR_WAVE_2 loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -22860,7 +23856,7 @@ AeroblastBeam: delay 3 return -Move_WATER_GUN:: +gBattleAnimMove_WaterGun:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -22884,7 +23880,7 @@ Move_WATER_GUN:: blendoff end -Move_CRABHAMMER:: +gBattleAnimMove_Crabhammer:: loadspritegfx ANIM_TAG_ICE_CRYSTALS loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -22921,14 +23917,14 @@ Move_CRABHAMMER:: blendoff end -Move_SURF:: +gBattleAnimMove_Surf:: createvisualtask AnimTask_CreateSurfWave, 2, ANIM_SURF_PAL_SURF delay 24 panse SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 waitforvisualfinish end -Move_FLAMETHROWER:: +gBattleAnimMove_Flamethrower:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -22962,7 +23958,7 @@ FlamethrowerCreateFlames: return @ Also used by Sandstorm weather -Move_SANDSTORM:: +gBattleAnimMove_Sandstorm:: loadspritegfx ANIM_TAG_FLYING_DIRT playsewithpan SE_M_SANDSTORM, 0 createvisualtask AnimTask_LoadSandstormBackground, 5, FALSE @@ -22982,7 +23978,7 @@ Move_SANDSTORM:: createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 60, 2560, 96, 0 end -Move_WHIRLPOOL:: +gBattleAnimMove_Whirlpool:: loadspritegfx ANIM_TAG_WATER_ORB monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -23015,7 +24011,7 @@ WhirlpoolEffect: delay 2 return -Move_FLY:: +gBattleAnimMove_Fly:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT choosetwoturnanim FlySetUp, FlyUnleash @@ -23042,7 +24038,7 @@ FlyUnleash: blendoff goto FlyEnd -Move_BOUNCE:: +gBattleAnimMove_Bounce:: loadspritegfx ANIM_TAG_ROUND_SHADOW loadspritegfx ANIM_TAG_IMPACT choosetwoturnanim BounceSetUp, BounceUnleash @@ -23068,7 +24064,7 @@ BounceUnleash: blendoff goto BounceEnd -Move_KARATE_CHOP:: +gBattleAnimMove_KarateChop:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23085,7 +24081,7 @@ Move_KARATE_CHOP:: blendoff end -Move_CROSS_CHOP:: +gBattleAnimMove_CrossChop:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_CROSS_IMPACT monbg ANIM_DEF_PARTNER @@ -23103,7 +24099,7 @@ Move_CROSS_CHOP:: blendoff end -Move_JUMP_KICK:: +gBattleAnimMove_JumpKick:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23121,7 +24117,7 @@ Move_JUMP_KICK:: blendoff end -Move_HIGH_JUMP_KICK:: +gBattleAnimMove_HighJumpKick:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23147,7 +24143,7 @@ Move_HIGH_JUMP_KICK:: blendoff end -Move_DOUBLE_KICK:: +gBattleAnimMove_DoubleKick:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23160,7 +24156,7 @@ Move_DOUBLE_KICK:: blendoff end -Move_TRIPLE_KICK:: +gBattleAnimMove_TripleKick:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23193,7 +24189,7 @@ TripleKickCenter: createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1 goto TripleKickContinue -Move_DYNAMIC_PUNCH:: +gBattleAnimMove_DynamicPunch:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_EXPLOSION @@ -23227,7 +24223,7 @@ Move_DYNAMIC_PUNCH:: blendoff end -Move_COUNTER:: +gBattleAnimMove_Counter:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET monbg ANIM_DEF_PARTNER @@ -23259,7 +24255,7 @@ Move_COUNTER:: blendoff end -Move_VITAL_THROW:: +gBattleAnimMove_VitalThrow:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -23282,7 +24278,7 @@ Move_VITAL_THROW:: blendoff end -Move_ROCK_SMASH:: +gBattleAnimMove_RockSmash:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -23309,7 +24305,7 @@ Move_ROCK_SMASH:: blendoff end -Move_SUBMISSION:: +gBattleAnimMove_Submission:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -23343,7 +24339,7 @@ SubmissionHit: return @ Also used by Sunny weather -Move_SUNNY_DAY:: +gBattleAnimMove_SunnyDay:: loadspritegfx ANIM_TAG_SUNLIGHT monbg ANIM_ATK_PARTNER setalpha 13, 3 @@ -23366,7 +24362,7 @@ SunnyDayLightRay: delay 6 return -Move_COTTON_SPORE:: +gBattleAnimMove_CottonSpore:: loadspritegfx ANIM_TAG_SPORE monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -23387,7 +24383,7 @@ CreateCottonSpores: delay 12 return -Move_SPORE:: +gBattleAnimMove_Spore:: loadspritegfx ANIM_TAG_SPORE monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -23411,7 +24407,7 @@ CreateSpore: delay 12 return -Move_PETAL_DANCE:: +gBattleAnimMove_PetalDance:: loadspritegfx ANIM_TAG_FLOWER loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23449,7 +24445,7 @@ Move_PETAL_DANCE:: blendoff end -Move_RAZOR_LEAF:: +gBattleAnimMove_RazorLeaf:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_RAZOR_LEAF loadspritegfx ANIM_TAG_IMPACT @@ -23489,10 +24485,10 @@ Move_RAZOR_LEAF:: blendoff end -Move_NATURE_POWER:: +gBattleAnimMove_NaturePower:: @ No actual animation, uses the animation of a move from sNaturePowerMoves instead -Move_ANCIENT_POWER:: +gBattleAnimMove_AncientPower:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -23525,7 +24521,7 @@ Move_ANCIENT_POWER:: blendoff end -Move_OCTAZOOKA:: +gBattleAnimMove_Octazooka:: loadspritegfx ANIM_TAG_GRAY_SMOKE loadspritegfx ANIM_TAG_BLACK_BALL playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_ATTACKER @@ -23542,7 +24538,7 @@ Move_OCTAZOOKA:: waitforvisualfinish end -Move_MIST:: +gBattleAnimMove_Mist:: loadspritegfx ANIM_TAG_MIST_CLOUD monbg ANIM_ATK_PARTNER setalpha 12, 8 @@ -23566,7 +24562,7 @@ MistCloud: delay 7 return -Move_HAZE:: +gBattleAnimMove_Haze:: waitforvisualfinish playsewithpan SE_M_HAZE, 0 createvisualtask AnimTask_HazeScrollingFog, 5 @@ -23576,7 +24572,7 @@ Move_HAZE:: createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS_2, 1, 16, 0, RGB_BLACK end -Move_FIRE_PUNCH:: +gBattleAnimMove_FirePunch:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_IMPACT @@ -23612,7 +24608,7 @@ FireSpreadEffect: createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 112, -128, 40 return -Move_LEER:: +gBattleAnimMove_Leer:: loadspritegfx ANIM_TAG_LEER monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER @@ -23631,7 +24627,7 @@ Move_LEER:: waitforvisualfinish end -Move_DREAM_EATER:: +gBattleAnimMove_DreamEater:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_DEF_PARTNER @@ -23698,7 +24694,7 @@ DreamEaterAbsorb: delay 4 return -Move_POISON_GAS:: +gBattleAnimMove_PoisonGas:: loadspritegfx ANIM_TAG_PURPLE_GAS_CLOUD loadspritegfx ANIM_TAG_POISON_BUBBLE delay 0 @@ -23736,7 +24732,7 @@ Move_POISON_GAS:: delay 0 end -Move_BIND:: +gBattleAnimMove_Bind:: createvisualtask AnimTask_SwayMon, 5, 0, 6, 3328, 4, ANIM_ATTACKER goto BindWrap @@ -23751,11 +24747,11 @@ BindWrapSqueezeTarget: delay 16 return -Move_WRAP:: +gBattleAnimMove_Wrap:: createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 6, 4, 2, 4 goto BindWrap -Move_PSYBEAM:: +gBattleAnimMove_Psybeam:: loadspritegfx ANIM_TAG_GOLD_RING playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER call SetPsychicBackground @@ -23782,7 +24778,7 @@ PsybeamRings: delay 4 return -Move_HYPNOSIS:: +gBattleAnimMove_Hypnosis:: loadspritegfx ANIM_TAG_GOLD_RING call SetPsychicBackground call HypnosisRings @@ -23800,7 +24796,7 @@ HypnosisRings: delay 6 return -Move_PSYWAVE:: +gBattleAnimMove_Psywave:: loadspritegfx ANIM_TAG_BLUE_RING playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER call SetPsychicBackground @@ -23824,7 +24820,7 @@ PsywaveRings: delay 4 return -Move_ZAP_CANNON:: +gBattleAnimMove_ZapCannon:: loadspritegfx ANIM_TAG_BLACK_BALL_2 loadspritegfx ANIM_TAG_SPARK_2 playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_ATTACKER @@ -23845,7 +24841,7 @@ Move_ZAP_CANNON:: waitforvisualfinish end -Move_STEEL_WING:: +gBattleAnimMove_SteelWing:: loadspritegfx ANIM_TAG_GUST loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 @@ -23872,7 +24868,7 @@ Move_STEEL_WING:: blendoff end -Move_IRON_TAIL:: +gBattleAnimMove_IronTail:: loadspritegfx ANIM_TAG_IMPACT loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 1, 0, RGB_BLACK @@ -23891,7 +24887,7 @@ Move_IRON_TAIL:: waitforvisualfinish end -Move_POISON_TAIL:: +gBattleAnimMove_PoisonTail:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_POISON_BUBBLE loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 @@ -23912,7 +24908,7 @@ Move_POISON_TAIL:: waitforvisualfinish end -Move_METAL_CLAW:: +gBattleAnimMove_MetalClaw:: loadspritegfx ANIM_TAG_CLAW_SLASH loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2 createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK @@ -23933,7 +24929,7 @@ Move_METAL_CLAW:: waitforvisualfinish end -Move_NIGHT_SHADE:: +gBattleAnimMove_NightShade:: monbg ANIM_ATTACKER splitbgprio ANIM_ATTACKER playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -23952,7 +24948,7 @@ Move_NIGHT_SHADE:: waitbgfadein end -Move_EGG_BOMB:: +gBattleAnimMove_EggBomb:: loadspritegfx ANIM_TAG_EXPLOSION loadspritegfx ANIM_TAG_LARGE_FRESH_EGG playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER @@ -23977,7 +24973,7 @@ Move_EGG_BOMB:: waitforvisualfinish end -Move_SHADOW_BALL:: +gBattleAnimMove_ShadowBall:: loadspritegfx ANIM_TAG_SHADOW_BALL fadetobg BG_GHOST waitbgfadein @@ -23992,7 +24988,7 @@ Move_SHADOW_BALL:: waitbgfadein end -Move_LICK:: +gBattleAnimMove_Lick:: loadspritegfx ANIM_TAG_LICK delay 15 playsewithpan SE_M_LICK, SOUND_PAN_TARGET @@ -24001,7 +24997,7 @@ Move_LICK:: waitforvisualfinish end -Move_FOCUS_ENERGY:: +gBattleAnimMove_FocusEnergy:: loadspritegfx ANIM_TAG_FOCUS_ENERGY playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect @@ -24014,7 +25010,7 @@ Move_FOCUS_ENERGY:: waitforvisualfinish end -Move_BIDE:: +gBattleAnimMove_Bide:: choosetwoturnanim BideSetUp, BideUnleash end BideSetUp: @@ -24054,7 +25050,7 @@ BideUnleash: blendoff end -Move_STRING_SHOT:: +gBattleAnimMove_StringShot:: loadspritegfx ANIM_TAG_STRING loadspritegfx ANIM_TAG_WEB_THREAD monbg ANIM_DEF_PARTNER @@ -24099,7 +25095,7 @@ StringShotThread: delay 1 return -Move_SPIDER_WEB:: +gBattleAnimMove_SpiderWeb:: loadspritegfx ANIM_TAG_SPIDER_WEB loadspritegfx ANIM_TAG_WEB_THREAD monbg ANIM_DEF_PARTNER @@ -24136,7 +25132,7 @@ SpiderWebThread: delay 1 return -Move_RAZOR_WIND:: +gBattleAnimMove_RazorWind:: choosetwoturnanim RazorWindSetUp, RazorWindUnleash RazorWindEnd: waitforvisualfinish @@ -24174,7 +25170,7 @@ RazorWindUnleash: blendoff goto RazorWindEnd -Move_DISABLE:: +gBattleAnimMove_Disable:: loadspritegfx ANIM_TAG_SPARKLE_4 monbg ANIM_TARGET splitbgprio ANIM_TARGET @@ -24190,7 +25186,7 @@ Move_DISABLE:: blendoff end -Move_RECOVER:: +gBattleAnimMove_Recover:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_ATK_PARTNER @@ -24225,7 +25221,7 @@ RecoverAbsorbEffect: delay 3 return -Move_MIMIC:: +gBattleAnimMove_Mimic:: loadspritegfx ANIM_TAG_ORBS setalpha 11, 5 monbg_static ANIM_DEF_PARTNER @@ -24244,7 +25240,7 @@ Move_MIMIC:: blendoff end -Move_CONSTRICT:: +gBattleAnimMove_Constrict:: loadspritegfx ANIM_TAG_TENDRILS loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 6, 4 createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 4, 0, 16, 0, 2 @@ -24261,7 +25257,7 @@ Move_CONSTRICT:: waitforvisualfinish end -Move_CURSE:: +gBattleAnimMove_Curse:: choosetwoturnanim CurseGhost, CurseStats CurseGhost: loadspritegfx ANIM_TAG_NAIL @@ -24306,7 +25302,7 @@ CurseStats1: createvisualtask AnimTask_BlendColorCycle, 5, F_PAL_ATTACKER, 4, 2, 0, 10, RGB_RED return -Move_SOFT_BOILED:: +gBattleAnimMove_SoftBoiled:: loadspritegfx ANIM_TAG_BREAKING_EGG loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_BLUE_STAR @@ -24329,7 +25325,7 @@ Move_SOFT_BOILED:: call HealingEffect2 end -Move_HEAL_BELL:: +gBattleAnimMove_HealBell:: loadspritegfx ANIM_TAG_BELL loadspritegfx ANIM_TAG_MUSIC_NOTES_2 loadspritegfx ANIM_TAG_THIN_RING @@ -24381,7 +25377,7 @@ HealBellRing: playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER return -Move_FAKE_OUT:: +gBattleAnimMove_FakeOut:: playsewithpan SE_M_FLATTER, 0 createvisualtask AnimTask_FakeOut, 5 waitforvisualfinish @@ -24392,7 +25388,7 @@ Move_FAKE_OUT:: createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 16, 0, RGB_WHITE end -Move_SCARY_FACE:: +gBattleAnimMove_ScaryFace:: loadspritegfx ANIM_TAG_EYE_SPARKLE createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, (F_PAL_BG | F_PAL_ATK_SIDE | F_PAL_DEF_PARTNER), 3, 0, 16, RGB_BLACK playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -24410,7 +25406,7 @@ Move_SCARY_FACE:: waitforvisualfinish end -Move_SWEET_KISS:: +gBattleAnimMove_SweetKiss:: loadspritegfx ANIM_TAG_RED_HEART loadspritegfx ANIM_TAG_ANGEL createsprite gAngelSpriteTemplate, ANIM_TARGET, 2, 16, -48 @@ -24429,7 +25425,7 @@ Move_SWEET_KISS:: createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, -384, -31 end -Move_LOVELY_KISS:: +gBattleAnimMove_LovelyKiss:: loadspritegfx ANIM_TAG_PINK_HEART loadspritegfx ANIM_TAG_DEVIL createsprite gDevilSpriteTemplate, ANIM_TARGET, 2, 0, -24 @@ -24442,7 +25438,7 @@ Move_LOVELY_KISS:: createsprite gPinkHeartSpriteTemplate, ANIM_TARGET, 3, -128, -22 end -Move_FURY_SWIPES:: +gBattleAnimMove_FurySwipes:: loadspritegfx ANIM_TAG_SWIPE createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 5, 5 delay 4 @@ -24457,7 +25453,7 @@ Move_FURY_SWIPES:: createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 7, 1 end -Move_INGRAIN:: +gBattleAnimMove_Ingrain:: loadspritegfx ANIM_TAG_ROOTS loadspritegfx ANIM_TAG_ORBS createsprite gIngrainRootSpriteTemplate, ANIM_ATTACKER, 2, 16, 26, -1, 2, 150 @@ -24487,7 +25483,7 @@ Move_INGRAIN:: waitforvisualfinish end -Move_PRESENT:: +gBattleAnimMove_Present:: loadspritegfx ANIM_TAG_ITEM_BAG createvisualtask AnimTask_IsHealingMove, 2 createsprite gPresentSpriteTemplate, ANIM_TARGET, 2, 0, -5, 10, 2, -1 @@ -24547,14 +25543,14 @@ PresentHeal: call HealingEffect2 end -Move_BATON_PASS:: +gBattleAnimMove_BatonPass:: loadspritegfx ANIM_TAG_POKEBALL playsewithpan SE_M_BATON_PASS, SOUND_PAN_ATTACKER createvisualtask AnimTask_BlendColorCycle, 2, (F_PAL_BG | F_PAL_BATTLERS), 1, 2, 0, 11, RGB(31, 22, 30) createsprite gBatonPassPokeballSpriteTemplate, ANIM_ATTACKER, 2 end -Move_PERISH_SONG:: +gBattleAnimMove_PerishSong:: loadspritegfx ANIM_TAG_MUSIC_NOTES_2 createsprite gPerishSongMusicNoteSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 0 createsprite gPerishSongMusicNoteSpriteTemplate, ANIM_ATTACKER, 4, 1, 1, 16 @@ -24590,7 +25586,7 @@ Move_PERISH_SONG:: waitforvisualfinish end -Move_SLEEP_TALK:: +gBattleAnimMove_SleepTalk:: loadspritegfx ANIM_TAG_LETTER_Z createvisualtask AnimTask_SwayMon, 5, 0, 4, 4096, 2, ANIM_ATTACKER delay 20 @@ -24617,7 +25613,7 @@ Move_SLEEP_TALK:: waitforvisualfinish end -Move_HYPER_FANG:: +gBattleAnimMove_HyperFang:: loadspritegfx ANIM_TAG_FANG_ATTACK playsewithpan SE_M_BITE, SOUND_PAN_TARGET delay 1 @@ -24648,7 +25644,7 @@ HyperFangInContest: fadetobg BG_IMPACT_CONTESTS goto HyperFangContinue -Move_TRI_ATTACK:: +gBattleAnimMove_TriAttack:: loadspritegfx ANIM_TAG_TRI_ATTACK_TRIANGLE createsprite gTriAttackTriangleSpriteTemplate, ANIM_TARGET, 2, 16, 0 playsewithpan SE_M_TRI_ATTACK, SOUND_PAN_ATTACKER @@ -24697,7 +25693,7 @@ Move_TRI_ATTACK:: waitforvisualfinish end -Move_WILL_O_WISP:: +gBattleAnimMove_WillOWisp:: loadspritegfx ANIM_TAG_WISP_FIRE loadspritegfx ANIM_TAG_WISP_ORB monbg ANIM_DEF_PARTNER @@ -24728,7 +25724,7 @@ Move_WILL_O_WISP:: clearmonbg ANIM_DEF_PARTNER end -Move_ENCORE:: +gBattleAnimMove_Encore:: loadspritegfx ANIM_TAG_SPOTLIGHT loadspritegfx ANIM_TAG_TAG_HAND createvisualtask AnimTask_CreateSpotlight, 2 @@ -24748,7 +25744,7 @@ Move_ENCORE:: createvisualtask AnimTask_RemoveSpotlight, 2 end -Move_TRICK:: +gBattleAnimMove_Trick:: loadspritegfx ANIM_TAG_ITEM_BAG loadspritegfx ANIM_TAG_SPEED_DUST createsprite gTrickBagSpriteTemplate, ANIM_ATTACKER, 2, -40, 80 @@ -24776,7 +25772,7 @@ Move_TRICK:: waitforvisualfinish end -Move_WISH:: +gBattleAnimMove_Wish:: loadspritegfx ANIM_TAG_GOLD_STARS loadspritegfx ANIM_TAG_SPARKLE_2 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 0, 10, RGB_BLACK @@ -24792,7 +25788,7 @@ Move_WISH:: waitforvisualfinish end -Move_STOCKPILE:: +gBattleAnimMove_Stockpile:: loadspritegfx ANIM_TAG_GRAY_ORB playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 8, 1, 0, 12, RGB_WHITE @@ -24821,7 +25817,7 @@ StockpileAbsorb: delay 1 return -Move_SPIT_UP:: +gBattleAnimMove_SpitUp:: loadspritegfx ANIM_TAG_RED_ORB_2 loadspritegfx ANIM_TAG_IMPACT playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER @@ -24868,7 +25864,7 @@ SpitUpStrongest: createsprite gSpitUpOrbSpriteTemplate, ANIM_ATTACKER, 2, 240 goto SpitUpContinue -Move_SWALLOW:: +gBattleAnimMove_Swallow:: loadspritegfx ANIM_TAG_BLUE_ORB loadspritegfx ANIM_TAG_BLUE_STAR playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER @@ -24904,7 +25900,7 @@ SwallowBest: call SwallowEffect goto SwallowContinue -Move_TRANSFORM:: +gBattleAnimMove_Transform:: monbg ANIM_ATTACKER playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER waitplaysewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER, 48 @@ -24913,7 +25909,7 @@ Move_TRANSFORM:: clearmonbg ANIM_ATTACKER end -Move_MORNING_SUN:: +gBattleAnimMove_MorningSun:: loadspritegfx ANIM_TAG_GREEN_STAR loadspritegfx ANIM_TAG_BLUE_STAR createvisualtask AnimTask_MorningSunLightBeam, 5 @@ -24945,7 +25941,7 @@ MorningSunStar: delay 5 return -Move_SWEET_SCENT:: +gBattleAnimMove_SweetScent:: loadspritegfx ANIM_TAG_PINK_PETAL playsewithpan SE_M_SWEET_SCENT, SOUND_PAN_ATTACKER createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 100, 0, 100 @@ -24983,7 +25979,7 @@ SweetScentEffect: delay 2 return -Move_HYPER_BEAM:: +gBattleAnimMove_HyperBeam:: loadspritegfx ANIM_TAG_ORBS createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 4, 0, 16, RGB_BLACK waitforvisualfinish @@ -25033,7 +26029,7 @@ HyperBeamOrbs: delay 1 return -Move_FLATTER:: +gBattleAnimMove_Flatter:: loadspritegfx ANIM_TAG_SPOTLIGHT loadspritegfx ANIM_TAG_CONFETTI createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_ENCORE2, SOUND_PAN_TARGET @@ -25078,7 +26074,7 @@ CreateFlatterConfetti: createsprite gFlatterConfettiSpriteTemplate, ANIM_ATTACKER, 40, ANIM_TARGET return -Move_ROLE_PLAY:: +gBattleAnimMove_RolePlay:: monbg ANIM_ATK_PARTNER createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 16, RGB_WHITE createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 10, RGB_BLACK @@ -25093,7 +26089,7 @@ Move_ROLE_PLAY:: createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 10, 0, RGB_BLACK end -Move_REFRESH:: +gBattleAnimMove_Refresh:: loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_SPARKLE_2 playsewithpan SE_M_STAT_INCREASE, SOUND_PAN_ATTACKER @@ -25107,7 +26103,7 @@ Move_REFRESH:: createsprite gThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0 end -Move_BLAZE_KICK:: +gBattleAnimMove_BlazeKick:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_SMALL_EMBER @@ -25128,7 +26124,7 @@ Move_BLAZE_KICK:: blendoff end -Move_HYPER_VOICE:: +gBattleAnimMove_HyperVoice:: loadspritegfx ANIM_TAG_THIN_RING createvisualtask SoundTask_PlayCryWithEcho, 5, FALSE call HyperVoiceEffect @@ -25149,7 +26145,7 @@ HyperVoiceEffect: createvisualtask SoundTask_WaitForCry, 5 return -Move_SAND_TOMB:: +gBattleAnimMove_SandTomb:: loadspritegfx ANIM_TAG_MUD_SAND createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_TARGET, 2, 0, 7, RGB(19, 17, 0) createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 43, 1 @@ -25177,7 +26173,7 @@ SandTombSwirlingDirt: delay 2 return -Move_SHEER_COLD:: +gBattleAnimMove_SheerCold:: fadetobg BG_ICE waitbgfadeout playsewithpan SE_M_ICY_WIND, 0 @@ -25195,7 +26191,7 @@ Move_SHEER_COLD:: waitbgfadein end -Move_ARM_THRUST:: +gBattleAnimMove_ArmThrust:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT splitbgprio ANIM_TARGET @@ -25222,13 +26218,13 @@ ArmThrustLeft: createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -8, 0, ANIM_TARGET, 2 goto ArmThrustContinue -Move_MUDDY_WATER:: +gBattleAnimMove_MuddyWater:: panse SE_M_WHIRLPOOL, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 createvisualtask AnimTask_CreateSurfWave, 2, ANIM_SURF_PAL_MUDDY_WATER waitforvisualfinish end -Move_BULLET_SEED:: +gBattleAnimMove_BulletSeed:: loadspritegfx ANIM_TAG_SEED createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0 delay 5 @@ -25253,7 +26249,7 @@ Move_BULLET_SEED:: waitforvisualfinish end -Move_DRAGON_CLAW:: +gBattleAnimMove_DragonClaw:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_CLAW_SLASH playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_ATTACKER @@ -25313,7 +26309,7 @@ DragonClawFireSpiral: return end -Move_MUD_SHOT:: +gBattleAnimMove_MudShot:: loadspritegfx ANIM_TAG_BROWN_ORB monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -25345,7 +26341,7 @@ MudShotOrbs: delay 2 return -Move_METEOR_MASH:: +gBattleAnimMove_MeteorMash:: loadspritegfx ANIM_TAG_GOLD_STARS loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -25370,7 +26366,7 @@ Move_METEOR_MASH:: waitforvisualfinish end -Move_REVENGE:: +gBattleAnimMove_Revenge:: loadspritegfx ANIM_TAG_PURPLE_SCRATCH monbg ANIM_TARGET setalpha 12, 8 @@ -25399,7 +26395,7 @@ Move_REVENGE:: blendoff end -Move_POISON_FANG:: +gBattleAnimMove_PoisonFang:: loadspritegfx ANIM_TAG_FANG_ATTACK loadspritegfx ANIM_TAG_POISON_BUBBLE playsewithpan SE_M_BITE, SOUND_PAN_TARGET @@ -25412,12 +26408,12 @@ Move_POISON_FANG:: waitforvisualfinish end -Move_SUBSTITUTE:: +gBattleAnimMove_Substitute:: playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER createvisualtask AnimTask_MonToSubstitute, 2 end -Move_FRENZY_PLANT:: +gBattleAnimMove_FrenzyPlant:: loadspritegfx ANIM_TAG_ROOTS loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET @@ -25477,7 +26473,7 @@ Move_FRENZY_PLANT:: blendoff end -Move_METAL_SOUND:: +gBattleAnimMove_MetalSound:: loadspritegfx ANIM_TAG_METAL_SOUND_WAVES monbg ANIM_DEF_PARTNER splitbgprio_foes ANIM_TARGET @@ -25497,7 +26493,7 @@ MetalSoundRings: delay 2 return -Move_FOCUS_PUNCH:: +gBattleAnimMove_FocusPunch:: goto FocusPunch FocusPunchEnd: waitforvisualfinish @@ -25545,7 +26541,7 @@ FocusPunchInContest: fadetobg BG_IMPACT_CONTESTS goto FocusPunchContinue -Move_RETURN:: +gBattleAnimMove_Return:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER setalpha 12, 8 @@ -25682,7 +26678,7 @@ ReturnStrongestHit: waitforvisualfinish return -Move_COSMIC_POWER:: +gBattleAnimMove_CosmicPower:: loadspritegfx ANIM_TAG_SPARKLE_2 createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_COSMIC_POWER, 0 playsewithpan SE_M_COSMIC_POWER, 0 @@ -25707,7 +26703,7 @@ Move_COSMIC_POWER:: waitforvisualfinish end -Move_BLAST_BURN:: +gBattleAnimMove_BlastBurn:: loadspritegfx ANIM_TAG_FIRE_PLUME loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -25752,7 +26748,7 @@ Move_BLAST_BURN:: blendoff end -Move_ROCK_TOMB:: +gBattleAnimMove_RockTomb:: loadspritegfx ANIM_TAG_X_SIGN loadspritegfx ANIM_TAG_ROCKS createvisualtask AnimTask_ShakeBattleTerrain, 2, 2, 0, 10, 1 @@ -25810,7 +26806,7 @@ UnsetBugBg: waitbgfadein return -Move_SILVER_WIND:: +gBattleAnimMove_SilverWind:: loadspritegfx ANIM_TAG_SPARKLE_6 panse SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0 playsewithpan SE_M_MORNING_SUN, 0 @@ -25849,12 +26845,12 @@ Move_SILVER_WIND:: call UnsetBugBg end -Move_SNATCH:: +gBattleAnimMove_Snatch:: playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER createvisualtask AnimTask_WindUpLunge, 5, ANIM_ATTACKER, -12, 4, 10, 10, 12, 6 end -Move_DIVE:: +gBattleAnimMove_Dive:: loadspritegfx ANIM_TAG_SPLASH loadspritegfx ANIM_TAG_SWEAT_BEAD choosetwoturnanim DiveSetUp, DiveAttack @@ -25899,7 +26895,7 @@ DiveAttackWaterDroplets: createsprite gSprayWaterDropletSpriteTemplate, ANIM_TARGET, 5, 1, 1 return -Move_ROCK_BLAST:: +gBattleAnimMove_RockBlast:: loadspritegfx ANIM_TAG_ROCKS loadspritegfx ANIM_TAG_IMPACT createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 @@ -25917,7 +26913,7 @@ Move_ROCK_BLAST:: waitforvisualfinish end -Move_OVERHEAT:: +gBattleAnimMove_Overheat:: loadspritegfx ANIM_TAG_SMALL_EMBER loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER @@ -25998,7 +26994,7 @@ Move_OVERHEAT:: waitforvisualfinish end -Move_HYDRO_CANNON:: +gBattleAnimMove_HydroCannon:: loadspritegfx ANIM_TAG_WATER_ORB loadspritegfx ANIM_TAG_WATER_IMPACT monbg ANIM_DEF_PARTNER @@ -26040,7 +27036,7 @@ HydroCannonBeam: createsprite gHydroCannonBeamSpriteTemplate, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257 return -Move_ASTONISH:: +gBattleAnimMove_Astonish:: loadspritegfx ANIM_TAG_SWEAT_BEAD playsewithpan SE_M_ENCORE, SOUND_PAN_ATTACKER createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 @@ -26053,7 +27049,7 @@ Move_ASTONISH:: waitforvisualfinish end -Move_SEISMIC_TOSS:: +gBattleAnimMove_SeismicToss:: loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS setarg 7, 0 @@ -26120,7 +27116,7 @@ SeismicTossRockScatter2: createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 12, 30, 4, 3 return -Move_MAGIC_COAT:: +gBattleAnimMove_MagicCoat:: loadspritegfx ANIM_TAG_ORANGE_LIGHT_WALL setalpha 0, 16 waitplaysewithpan SE_M_BARRIER, SOUND_PAN_ATTACKER, 15 @@ -26130,7 +27126,7 @@ Move_MAGIC_COAT:: blendoff end -Move_WATER_PULSE:: +gBattleAnimMove_WaterPulse:: loadspritegfx ANIM_TAG_SMALL_BUBBLES loadspritegfx ANIM_TAG_BLUE_RING_2 monbg ANIM_TARGET @@ -26161,7 +27157,7 @@ Move_WATER_PULSE:: clearmonbg ANIM_DEF_PARTNER end -Move_PSYCHO_BOOST:: +gBattleAnimMove_PsychoBoost:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT monbg ANIM_ATK_PARTNER fadetobg BG_PSYCHIC @@ -26188,7 +27184,7 @@ Move_PSYCHO_BOOST:: call UnsetPsychicBg end -Move_KNOCK_OFF:: +gBattleAnimMove_KnockOff:: loadspritegfx ANIM_TAG_SLAM_HIT_2 loadspritegfx ANIM_TAG_IMPACT createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6 @@ -26209,7 +27205,7 @@ Move_KNOCK_OFF:: waitforvisualfinish end -Move_DOOM_DESIRE:: +gBattleAnimMove_DoomDesire:: createvisualtask GetIsDoomDesireHitTurn, 2 delay 1 monbg ANIM_ATK_PARTNER @@ -26228,7 +27224,7 @@ Move_DOOM_DESIRE:: blendoff end -Move_SKY_UPPERCUT:: +gBattleAnimMove_SkyUppercut:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET @@ -26272,52 +27268,52 @@ Move_SKY_UPPERCUT:: waitbgfadein end -Move_SECRET_POWER:: +gBattleAnimMove_SecretPower:: createvisualtask AnimTask_GetFieldTerrain, 5 - jumpargeq 0, STATUS_FIELD_MISTY_TERRAIN, Move_FAIRY_WIND - jumpargeq 0, STATUS_FIELD_GRASSY_TERRAIN, Move_NEEDLE_ARM - jumpargeq 0, STATUS_FIELD_ELECTRIC_TERRAIN, Move_THUNDER_SHOCK - jumpargeq 0, STATUS_FIELD_PSYCHIC_TERRAIN, Move_CONFUSION + jumpargeq 0, STATUS_FIELD_MISTY_TERRAIN, gBattleAnimMove_FairyWind + jumpargeq 0, STATUS_FIELD_GRASSY_TERRAIN, gBattleAnimMove_NeedleArm + jumpargeq 0, STATUS_FIELD_ELECTRIC_TERRAIN, gBattleAnimMove_ThunderShock + jumpargeq 0, STATUS_FIELD_PSYCHIC_TERRAIN, gBattleAnimMove_Confusion createvisualtask AnimTask_GetBattleTerrain, 5 - jumpargeq 0, BATTLE_TERRAIN_GRASS, Move_NEEDLE_ARM - jumpargeq 0, BATTLE_TERRAIN_LONG_GRASS, Move_MAGICAL_LEAF - jumpargeq 0, BATTLE_TERRAIN_SAND, Move_MUD_SHOT - jumpargeq 0, BATTLE_TERRAIN_UNDERWATER, Move_WATERFALL - jumpargeq 0, BATTLE_TERRAIN_WATER, Move_SURF - jumpargeq 0, BATTLE_TERRAIN_POND, Move_BUBBLE_BEAM - jumpargeq 0, BATTLE_TERRAIN_MOUNTAIN, Move_ROCK_THROW - jumpargeq 0, BATTLE_TERRAIN_CAVE, Move_BITE - jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_STRENGTH - jumpargeq 0, BATTLE_TERRAIN_SOARING, Move_GUST - jumpargeq 0, BATTLE_TERRAIN_SKY_PILLAR, Move_GUST - jumpargeq 0, BATTLE_TERRAIN_BURIAL_GROUND, Move_SHADOW_SNEAK - jumpargeq 0, BATTLE_TERRAIN_PUDDLE, Move_MUD_SHOT - jumpargeq 0, BATTLE_TERRAIN_MARSH, Move_MUD_SHOT - jumpargeq 0, BATTLE_TERRAIN_SWAMP, Move_MUD_SHOT - jumpargeq 0, BATTLE_TERRAIN_ICE, Move_ICE_SHARD - jumpargeq 0, BATTLE_TERRAIN_VOLCANO, Move_INCINERATE - jumpargeq 0, BATTLE_TERRAIN_DISTORTION_WORLD, Move_POUND - jumpargeq 0, BATTLE_TERRAIN_SPACE, Move_SWIFT - jumpargeq 0, BATTLE_TERRAIN_ULTRA_SPACE, Move_PSYWAVE + jumpargeq 0, BATTLE_TERRAIN_GRASS, gBattleAnimMove_NeedleArm + jumpargeq 0, BATTLE_TERRAIN_LONG_GRASS, gBattleAnimMove_MagicalLeaf + jumpargeq 0, BATTLE_TERRAIN_SAND, gBattleAnimMove_MudShot + jumpargeq 0, BATTLE_TERRAIN_UNDERWATER, gBattleAnimMove_Waterfall + jumpargeq 0, BATTLE_TERRAIN_WATER, gBattleAnimMove_Surf + jumpargeq 0, BATTLE_TERRAIN_POND, gBattleAnimMove_BubbleBeam + jumpargeq 0, BATTLE_TERRAIN_MOUNTAIN, gBattleAnimMove_RockThrow + jumpargeq 0, BATTLE_TERRAIN_CAVE, gBattleAnimMove_Bite + jumpargeq 0, BATTLE_TERRAIN_BUILDING, gBattleAnimMove_Strength + jumpargeq 0, BATTLE_TERRAIN_SOARING, gBattleAnimMove_Gust + jumpargeq 0, BATTLE_TERRAIN_SKY_PILLAR, gBattleAnimMove_Gust + jumpargeq 0, BATTLE_TERRAIN_BURIAL_GROUND, gBattleAnimMove_ShadowSneak + jumpargeq 0, BATTLE_TERRAIN_PUDDLE, gBattleAnimMove_MudShot + jumpargeq 0, BATTLE_TERRAIN_MARSH, gBattleAnimMove_MudShot + jumpargeq 0, BATTLE_TERRAIN_SWAMP, gBattleAnimMove_MudShot + jumpargeq 0, BATTLE_TERRAIN_ICE, gBattleAnimMove_IceShard + jumpargeq 0, BATTLE_TERRAIN_VOLCANO, gBattleAnimMove_Incinerate + jumpargeq 0, BATTLE_TERRAIN_DISTORTION_WORLD, gBattleAnimMove_Pound + jumpargeq 0, BATTLE_TERRAIN_SPACE, gBattleAnimMove_Swift + jumpargeq 0, BATTLE_TERRAIN_ULTRA_SPACE, gBattleAnimMove_Psywave .if B_SECRET_POWER_ANIMATION >= GEN_7 - jumpargeq 0, BATTLE_TERRAIN_SNOW, Move_ICE_SHARD - jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_SPIT_UP - goto Move_SPIT_UP + jumpargeq 0, BATTLE_TERRAIN_SNOW, gBattleAnimMove_IceShard + jumpargeq 0, BATTLE_TERRAIN_BUILDING, gBattleAnimMove_SpitUp + goto gBattleAnimMove_SpitUp .elseif B_SECRET_POWER_ANIMATION >= GEN_6 - jumpargeq 0, BATTLE_TERRAIN_SNOW, Move_AVALANCHE - jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_BODY_SLAM - goto Move_BODY_SLAM + jumpargeq 0, BATTLE_TERRAIN_SNOW, gBattleAnimMove_Avalanche + jumpargeq 0, BATTLE_TERRAIN_BUILDING, gBattleAnimMove_BodySlam + goto gBattleAnimMove_BodySlam .elseif B_SECRET_POWER_ANIMATION >= GEN_4 - jumpargeq 0, BATTLE_TERRAIN_SNOW, Move_AVALANCHE - jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_BODY_SLAM - goto Move_MUD_SLAP + jumpargeq 0, BATTLE_TERRAIN_SNOW, gBattleAnimMove_Avalanche + jumpargeq 0, BATTLE_TERRAIN_BUILDING, gBattleAnimMove_BodySlam + goto gBattleAnimMove_MudSlap .else - jumpargeq 0, BATTLE_TERRAIN_SNOW, Move_AVALANCHE - jumpargeq 0, BATTLE_TERRAIN_BUILDING, Move_STRENGTH - goto Move_SLAM + jumpargeq 0, BATTLE_TERRAIN_SNOW, gBattleAnimMove_Avalanche + jumpargeq 0, BATTLE_TERRAIN_BUILDING, gBattleAnimMove_Strength + goto gBattleAnimMove_Slam .endif -Move_TWISTER:: +gBattleAnimMove_Twister:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_ROCKS @@ -26363,7 +27359,7 @@ Move_TWISTER:: blendoff end -Move_MAGICAL_LEAF:: +gBattleAnimMove_MagicalLeaf:: loadspritegfx ANIM_TAG_LEAF loadspritegfx ANIM_TAG_RAZOR_LEAF loadspritegfx ANIM_TAG_IMPACT @@ -26407,7 +27403,7 @@ Move_MAGICAL_LEAF:: blendoff end -Move_ICE_BALL:: +gBattleAnimMove_IceBall:: loadspritegfx ANIM_TAG_ICE_CHUNK loadspritegfx ANIM_TAG_ICE_CRYSTALS createvisualtask AnimTask_GetIceBallCounter, 5, 0 @@ -26497,7 +27493,7 @@ IceBallImpactShard: createsprite gIceBallImpactShardSpriteTemplate, ANIM_TARGET, 4, -12, -16 return -Move_WEATHER_BALL:: +gBattleAnimMove_WeatherBall:: loadspritegfx ANIM_TAG_WEATHER_BALL createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 8, 1, ANIM_ATTACKER delay 8 @@ -26593,7 +27589,7 @@ WeatherBallIce: waitforvisualfinish end -Move_COUNT:: +gBattleAnimMove_Count:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -26907,18 +27903,18 @@ UnsetSolarBeamBg: waitbgfadein return -Status_Poison: +gBattleAnimStatus_Poison:: loopsewithpan SE_M_TOXIC, SOUND_PAN_TARGET, 13, 6 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 18, 2 createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 2, 2, 0, 12, RGB(30, 0, 31) end -Status_Confusion: +gBattleAnimStatus_Confusion:: loadspritegfx ANIM_TAG_DUCK call ConfusionEffect end -Status_Burn: +gBattleAnimStatus_Burn:: loadspritegfx ANIM_TAG_SMALL_EMBER playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_TARGET call BurnFlame @@ -26931,7 +27927,7 @@ BurnFlame: delay 4 return -Status_Infatuation: +gBattleAnimStatus_Infatuation:: loadspritegfx ANIM_TAG_MAGENTA_HEART playsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER createsprite gMagentaHeartSpriteTemplate, ANIM_ATTACKER, 3, 0, 20 @@ -26943,7 +27939,7 @@ Status_Infatuation: createsprite gMagentaHeartSpriteTemplate, ANIM_ATTACKER, 3, 20, 20 end -Status_Sleep: +gBattleAnimStatus_Sleep:: loadspritegfx ANIM_TAG_LETTER_Z playsewithpan SE_M_SNORE, SOUND_PAN_ATTACKER createsprite gSleepLetterZSpriteTemplate, ANIM_ATTACKER, 2, 4, -10, 16, 0, 0 @@ -26951,13 +27947,13 @@ Status_Sleep: createsprite gSleepLetterZSpriteTemplate, ANIM_ATTACKER, 2, 4, -10, 16, 0, 0 end -Status_Paralysis: +gBattleAnimStatus_Paralysis:: loadspritegfx ANIM_TAG_SPARK_2 createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1 call ElectricityEffect end -Status_Freeze: +gBattleAnimStatus_Freeze:: playsewithpan SE_M_ICY_WIND, 0 loadspritegfx ANIM_TAG_ICE_CUBE monbg ANIM_DEF_PARTNER @@ -26968,7 +27964,7 @@ Status_Freeze: clearmonbg ANIM_DEF_PARTNER end -Status_Curse: +gBattleAnimStatus_Curse:: loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT monbg ANIM_DEF_PARTNER playsewithpan SE_M_NIGHTMARE, SOUND_PAN_TARGET @@ -26978,7 +27974,7 @@ Status_Curse: clearmonbg ANIM_DEF_PARTNER end -Status_Nightmare: +gBattleAnimStatus_Nightmare:: loadspritegfx ANIM_TAG_DEVIL monbg ANIM_DEF_PARTNER playsewithpan SE_M_NIGHTMARE, SOUND_PAN_TARGET @@ -26988,15 +27984,12 @@ Status_Nightmare: clearmonbg ANIM_DEF_PARTNER end -Status_Powder: - end - -General_StatsChange: +gBattleAnimGeneral_StatsChange:: createvisualtask AnimTask_StatsChange, 5 waitforvisualfinish end -General_SubstituteFade: +gBattleAnimGeneral_SubstituteFade:: monbg ANIM_ATTACKER createvisualtask AnimTask_SubstituteFadeToInvisible, 5 createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_ATTACKER, 0, 0, 16, RGB_WHITE @@ -27009,11 +28002,11 @@ General_SubstituteFade: createvisualtask AnimTask_SwapMonSpriteToFromSubstitute, 2, TRUE end -General_SubstituteAppear: +gBattleAnimGeneral_SubstituteAppear:: createvisualtask AnimTask_MonToSubstitute, 2 end -General_PokeblockThrow: +gBattleAnimGeneral_PokeblockThrow:: createvisualtask AnimTask_SetAttackerTargetLeftPos, 2, 0 createvisualtask AnimTask_LoadPokeblockGfx, 2 delay 0 @@ -27026,12 +28019,12 @@ General_PokeblockThrow: createvisualtask AnimTask_FreePokeblockGfx, 2 end -General_ItemKnockoff: +gBattleAnimGeneral_ItemKnockoff:: loadspritegfx ANIM_TAG_ITEM_BAG createsprite gKnockOffItemSpriteTemplate, ANIM_TARGET, 2 end -General_TurnTrap: +gBattleAnimGeneral_TurnTrap:: createvisualtask AnimTask_GetTrappedMoveAnimId, 5 jumpargeq 0, TRAP_ANIM_FIRE_SPIN, Status_FireSpin jumpargeq 0, TRAP_ANIM_WHIRLPOOL, Status_Whirlpool @@ -27129,10 +28122,10 @@ Status_Clamp: Status_Thunder_Cage: @ TODO - goto Move_THUNDER_CAGE + goto gBattleAnimMove_ThunderCage -Status_Snap_Trap: @ placeholder - goto Move_BITE +Status_Snap_Trap: + goto gBattleAnimMove_SnapTrap Status_SandTomb: loadspritegfx ANIM_TAG_MUD_SAND @@ -27163,7 +28156,7 @@ Status_Infestation: clearmonbg ANIM_DEF_PARTNER end -General_HeldItemEffect: +gBattleAnimGeneral_HeldItemEffect:: loadspritegfx ANIM_TAG_THIN_RING loadspritegfx ANIM_TAG_SPARKLE_2 delay 0 @@ -27185,7 +28178,7 @@ General_HeldItemEffect: waitforvisualfinish end -General_SmokeballEscape: +gBattleAnimGeneral_SmokeballEscape:: loadspritegfx ANIM_TAG_PINK_CLOUD monbg ANIM_ATTACKER setalpha 12, 4 @@ -27223,7 +28216,7 @@ General_SmokeballEscape: blendoff end -General_HangedOn: +gBattleAnimGeneral_HangedOn:: createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 0, F_PAL_ATTACKER, 7, 0, 9, RGB_RED playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER createvisualtask AnimTask_SlideMonForFocusBand, 5, 30, 128, 0, 1, 2, 0, 1 @@ -27234,7 +28227,7 @@ General_HangedOn: createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 0, 0, 0, 15 end -General_Rain: +gBattleAnimGeneral_Rain:: call RainDrops end @@ -27251,27 +28244,27 @@ RainDrops: waitforvisualfinish return -General_Sun: - goto Move_SUNNY_DAY +gBattleAnimGeneral_Sun:: + goto gBattleAnimMove_SunnyDay -General_Sandstorm: - goto Move_SANDSTORM +gBattleAnimGeneral_Sandstorm:: + goto gBattleAnimMove_Sandstorm -General_Hail: - goto Move_HAIL +gBattleAnimGeneral_Hail:: + goto gBattleAnimMove_Hail -General_Snow: - goto Move_SNOWSCAPE +gBattleAnimGeneral_Snow:: + goto gBattleAnimMove_Snowscape -General_Fog: - goto Move_HAZE +gBattleAnimGeneral_Fog:: + goto gBattleAnimMove_Haze -General_LeechSeedDrain: +gBattleAnimGeneral_LeechSeedDrain:: createvisualtask AnimTask_GetBattlersFromArg, 5 delay 0 - goto Move_ABSORB + goto gBattleAnimMove_Absorb -General_MonHit: +gBattleAnimGeneral_MonHit:: loadspritegfx ANIM_TAG_IMPACT monbg ANIM_TARGET setalpha 12, 8 @@ -27283,7 +28276,7 @@ General_MonHit: blendoff end -General_ItemSteal: +gBattleAnimGeneral_ItemSteal:: loadspritegfx ANIM_TAG_ITEM_BAG createvisualtask AnimTask_SetAnimAttackerAndTargetForEffectAtk, 2 createvisualtask AnimTask_SetTargetToEffectBattler, 2 @ Redundant with above @@ -27291,7 +28284,7 @@ General_ItemSteal: createsprite gItemStealSpriteTemplate, ANIM_ATTACKER, 2, 0, -5, 10, 2, -1 end -General_SnatchMove: +gBattleAnimGeneral_SnatchMove:: loadspritegfx ANIM_TAG_ITEM_BAG createvisualtask AnimTask_SetAnimAttackerAndTargetForEffectTgt, 2 call SnatchMoveTrySwapFromSubstitute @@ -27314,7 +28307,7 @@ SnatchPartnerMonMove: createvisualtask AnimTask_SnatchPartnerMove, 2 goto SnatchMoveContinue -General_FutureSightHit: +gBattleAnimGeneral_FutureSightHit:: createvisualtask AnimTask_SetAnimTargetToBattlerTarget, 2 monbg ANIM_DEF_PARTNER playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER @@ -27334,7 +28327,7 @@ General_FutureSightHit: call UnsetPsychicBg end -General_DoomDesireHit: +gBattleAnimGeneral_DoomDesireHit:: createvisualtask AnimTask_SetAnimTargetToBattlerTarget, 2 loadspritegfx ANIM_TAG_EXPLOSION createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 0, 16, RGB_WHITE @@ -27368,7 +28361,7 @@ General_DoomDesireHit: waitforvisualfinish end -General_FocusPunchSetUp: +gBattleAnimGeneral_FocusPunchSetUp:: loadspritegfx ANIM_TAG_FOCUS_ENERGY playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER call EndureEffect @@ -27381,7 +28374,7 @@ General_FocusPunchSetUp: waitforvisualfinish end -General_IngrainHeal: +gBattleAnimGeneral_IngrainHeal:: loadspritegfx ANIM_TAG_ORBS loadspritegfx ANIM_TAG_BLUE_STAR monbg ANIM_DEF_PARTNER @@ -27400,7 +28393,7 @@ General_IngrainHeal: blendoff end -General_WishHeal: +gBattleAnimGeneral_WishHeal:: loadspritegfx ANIM_TAG_SPARKLE_2 createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 0, 10, RGB_BLACK waitforvisualfinish @@ -27414,34 +28407,34 @@ General_WishHeal: createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 10, 0, RGB_BLACK end -General_SimpleHeal: +gBattleAnimGeneral_SimpleHeal:: loadspritegfx ANIM_TAG_BLUE_STAR call HealingEffect waitforvisualfinish end -General_IllusionOff: +gBattleAnimGeneral_IllusionOff:: monbg ANIM_TARGET createvisualtask AnimTask_TransformMon, 2, 1, 0 waitforvisualfinish clearmonbg ANIM_TARGET end -General_FormChange: +gBattleAnimGeneral_FormChange:: monbg ANIM_ATTACKER createvisualtask AnimTask_TransformMon, 2, 1, 0 waitforvisualfinish clearmonbg ANIM_ATTACKER end -General_SlideOffScreen: +gBattleAnimGeneral_SlideOffScreen:: createvisualtask AnimTask_SlideOffScreen, 5, ANIM_TARGET, 3 waitforvisualfinish createvisualtask AnimTask_SetInvisible, 1, ANIM_TARGET, TRUE waitforvisualfinish end -General_MegaEvolution: +gBattleAnimGeneral_MegaEvolution:: loadspritegfx ANIM_TAG_MEGA_STONE loadspritegfx ANIM_TAG_MEGA_PARTICLES loadspritegfx ANIM_TAG_MEGA_SYMBOL @@ -27486,7 +28479,7 @@ MegaEvolutionParticles: delay 3 return -General_TeraCharge: +gBattleAnimGeneral_TeraCharge:: loadspritegfx ANIM_TAG_TERA_CRYSTAL loadspritegfx ANIM_TAG_TERA_SHATTER loadspritegfx ANIM_TAG_FOCUS_ENERGY @@ -27524,7 +28517,7 @@ TeraChargeParticles: createsprite gTeraCrystalSpreadSpriteTemplate, ANIM_TARGET, 0, 0, 10, 0 return -General_TeraActivate: +gBattleAnimGeneral_TeraActivate:: createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14 waitforvisualfinish @@ -27533,12 +28526,12 @@ General_TeraActivate: blendoff end -General_RestoreBg: +gBattleAnimGeneral_RestoreBg:: restorebg waitbgfadein end -General_ZMoveActivate: +gBattleAnimGeneral_ZMoveActivate:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_Z_MOVE_SYMBOL @Z-Move Symbol loadspritegfx ANIM_TAG_WHIP_HIT @green color @@ -27573,7 +28566,7 @@ ZMoveBuffEffect: delay 0x3 return -General_TotemFlare:: +gBattleAnimGeneral_TotemFlare:: loadspritegfx ANIM_TAG_FOCUS_ENERGY loadspritegfx ANIM_TAG_WHIP_HIT @green color loadspritegfx ANIM_TAG_SWEAT_BEAD @blue color @@ -27603,7 +28596,7 @@ RainbowEndureEffect: delay 0x3 return -General_GulpMissile: @ Tackle anim (placeholder) +gBattleAnimGeneral_GulpMissile:: @ Tackle anim (placeholder) loadspritegfx ANIM_TAG_IMPACT monbg ANIM_ATTACKER setalpha 12, 8 @@ -27617,7 +28610,7 @@ General_GulpMissile: @ Tackle anim (placeholder) blendoff end -General_StrongWinds:: +gBattleAnimGeneral_StrongWinds:: loadspritegfx ANIM_TAG_FLYING_DIRT playsewithpan SE_M_GUST, 0 createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_FLYING_DIRT, 0, 12, 12, RGB(20, 20, 20) @@ -27628,7 +28621,7 @@ General_StrongWinds:: stopsound end -General_PrimalReversion:: +gBattleAnimGeneral_PrimalReversion:: createvisualtask AnimTask_PrimalReversion, 0x5 jumpargeq 0x0, ITEM_RED_ORB, General_PrimalReversion_Omega jumpargeq 0x0, ITEM_BLUE_ORB, General_PrimalReversion_Alpha @@ -27687,7 +28680,7 @@ General_PrimalReversion_Omega: blendoff end -General_UltraBurst:: +gBattleAnimGeneral_UltraBurst:: loadspritegfx ANIM_TAG_ULTRA_BURST_SYMBOL loadspritegfx ANIM_TAG_SPARK_2 @spark loadspritegfx ANIM_TAG_LEAF @green @@ -27724,7 +28717,7 @@ General_UltraBurst:: blendoff end -General_AffectionHangedOn:: +gBattleAnimGeneral_AffectionHangedOn:: loadspritegfx ANIM_TAG_RED_HEART loopsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER, 12, 3 createvisualtask AnimTask_SwayMon, 5, 0, 12, 4096, 4, ANIM_ATTACKER @@ -27745,10 +28738,10 @@ General_AffectionHangedOn_3Hearts: waitforvisualfinish end -General_SaltCureDamage:: - goto Status_Freeze +gBattleAnimGeneral_SaltCureDamage:: + goto gBattleAnimStatus_Freeze -General_Rainbow:: +gBattleAnimGeneral_Rainbow:: call RainDrops delay 30 loadspritegfx ANIM_TAG_SUNLIGHT @@ -27771,15 +28764,24 @@ General_Rainbow:: clearmonbg ANIM_ATK_PARTNER end -General_SeaOfFire:: +gBattleAnimGeneral_SeaOfFire:: loadspritegfx ANIM_TAG_SMALL_EMBER monbg ANIM_DEF_PARTNER splitbgprio ANIM_TARGET playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET + fadetobg BG_FIRE + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 11, RGB(21, 2, 0) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_DEF_PARTNER, 2, 0, 11, RGB(21, 2, 0) call SeaOfFireTwisterDos delay 3 call SeaOfFireTwisterTres + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 10, 1 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 10, 1 waitforvisualfinish + restorebg + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 11, 0, RGB(21, 2, 0) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_DEF_PARTNER, 2, 11, 0, RGB(21, 2, 0) + waitbgfadein clearmonbg ANIM_DEF_PARTNER blendoff end @@ -27814,8 +28816,41 @@ SeaOfFireTwisterTres: delay 2 return -General_Swamp:: @ To do - goto Move_HAZE +gBattleAnimGeneral_Swamp:: + loadspritegfx ANIM_TAG_RAIN_DROPS + loadspritegfx ANIM_TAG_SMALL_BUBBLES + loadspritegfx ANIM_TAG_THOUGHT_BUBBLE + playsewithpan SE_M_RAIN_DANCE, SOUND_PAN_TARGET + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 0, 4, RGB_BLACK + waitforvisualfinish + createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60 + createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60 + createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SMALL_BUBBLES, 0, 4, 4, RGB(12, 11, 31) + delay 1 + waitforvisualfinish + fadetobg BG_SWAMP + createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60 + createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60 + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 0, 11, RGB(11, 26, 10) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_DEF_PARTNER, 2, 0, 11, RGB(11, 26, 10) + waitbgfadeout + delay 4 + createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60 + createvisualtask AnimTask_CreateRaindrops, 2, 0, 3, 60 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 10, 1 + createvisualtask AnimTask_ShakeMon2, 2, ANIM_DEF_PARTNER, 1, 0, 10, 1 + loopsewithpan SE_M_CRABHAMMER, SOUND_PAN_TARGET, 20, 3 + waitforvisualfinish + delay 10 + restorebg + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 11, 0, RGB(11, 26, 10) + createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_DEF_PARTNER, 2, 11, 0, RGB(11, 26, 10) + waitbgfadein + createvisualtask AnimTask_BlendBattleAnimPal, 10, (F_PAL_BG | F_PAL_BATTLERS_2), 2, 4, 0, RGB_BLACK + waitforvisualfinish + clearmonbg ANIM_DEF_PARTNER + blendoff + end SnatchMoveTrySwapFromSubstitute: createvisualtask AnimTask_IsAttackerBehindSubstitute, 2 @@ -27840,7 +28875,7 @@ SnatchMoveSwapMonForSubstitute: goto SnatchMoveTrySwapToSubstituteEnd @ Healthbox blue flash effect on level up -Special_LevelUp: +gBattleAnimSpecial_LevelUp:: playsewithpan SE_EXP_MAX, 0 createvisualtask AnimTask_LoadHealthboxPalsForLevelUp, 2 delay 0 @@ -27849,19 +28884,19 @@ Special_LevelUp: createvisualtask AnimTask_FreeHealthboxPalsForLevelUp, 2 end -Special_SwitchOutPlayerMon: +gBattleAnimSpecial_SwitchOutPlayerMon:: createvisualtask AnimTask_SwitchOutBallEffect, 2 delay 10 createvisualtask AnimTask_SwitchOutShrinkMon, 2 end -Special_SwitchOutOpponentMon: +gBattleAnimSpecial_SwitchOutOpponentMon:: createvisualtask AnimTask_SwitchOutBallEffect, 2 delay 10 createvisualtask AnimTask_SwitchOutShrinkMon, 2 end -Special_BallThrow: +gBattleAnimSpecial_BallThrow:: createvisualtask AnimTask_LoadBallGfx, 2 delay 0 playsewithpan SE_BALL_THROW, 0 @@ -27885,7 +28920,7 @@ BallThrowTrainerBlock: blendoff goto BallThrowEnd -Special_BallThrowWithTrainer: +gBattleAnimSpecial_BallThrowWithTrainer:: createvisualtask AnimTask_LoadBallGfx, 2 delay 0 createvisualtask AnimTask_ThrowBall_StandingTrainer, 2 @@ -27893,15 +28928,15 @@ Special_BallThrowWithTrainer: createvisualtask AnimTask_FreeBallGfx, 2 end -Special_SubstituteToMon: +gBattleAnimSpecial_SubstituteToMon:: createvisualtask AnimTask_SwapMonSpriteToFromSubstitute, 2, TRUE end -Special_MonToSubstitute: +gBattleAnimSpecial_MonToSubstitute:: createvisualtask AnimTask_SwapMonSpriteToFromSubstitute, 2, FALSE end -Special_CriticalCaptureBallThrow: +gBattleAnimSpecial_CriticalCaptureBallThrow:: createvisualtask AnimTask_LoadBallGfx, 2 delay 0 playsewithpan SE_FALL, 0 @@ -27911,7 +28946,7 @@ Special_CriticalCaptureBallThrow: goto BallThrowEnd @@@@@@@@@@ Z MOVES @@@@@@@@@@ -Move_BREAKNECK_BLITZ:: +gBattleAnimMove_BreakneckBlitz:: loadspritegfx ANIM_TAG_HOLLOW_ORB loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_HANDS_AND_FEET @@ -27992,7 +29027,7 @@ Move_BREAKNECK_BLITZ:: end -Move_ALL_OUT_PUMMELING:: +gBattleAnimMove_AllOutPummeling:: loadspritegfx ANIM_TAG_HANDS_AND_FEET loadspritegfx ANIM_TAG_IMPACT loadspritegfx ANIM_TAG_METEOR @@ -28082,7 +29117,7 @@ Move_ALL_OUT_PUMMELING:: end -Move_SUPERSONIC_SKYSTRIKE:: +gBattleAnimMove_SupersonicSkystrike:: loadspritegfx ANIM_TAG_ROUND_SHADOW @ fly loadspritegfx ANIM_TAG_MUD_SAND @ dig loadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy @@ -28155,7 +29190,7 @@ FinishSupersonicSkystrike: end -Move_ACID_DOWNPOUR:: +gBattleAnimMove_AcidDownpour:: loadspritegfx ANIM_TAG_BLUE_ORB @ reversal loadspritegfx ANIM_TAG_POISON_JAB @ poison jab loadspritegfx ANIM_TAG_POISON_BUBBLE @ poison bubbles @@ -28241,7 +29276,7 @@ AcidDownpourFlareOnAttacker: return -Move_TECTONIC_RAGE:: +gBattleAnimMove_TectonicRage:: loadspritegfx ANIM_TAG_DIRT_MOUND @ dig loadspritegfx ANIM_TAG_MUD_SAND @ rollout small rocks loadspritegfx ANIM_TAG_ROCKS @ rollout @@ -28358,7 +29393,7 @@ TectonicRageExplosion: return -Move_CONTINENTAL_CRUSH:: +gBattleAnimMove_ContinentalCrush:: loadspritegfx ANIM_TAG_ROUND_SHADOW @ fly loadspritegfx ANIM_TAG_MUD_SAND @ dig loadspritegfx ANIM_TAG_ROCKS @ rocks @@ -28506,7 +29541,7 @@ ContinentalCrushStockpileRocks: return -Move_SAVAGE_SPIN_OUT:: +gBattleAnimMove_SavageSpinOut:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge loadspritegfx ANIM_TAG_RAZOR_LEAF @green color loadspritegfx ANIM_TAG_STRING @string shot @@ -28659,7 +29694,7 @@ SlowSavageSpinOutBackgroundSpeed: return -Move_NEVER_ENDING_NIGHTMARE:: +gBattleAnimMove_NeverEndingNightmare:: loadspritegfx ANIM_TAG_THIN_RING @ring loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_ASSURANCE_HAND @purple hand @@ -28843,7 +29878,7 @@ NeverendingNightmareGeyser: return -Move_CORKSCREW_CRASH:: +gBattleAnimMove_CorkscrewCrash:: loadspritegfx ANIM_TAG_SPIKES @metal bits loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge loadspritegfx ANIM_TAG_CORKSCREW @drill @@ -28970,7 +30005,7 @@ CorkscrewCrashSprayRocks: return -Move_INFERNO_OVERDRIVE:: +gBattleAnimMove_InfernoOverdrive:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge loadspritegfx ANIM_TAG_SMALL_EMBER @fire createvisualtask AnimTask_BlendParticle, 0x5, ANIM_TAG_CIRCLE_OF_LIGHT, 0x0, 0xA, 0xA, 0x1F @@ -29080,7 +30115,7 @@ InfernoOverdriveExplosion: return -Move_HYDRO_VORTEX:: +gBattleAnimMove_HydroVortex:: loadspritegfx ANIM_TAG_SPLASH @dive loadspritegfx ANIM_TAG_SWEAT_BEAD @dive loadspritegfx ANIM_TAG_ICE_CRYSTALS @crabhammer bubbles @@ -29194,7 +30229,7 @@ HydroVortexWhirlpoolHurricane: return -Move_BLOOM_DOOM:: +gBattleAnimMove_BloomDoom:: loadspritegfx ANIM_TAG_FLOWER @petal loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge loadspritegfx ANIM_TAG_RAZOR_LEAF @green @@ -29388,7 +30423,7 @@ ResetFromGreenScreen: return -Move_GIGAVOLT_HAVOC:: +gBattleAnimMove_GigavoltHavoc:: loadspritegfx ANIM_TAG_HAVOC_SPEAR loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT loadspritegfx ANIM_TAG_ELECTRIC_ORBS @@ -29562,7 +30597,7 @@ HavocSpearSparkTarget: return -Move_SHATTERED_PSYCHE:: +gBattleAnimMove_ShatteredPsyche:: loadspritegfx ANIM_TAG_IMPACT @hit loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL @reflect loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge @@ -29723,7 +30758,7 @@ ShatteredPsycheFlingPlayer: return -Move_SUBZERO_SLAMMER:: +gBattleAnimMove_SubzeroSlammer:: loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice loadspritegfx ANIM_TAG_ICE_CUBE @glacier loadspritegfx ANIM_TAG_EXPLOSION_2 @explosion @@ -29874,7 +30909,7 @@ SubzeroSlammerIceSwirl: return -Move_DEVASTATING_DRAKE:: +gBattleAnimMove_DevastatingDrake:: loadspritegfx ANIM_TAG_PURPLE_DRAKE loadspritegfx ANIM_TAG_POISON_BUBBLE @ purple loadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy @@ -30094,7 +31129,7 @@ DevastatingDrakeExplosion: return -Move_BLACK_HOLE_ECLIPSE:: +gBattleAnimMove_BlackHoleEclipse:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @shock wave loadspritegfx ANIM_TAG_SHADOW_BALL @shadow ball @@ -30236,7 +31271,7 @@ ResetFromWhiteScreen: return -Move_TWINKLE_TACKLE:: +gBattleAnimMove_TwinkleTackle:: loadspritegfx ANIM_TAG_SPARKLE_2 @star loadspritegfx ANIM_TAG_PINK_PETAL @pink loadspritegfx ANIM_TAG_THIN_RING @ring @@ -30394,7 +31429,7 @@ TwinkleTackleStarsTarget: return @ signature z moves -Move_CATASTROPIKA:: +gBattleAnimMove_Catastropika:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_ROUND_SHADOW @fly invisible ANIM_TARGET @@ -30568,7 +31603,7 @@ CatastropikaThundering: return -Move_10000000_VOLT_THUNDERBOLT:: +gBattleAnimMove_10000000VoltThunderbolt:: loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_ROUND_SHADOW @fly @@ -30832,7 +31867,7 @@ TenMillionVoltThunderboltSparkGeyser: return -Move_STOKED_SPARKSURFER:: +gBattleAnimMove_StokedSparksurfer:: loadspritegfx ANIM_TAG_ROUND_SHADOW @fly loadspritegfx ANIM_TAG_SPARK_2 @spark invisible ANIM_TARGET @@ -30967,7 +32002,7 @@ StokedSparksurferSparkGeyser: return -Move_EXTREME_EVOBOOST:: +gBattleAnimMove_ExtremeEvoboost:: loadspritegfx ANIM_TAG_LEER @leer createvisualtask AnimTask_BlendBattleAnimPal, 0xa, (F_PAL_BG | F_PAL_BATTLERS_2), 0x3, 0x0, 0x10, 0x0000 waitforvisualfinish @@ -31105,7 +32140,7 @@ ExtremeEvoboostColorCharge: return -Move_PULVERIZING_PANCAKE:: +gBattleAnimMove_PulverizingPancake:: loadspritegfx ANIM_TAG_SPARKLE_4 @detect loadspritegfx ANIM_TAG_VERTICAL_HEX @red loadspritegfx ANIM_TAG_MUD_SAND @dig @@ -31219,7 +32254,7 @@ PulverizingPancakeExplosion: return -Move_GENESIS_SUPERNOVA:: +gBattleAnimMove_GenesisSupernova:: loadspritegfx ANIM_TAG_BLUE_ORB @reversal loadspritegfx ANIM_TAG_POISON_BUBBLE @poison bubble loadspritegfx ANIM_TAG_POISON_JAB @purple @@ -31406,7 +32441,7 @@ GenesisSupernovaBuffOpponent_2: return -Move_SINISTER_ARROW_RAID:: +gBattleAnimMove_SinisterArrowRaid:: loadspritegfx ANIM_TAG_ROUND_SHADOW @fly loadspritegfx ANIM_TAG_SPIRIT_ARROW @arrow loadspritegfx ANIM_TAG_LEAF @green @@ -31714,7 +32749,7 @@ SinisterArrowRaidFinalExplosion: return -Move_MALICIOUS_MOONSAULT:: +gBattleAnimMove_MaliciousMoonsault:: loadspritegfx ANIM_TAG_FIRE_PLUME @dragon rage loadspritegfx ANIM_TAG_ROUND_SHADOW @fly loadspritegfx ANIM_TAG_VERTICAL_HEX @red @@ -31834,7 +32869,7 @@ MaliciousMoonsaultExplosion: return -Move_OCEANIC_OPERETTA:: +gBattleAnimMove_OceanicOperetta:: createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA waitforvisualfinish loadspritegfx ANIM_TAG_SPOTLIGHT @@ -32020,7 +33055,7 @@ OceanicOperettaExplosion: return -Move_SPLINTERED_STORMSHARDS:: +gBattleAnimMove_SplinteredStormshards:: loadspritegfx ANIM_TAG_ROCKS @rock loadspritegfx ANIM_TAG_ICICLE_SPEAR @spear createvisualtask AnimTask_AllBattlersInvisibleExceptAttackerAndTarget, 0xA @@ -32279,7 +33314,7 @@ SplinteredStormshardsFinishFadeReturn: return -Move_LETS_SNUGGLE_FOREVER:: +gBattleAnimMove_LetsSnuggleForever:: loadspritegfx ANIM_TAG_MAGENTA_HEART @sharm loadspritegfx ANIM_TAG_MUSIC_NOTES @music note loadspritegfx ANIM_TAG_SMALL_BUBBLES @fake tears @@ -32407,7 +33442,7 @@ LetsSnuggleForeverStars_2: return -Move_CLANGOROUS_SOULBLAZE:: +gBattleAnimMove_ClangorousSoulblaze:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_WATER_ORB @blue loadspritegfx ANIM_TAG_POISON_BUBBLE @purple @@ -32426,6 +33461,9 @@ Move_CLANGOROUS_SOULBLAZE:: createsprite gClangorousSoulRedFistTemplate, ANIM_ATTACKER, 2, 0x10, 0x0, 0x0, 0x0, 0xa, ANIM_ATTACKER, ANIM_LEFT_FIST, 0x1 playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET waitforvisualfinish + unloadspritegfx ANIM_TAG_HORSESHOE_SIDE_FIST + unloadspritegfx ANIM_TAG_SPARKLE_2 @stars + waitforvisualfinish loadspritegfx ANIM_TAG_THIN_RING @ring playsewithpan SE_SHINY, SOUND_PAN_ATTACKER createsprite gClangorousSoulRedRingTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0 @@ -32691,7 +33729,7 @@ ClangorousSoulblazePulse_5: return -Move_GUARDIAN_OF_ALOLA:: +gBattleAnimMove_GuardianOfAlola:: loadspritegfx ANIM_TAG_THIN_RING @ring loadspritegfx ANIM_TAG_MUD_SAND @dig loadspritegfx ANIM_TAG_SPEED_DUST @extremespeed @@ -32789,7 +33827,7 @@ GuardianOfAlolaRockGeyser: return -Move_SEARING_SUNRAZE_SMASH:: +gBattleAnimMove_SearingSunrazeSmash:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_SPARKLE_2 @sparkles invisible ANIM_TARGET @@ -33018,7 +34056,7 @@ ResetFromRedScreen: return -Move_MENACING_MOONRAZE_MAELSTROM:: +gBattleAnimMove_MenacingMoonrazeMaelstrom:: loadspritegfx ANIM_TAG_FOCUS_ENERGY @focus energy loadspritegfx ANIM_TAG_SPARKLE_2 @sparkles loadspritegfx ANIM_TAG_WATER_ORB @blue @@ -33209,7 +34247,7 @@ MenacingMoonrazeMaelstromBeam: return -Move_LIGHT_THAT_BURNS_THE_SKY:: +gBattleAnimMove_LightThatBurnsTheSky:: loadspritegfx ANIM_TAG_SPARK_2 @spark loadspritegfx ANIM_TAG_LEAF @green loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge particles @@ -33367,7 +34405,7 @@ LightThatBurnsTheSkyGreenSparks: return -Move_SOUL_STEALING_7_STAR_STRIKE:: +gBattleAnimMove_SoulStealing7StarStrike:: loadspritegfx ANIM_TAG_ROUND_SHADOW @bounce loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice blue loadspritegfx ANIM_TAG_WISP_FIRE @will o wisp @@ -33541,178 +34579,178 @@ SoulStealingSevenStarStrikeExplosion: return @@@@@@@@@@ MAX MOVES @@@@@@@@@@ -General_SetWeather:: +gBattleAnimGeneral_SetWeather:: createvisualtask AnimTask_GetWeatherToSet, 2 - jumpreteq 1, General_Sun - jumpreteq 2, General_Rain - jumpreteq 3, General_Sandstorm - jumpreteq 4, General_Hail + jumpreteq 1, gBattleAnimGeneral_Sun + jumpreteq 2, gBattleAnimGeneral_Rain + jumpreteq 3, gBattleAnimGeneral_Sandstorm + jumpreteq 4, gBattleAnimGeneral_Hail end -Move_MAX_GUARD:: +gBattleAnimMove_MaxGuard:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_PROTECT + goto gBattleAnimMove_Protect end -Move_MAX_STRIKE:: -Move_G_MAX_REPLENISH:: +gBattleAnimMove_MaxStrike:: +gBattleAnimMove_GMaxReplenish:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_GIGA_IMPACT + goto gBattleAnimMove_GigaImpact end -Move_MAX_AIRSTREAM:: -Move_G_MAX_WIND_RAGE:: +gBattleAnimMove_MaxAirstream:: +gBattleAnimMove_GMaxWindRage:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_AEROBLAST + goto gBattleAnimMove_Aeroblast end -Move_MAX_OOZE:: -Move_G_MAX_MALODOR:: +gBattleAnimMove_MaxOoze:: +gBattleAnimMove_GMaxMalodor:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_GUNK_SHOT + goto gBattleAnimMove_GunkShot end -Move_G_MAX_WILDFIRE:: -Move_G_MAX_FIREBALL:: -Move_G_MAX_CENTIFERNO:: -Move_MAX_FLARE:: +gBattleAnimMove_GMaxWildfire:: +gBattleAnimMove_GMaxFireball:: +gBattleAnimMove_GMaxCentiferno:: +gBattleAnimMove_MaxFlare:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_BLAST_BURN + goto gBattleAnimMove_BlastBurn end -Move_G_MAX_CANNONADE:: -Move_G_MAX_HYDROSNIPE:: -Move_G_MAX_FOAM_BURST:: -Move_MAX_GEYSER:: +gBattleAnimMove_GMaxCannonade:: +gBattleAnimMove_GMaxHydrosnipe:: +gBattleAnimMove_GMaxFoamBurst:: +gBattleAnimMove_MaxGeyser:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_HYDRO_CANNON + goto gBattleAnimMove_HydroCannon end -Move_G_MAX_VINE_LASH:: -Move_G_MAX_DRUM_SOLO:: -Move_G_MAX_TARTNESS:: -Move_G_MAX_SWEETNESS:: -Move_MAX_OVERGROWTH:: +gBattleAnimMove_GMaxVineLash:: +gBattleAnimMove_GMaxDrumSolo:: +gBattleAnimMove_GMaxTartness:: +gBattleAnimMove_GMaxSweetness:: +gBattleAnimMove_MaxOvergrowth:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_FRENZY_PLANT + goto gBattleAnimMove_FrenzyPlant end -Move_MAX_LIGHTNING:: -Move_G_MAX_STUN_SHOCK:: +gBattleAnimMove_MaxLightning:: +gBattleAnimMove_GMaxStunShock:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_ZAP_CANNON + goto gBattleAnimMove_ZapCannon end -Move_G_MAX_CHI_STRIKE:: -Move_G_MAX_ONE_BLOW:: -Move_G_MAX_RAPID_FLOW:: -Move_MAX_KNUCKLE:: +gBattleAnimMove_GMaxChiStrike:: +gBattleAnimMove_GMaxOneBlow:: +gBattleAnimMove_GMaxRapidFlow:: +gBattleAnimMove_MaxKnuckle:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_CLOSE_COMBAT + goto gBattleAnimMove_CloseCombat end -Move_G_MAX_RESONANCE:: -Move_MAX_HAILSTORM:: +gBattleAnimMove_GMaxResonance:: +gBattleAnimMove_MaxHailstorm:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_SHEER_COLD + goto gBattleAnimMove_SheerCold end -Move_G_MAX_SANDBLAST:: -Move_MAX_QUAKE:: +gBattleAnimMove_GMaxSandblast:: +gBattleAnimMove_MaxQuake:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_FISSURE + goto gBattleAnimMove_Fissure end -Move_G_MAX_BEFUDDLE:: -Move_MAX_FLUTTERBY:: +gBattleAnimMove_GMaxBefuddle:: +gBattleAnimMove_MaxFlutterby:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_BUG_BUZZ + goto gBattleAnimMove_BugBuzz end -Move_G_MAX_STEELSURGE:: -Move_G_MAX_MELTDOWN:: -Move_MAX_STEELSPIKE:: +gBattleAnimMove_GMaxSteelsurge:: +gBattleAnimMove_GMaxMeltdown:: +gBattleAnimMove_MaxSteelspike:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_HEAVY_SLAM + goto gBattleAnimMove_HeavySlam end -Move_G_MAX_TERROR:: -Move_MAX_PHANTASM:: +gBattleAnimMove_GMaxTerror:: +gBattleAnimMove_MaxPhantasm:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_PHANTOM_FORCE + goto gBattleAnimMove_PhantomForce end -Move_G_MAX_GRAVITAS:: -Move_MAX_MINDSTORM:: +gBattleAnimMove_GMaxGravitas:: +gBattleAnimMove_MaxMindstorm:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_PSYCHO_BOOST + goto gBattleAnimMove_PsychoBoost end -Move_G_MAX_SMITE:: -Move_G_MAX_FINALE:: -Move_MAX_STARFALL:: +gBattleAnimMove_GMaxSmite:: +gBattleAnimMove_GMaxFinale:: +gBattleAnimMove_MaxStarfall:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_MOONBLAST + goto gBattleAnimMove_Moonblast end -Move_G_MAX_STONESURGE:: -Move_G_MAX_VOLCALITH:: -Move_MAX_ROCKFALL:: +gBattleAnimMove_GMaxStonesurge:: +gBattleAnimMove_GMaxVolcalith:: +gBattleAnimMove_MaxRockfall:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_ROCK_WRECKER + goto gBattleAnimMove_RockWrecker end -Move_G_MAX_DEPLETION:: -Move_MAX_WYRMWIND:: +gBattleAnimMove_GMaxDepletion:: +gBattleAnimMove_MaxWyrmwind:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_SPACIAL_REND + goto gBattleAnimMove_SpacialRend end -Move_G_MAX_SNOOZE:: -Move_MAX_DARKNESS:: +gBattleAnimMove_GMaxSnooze:: +gBattleAnimMove_MaxDarkness:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_DARK_PULSE + goto gBattleAnimMove_DarkPulse end -Move_G_MAX_CUDDLE:: +gBattleAnimMove_GMaxCuddle:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_COVET + goto gBattleAnimMove_Covet end -Move_G_MAX_VOLT_CRASH:: +gBattleAnimMove_GMaxVoltCrash:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_VOLT_TACKLE + goto gBattleAnimMove_VoltTackle end -Move_G_MAX_GOLD_RUSH:: +gBattleAnimMove_GMaxGoldRush:: createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1 waitforvisualfinish - goto Move_PAY_DAY + goto gBattleAnimMove_PayDay end @@@ DYNAMAX AND MAX RAIDS -General_DynamaxGrowth:: @ PORTED FROM CFRU +gBattleAnimGeneral_DynamaxGrowth:: @ PORTED FROM CFRU createvisualtask SoundTask_PlayCryWithEcho, 2, ANIM_ATTACKER, 2 delay 8 createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x0 diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 3b38c00478..04784ccdac 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -30,6 +30,19 @@ BattleScript_DamageToQuarterTargetHP:: damagetoquartertargethp goto BattleScript_HitFromAtkAnimation +BattleScript_EffectFickleBeam:: + attackcanceler + attackstring + ppreduce + accuracycheck BattleScript_MoveMissedPause, ACC_CURR_MOVE + ficklebeamdamagecalculation + goto BattleScript_HitFromCritCalc +BattleScript_FickleBeamDoubled:: + pause B_WAIT_TIME_SHORTEST + printstring STRINGID_FICKLEBEAMDOUBLED + waitmessage B_WAIT_TIME_LONG + goto BattleScript_HitFromCritCalc + BattleScript_Terastallization:: @ TODO: no string prints in S/V, but right now this helps with clarity printstring STRINGID_PKMNSTORINGENERGY @@ -495,7 +508,7 @@ BattleScript_EffectAttackUpUserAlly_TryAlly: BattleScript_EffectAttackUpUserAlly_End: goto BattleScript_MoveEnd BattleScript_EffectAttackUpUserAlly_TryAlly_: - jumpifability BS_ATTACKER_PARTNER, ABILITY_SOUNDPROOF, BattleScript_EffectAttackUpUserAlly_TryAllyBlocked + jumpifblockedbysoundproof BS_ATTACKER_PARTNER, BattleScript_EffectAttackUpUserAlly_TryAllyBlocked setstatchanger STAT_ATK, 1, FALSE statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectAttackUpUserAlly_End jumpifbyte CMP_NOT_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectAttackUpUserAlly_AllyAnim @@ -565,7 +578,7 @@ BattleScript_Teatimerod: statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TeatimeBuffer jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_TeatimeBuffer printfromtable gStatUpStringIds - waitmessage 0x40 + waitmessage B_WAIT_TIME_LONG moveendto MOVEEND_NEXT_TARGET jumpifnexttargetvalid BattleScript_TeatimeLoop moveendcase MOVEEND_CLEAR_BITS @@ -577,7 +590,7 @@ BattleScript_Teatimemotor: statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_TeatimeBuffer jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, 0x2, BattleScript_TeatimeBuffer printfromtable gStatUpStringIds - waitmessage 0x40 + waitmessage B_WAIT_TIME_LONG moveendto MOVEEND_NEXT_TARGET jumpifnexttargetvalid BattleScript_TeatimeLoop moveendcase MOVEEND_CLEAR_BITS @@ -865,6 +878,7 @@ BattleScript_OctlockTurnDmgEnd: BattleScript_EffectPoltergeist:: attackcanceler + accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE attackstring ppreduce checkpoltergeist BS_TARGET, BattleScript_ButItFailed @@ -888,7 +902,7 @@ BattleScript_EffectTarShot:: printfromtable gStatDownStringIds waitmessage B_WAIT_TIME_LONG BattleScript_TryTarShot: - trytarshot BS_TARGET, BattleScript_MoveEnd + trytarshot BattleScript_MoveEnd printstring STRINGID_PKMNBECAMEWEAKERTOFIRE waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd @@ -914,19 +928,10 @@ BattleScript_BothCanNoLongerEscape:: return BattleScript_EffectHyperspaceFury:: - jumpifspecies BS_ATTACKER, SPECIES_HOOPA_UNBOUND, BattleScript_EffectHyperspaceFuryUnbound + jumpifspecies BS_ATTACKER, SPECIES_HOOPA_UNBOUND, BattleScript_EffectHit jumpifspecies BS_ATTACKER, SPECIES_HOOPA_CONFINED, BattleScript_ButHoopaCantUseIt goto BattleScript_PokemonCantUseTheMove -BattleScript_EffectHyperspaceFuryUnbound:: - attackcanceler - accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE - attackstring - pause B_WAIT_TIME_LONG - ppreduce - seteffectprimary MOVE_EFFECT_FEINT - goto BattleScript_HitFromCritCalc - BattleScript_ButHoopaCantUseIt: printstring STRINGID_BUTHOOPACANTUSEIT waitmessage B_WAIT_TIME_LONG @@ -1752,6 +1757,8 @@ BattleScript_EffectInstruct:: tryinstruct BattleScript_ButItFailed attackanimation waitanimation + copybyte gBattlerAttacker, gBattlerTarget + copybyte gBattlerTarget, gEffectBattler printstring STRINGID_USEDINSTRUCTEDMOVE waitmessage B_WAIT_TIME_LONG setbyte sB_ANIM_TURN, 0 @@ -1831,7 +1838,7 @@ BattleScript_HitSwitchTargetForceRandomSwitchFailed: goto BattleScript_MoveEnd BattleScript_EffectToxicThread:: - setstatchanger STAT_SPEED, 2, TRUE + setstatchanger STAT_SPEED, 1, TRUE attackcanceler jumpifsubstituteblocks BattleScript_FailedFromAtkString jumpifstat BS_TARGET, CMP_NOT_EQUAL, STAT_SPEED, MIN_STAT_STAGE, BattleScript_ToxicThreadWorks @@ -4274,7 +4281,7 @@ BattleScript_EffectPerishSong:: waitmessage B_WAIT_TIME_LONG setbyte gBattlerTarget, 0 BattleScript_PerishSongLoop:: - jumpifability BS_TARGET, ABILITY_SOUNDPROOF, BattleScript_PerishSongBlocked + jumpifblockedbysoundproof BS_TARGET, BattleScript_PerishSongBlocked jumpifpranksterblocked BS_TARGET, BattleScript_PerishSongNotAffected BattleScript_PerishSongLoopIncrement:: addbyte gBattlerTarget, 1 @@ -4717,6 +4724,9 @@ BattleScript_ButItFailed:: resultmessage waitmessage B_WAIT_TIME_LONG goto BattleScript_MoveEnd +BattleScript_RestoreAttackerButItFailed: + restoreattacker + goto BattleScript_ButItFailed BattleScript_NotAffected:: pause B_WAIT_TIME_SHORT @@ -5596,13 +5606,13 @@ BattleScript_LocalTrainerBattleWon:: BattleScript_LocalTwoTrainersDefeated:: printstring STRINGID_TWOENEMIESDEFEATED BattleScript_LocalBattleWonLoseTexts:: - trainerslidein BS_ATTACKER + trainerslidein BS_OPPONENT1 waitstate printstring STRINGID_TRAINER1LOSETEXT jumpifnotbattletype BATTLE_TYPE_TWO_OPPONENTS, BattleScript_LocalBattleWonReward - trainerslideout B_POSITION_OPPONENT_LEFT + trainerslideout BS_OPPONENT1 waitstate - trainerslidein BS_FAINTED + trainerslidein BS_OPPONENT2 waitstate printstring STRINGID_TRAINER2LOSETEXT BattleScript_LocalBattleWonReward:: @@ -5654,15 +5664,15 @@ BattleScript_LocalBattleLostPrintTrainersWinText:: waitstate returnopponentmon2toball BS_ATTACKER waitstate - trainerslidein BS_ATTACKER + trainerslidein BS_OPPONENT1 waitstate printstring STRINGID_TRAINER1WINTEXT jumpifbattletype BATTLE_TYPE_TOWER_LINK_MULTI, BattleScript_LocalBattleLostDoTrainer2WinText jumpifnotbattletype BATTLE_TYPE_TWO_OPPONENTS, BattleScript_LocalBattleLostEnd_ BattleScript_LocalBattleLostDoTrainer2WinText:: - trainerslideout B_POSITION_OPPONENT_LEFT + trainerslideout BS_OPPONENT1 waitstate - trainerslidein BS_FAINTED + trainerslidein BS_OPPONENT2 waitstate printstring STRINGID_TRAINER2WINTEXT BattleScript_LocalBattleLostEnd_:: @@ -5673,12 +5683,12 @@ BattleScript_FrontierLinkBattleLost:: waitstate returnopponentmon2toball BS_ATTACKER waitstate - trainerslidein BS_ATTACKER + trainerslidein BS_OPPONENT1 waitstate printstring STRINGID_TRAINER1WINTEXT - trainerslideout B_POSITION_OPPONENT_LEFT + trainerslideout BS_OPPONENT1 waitstate - trainerslidein BS_FAINTED + trainerslidein BS_OPPONENT2 waitstate printstring STRINGID_TRAINER2WINTEXT jumpifbattletype BATTLE_TYPE_RECORDED, BattleScript_FrontierLinkBattleLostEnd @@ -5701,12 +5711,12 @@ BattleScript_TowerLinkBattleWon:: playtrainerdefeatbgm BS_ATTACKER printstring STRINGID_BATTLEEND waitmessage B_WAIT_TIME_LONG - trainerslidein BS_ATTACKER + trainerslidein BS_OPPONENT1 waitstate printstring STRINGID_TRAINER1LOSETEXT - trainerslideout B_POSITION_OPPONENT_LEFT + trainerslideout BS_OPPONENT1 waitstate - trainerslidein BS_FAINTED + trainerslidein BS_OPPONENT2 waitstate printstring STRINGID_TRAINER2LOSETEXT jumpifbattletype BATTLE_TYPE_RECORDED, BattleScript_TowerLinkBattleWonEnd @@ -5723,13 +5733,13 @@ BattleScript_FrontierTrainerBattleWon:: BattleScript_FrontierTrainerBattleWon_TwoDefeated: printstring STRINGID_TWOENEMIESDEFEATED BattleScript_FrontierTrainerBattleWon_LoseTexts: - trainerslidein BS_ATTACKER + trainerslidein BS_OPPONENT1 waitstate printstring STRINGID_TRAINER1LOSETEXT jumpifnotbattletype BATTLE_TYPE_TWO_OPPONENTS, BattleScript_TryPickUpItems - trainerslideout B_POSITION_OPPONENT_LEFT + trainerslideout BS_OPPONENT1 waitstate - trainerslidein BS_FAINTED + trainerslidein BS_OPPONENT2 waitstate printstring STRINGID_TRAINER2LOSETEXT BattleScript_TryPickUpItems: @@ -6356,6 +6366,7 @@ BattleScript_StickyWebOnSwitchInPrintStatMsg: BattleScript_StickyWebOnSwitchInEnd: restoretarget restoreattacker + setbyte sSTICKY_WEB_STAT_DROP, 0 return BattleScript_PerishSongTakesLife:: @@ -6452,12 +6463,14 @@ BattleScript_SeedSowerActivates:: return BattleScript_AngerShellActivates:: + saveattacker + copybyte gBattlerAttacker, gBattlerTarget call BattleScript_AbilityPopUp jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_AngerShellTryDef jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_SPATK, MAX_STAT_STAGE, BattleScript_AngerShellTryDef jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_SPEED, MAX_STAT_STAGE, BattleScript_AngerShellTryDef jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_AngerShellTryDef - jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_ButItFailed + jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPDEF, MIN_STAT_STAGE, BattleScript_RestoreAttackerButItFailed BattleScript_AngerShellTryDef:: setbyte sSTAT_ANIM_PLAYED, FALSE modifybattlerstatstage BS_ATTACKER, STAT_DEF, DECREASE, 1, BattleScript_AngerShellTrySpDef, ANIM_ON @@ -6471,6 +6484,7 @@ BattleScript_AngerShellTrySpAtk: BattleScript_AngerShellTrySpeed: modifybattlerstatstage BS_ATTACKER, STAT_SPEED, INCREASE, 1, BattleScript_AngerShellRet, ANIM_ON BattleScript_AngerShellRet: + restoreattacker return BattleScript_WindPowerActivates:: @@ -7135,7 +7149,7 @@ BattleScript_TargetFormChangeWithStringNoPopup:: BattleScript_BattlerFormChangeWithStringEnd3:: pause 5 - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpScripting flushtextbox handleformchange BS_SCRIPTING, 0 handleformchange BS_SCRIPTING, 1 @@ -7739,6 +7753,15 @@ BattleScript_CheekPouchActivates:: copybyte gBattlerAttacker, sSAVED_BATTLER return +BattleScript_PickupActivates:: + pause 5 + tryrecycleitem BattleScript_PickupActivatesEnd + call BattleScript_AbilityPopUp + printstring STRINGID_XFOUNDONEY + waitmessage B_WAIT_TIME_LONG +BattleScript_PickupActivatesEnd: + end3 + BattleScript_HarvestActivates:: pause 5 tryrecycleitem BattleScript_HarvestActivatesEnd @@ -7986,7 +8009,7 @@ BattleScript_DeltaStreamActivates:: end3 BattleScript_ProtosynthesisActivates:: - call BattleScript_AbilityPopUp + call BattleScript_AbilityPopUpScripting printstring STRINGID_SUNLIGHTACTIVATEDABILITY waitmessage B_WAIT_TIME_MED printstring STRINGID_STATWASHEIGHTENED diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s index 6238afb36c..be6c04e32e 100644 --- a/data/battle_scripts_2.s +++ b/data/battle_scripts_2.s @@ -45,7 +45,7 @@ BattleScript_UseItemMessage: printfromtable gTrainerUsedItemStringIds waitmessage B_WAIT_TIME_LONG return - + BattleScript_ItemRestoreHPRet: bichalfword gMoveResultFlags, MOVE_RESULT_NO_EFFECT orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE @@ -238,7 +238,7 @@ BattleScript_ActionWallyThrow: waitmessage B_WAIT_TIME_LONG returnatktoball waitstate - trainerslidein BS_TARGET + trainerslidein BS_PLAYER1 waitstate printstring STRINGID_YOUTHROWABALLNOWRIGHT waitmessage B_WAIT_TIME_LONG @@ -246,10 +246,10 @@ BattleScript_ActionWallyThrow: BattleScript_TrainerASlideMsgRet:: handletrainerslidemsg BS_SCRIPTING, 0 - trainerslidein B_POSITION_OPPONENT_LEFT + trainerslidein BS_OPPONENT1 handletrainerslidemsg BS_SCRIPTING, 1 waitstate - trainerslideout B_POSITION_OPPONENT_LEFT + trainerslideout BS_OPPONENT1 waitstate handletrainerslidemsg BS_SCRIPTING, 2 return @@ -260,10 +260,10 @@ BattleScript_TrainerASlideMsgEnd2:: BattleScript_TrainerBSlideMsgRet:: handletrainerslidemsg BS_SCRIPTING, 0 - trainerslidein B_POSITION_OPPONENT_RIGHT + trainerslidein BS_OPPONENT2 handletrainerslidemsg BS_SCRIPTING, 1 waitstate - trainerslideout B_POSITION_OPPONENT_RIGHT + trainerslideout BS_OPPONENT2 waitstate handletrainerslidemsg BS_SCRIPTING, 2 return diff --git a/data/event_scripts.s b/data/event_scripts.s index d4393ac9d4..2ef99d34fb 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -724,6 +724,11 @@ EventScript_BackupMrBrineyLocation:: .include "data/scripts/rival_graphics.inc" .include "data/scripts/set_gym_trainers.inc" +EventScript_CancelMessageBox:: + special UseBlankMessageToCancelPokemonPic + release + end + Common_EventScript_ShowBagIsFull:: msgbox gText_TooBadBagIsFull, MSGBOX_DEFAULT release @@ -1103,7 +1108,6 @@ EventScript_VsSeekerChargingDone:: .include "data/text/contest_strings.inc" .include "data/text/contest_link.inc" .include "data/text/contest_painting.inc" - .include "data/text/trick_house_mechadolls.inc" .include "data/scripts/tv.inc" .include "data/text/tv.inc" .include "data/scripts/interview.inc" @@ -1144,6 +1148,5 @@ EventScript_VsSeekerChargingDone:: .include "data/scripts/trainer_hill.inc" .include "data/scripts/test_signpost.inc" .include "data/scripts/follower.inc" - .include "data/text/frontier_brain.inc" .include "data/text/save.inc" .include "data/text/birch_speech.inc" diff --git a/data/maps/MtChimney/scripts.inc b/data/maps/MtChimney/scripts.inc index b4becfabee..fbd0da31ae 100644 --- a/data/maps/MtChimney/scripts.inc +++ b/data/maps/MtChimney/scripts.inc @@ -111,6 +111,7 @@ MtChimney_EventScript_LavaCookieLady:: msgbox MtChimney_Text_ThankYouDear, MSGBOX_DEFAULT checkitemspace ITEM_LAVA_COOKIE call_if_eq VAR_RESULT, TRUE, MtChimney_EventScript_RemoveMoney +.if OW_SHOW_ITEM_DESCRIPTIONS == OW_ITEM_DESCRIPTIONS_OFF giveitem ITEM_LAVA_COOKIE goto_if_eq VAR_RESULT, FALSE, MtChimney_EventScript_BagIsFull hidemoneybox @@ -122,6 +123,19 @@ MtChimney_EventScript_BagIsFull:: hidemoneybox release end +.else + hidemoneybox + giveitem ITEM_LAVA_COOKIE + goto_if_eq VAR_RESULT, FALSE, MtChimney_EventScript_BagIsFull + release + end + +MtChimney_EventScript_BagIsFull:: + msgbox gText_TooBadBagIsFull, MSGBOX_DEFAULT + release + end +.endif @ OW_SHOW_ITEM_DESCRIPTIONS + MtChimney_EventScript_RemoveMoney:: removemoney 200 diff --git a/data/maps/Route109_SeashoreHouse/scripts.inc b/data/maps/Route109_SeashoreHouse/scripts.inc index afb2a4aa0d..d871596b9a 100644 --- a/data/maps/Route109_SeashoreHouse/scripts.inc +++ b/data/maps/Route109_SeashoreHouse/scripts.inc @@ -52,8 +52,13 @@ Route109_SeashoreHouse_EventScript_BuySodaPop:: msgbox Route109_SeashoreHouse_Text_HereYouGo, MSGBOX_DEFAULT removemoney 300 updatemoneybox +.if OW_SHOW_ITEM_DESCRIPTIONS != OW_ITEM_DESCRIPTIONS_OFF + hidemoneybox + giveitem ITEM_SODA_POP +.else giveitem ITEM_SODA_POP hidemoneybox +.endif release end diff --git a/data/scripts/berry_tree.inc b/data/scripts/berry_tree.inc index 4f4f723f1c..fc9abe960d 100644 --- a/data/scripts/berry_tree.inc +++ b/data/scripts/berry_tree.inc @@ -176,6 +176,8 @@ BerryTree_EventScript_PickBerry:: special IncrementDailyPickedBerries special ObjectEventInteractionRemoveBerryTree message BerryTree_Text_PickedTheBerry + delay 10 + showberrydescription playfanfare MUS_OBTAIN_BERRY waitmessage waitfanfare @@ -183,6 +185,7 @@ BerryTree_EventScript_PickBerry:: message BerryTree_Text_PutAwayBerry waitmessage waitbuttonpress + hideitemdescription release end diff --git a/data/scripts/debug.inc b/data/scripts/debug.inc index 12dc693fd0..4851c87c40 100644 --- a/data/scripts/debug.inc +++ b/data/scripts/debug.inc @@ -1,4 +1,3 @@ -.if DEBUG_OVERWORLD_MENU == TRUE Debug_MessageEnd: waitmessage waitbuttonpress @@ -448,5 +447,3 @@ Debug_EventScript_EWRAMCounters:: Debug_EventScript_EWRAMCounters_Text:: .string "Follower Steps: {STR_VAR_1}.\n" .string "Fishing Chain: {STR_VAR_2}.$" - -.endif diff --git a/data/scripts/obtain_item.inc b/data/scripts/obtain_item.inc index d052fa7004..c54b2f8dc5 100644 --- a/data/scripts/obtain_item.inc +++ b/data/scripts/obtain_item.inc @@ -2,6 +2,7 @@ .set AMOUNT, VAR_0x8001 Std_ObtainItem:: + copyvar VAR_0x8006, ITEMID additem ITEMID, AMOUNT copyvar VAR_0x8007, VAR_RESULT call EventScript_ObtainItemMessage @@ -58,8 +59,11 @@ EventScript_ObtainedItem:: EventScript_ObtainedItemMessage: message gText_ObtainedTheItem EventScript_ContinueObtainedItem: + delay 10 + showitemdescription waitfanfare msgbox gText_PutItemInPocket, MSGBOX_DEFAULT + hideitemdescription setvar VAR_RESULT, TRUE return @@ -103,6 +107,7 @@ Std_FindItem:: lock faceplayer waitse + copyvar VAR_0x8006, ITEMID copyvar VAR_0x8004, ITEMID copyvar VAR_0x8005, AMOUNT checkitemspace ITEMID, AMOUNT @@ -118,20 +123,25 @@ Std_FindItem:: EventScript_PickUpItem:: removeobject VAR_LAST_TALKED additem VAR_0x8004, VAR_0x8005 + copyvar VAR_0x8006 VAR_0x8004 specialvar VAR_RESULT, BufferTMHMMoveName copyvar VAR_0x8008, VAR_RESULT call_if_eq VAR_0x8008, TRUE, EventScript_FoundTMHM call_if_eq VAR_0x8008, FALSE, EventScript_FoundItem + delay 10 + showitemdescription waitfanfare waitmessage bufferitemnameplural STR_VAR_2, VAR_0x8004, VAR_0x8005 pyramid_inchallenge goto_if_eq VAR_RESULT, TRUE, EventScript_PutBattlePyramidItemInBag msgbox gText_PutItemInPocket, MSGBOX_DEFAULT + hideitemdescription return EventScript_PutBattlePyramidItemInBag:: msgbox gText_PlayerPutItemInBag, MSGBOX_DEFAULT + hideitemdescription return EventScript_FoundTMHM:: @@ -165,6 +175,7 @@ EventScript_NoRoomToPickUpItem:: EventScript_HiddenItemScript:: lockall waitse + copyvar VAR_0x8006, VAR_0x8005 additem VAR_0x8005 copyvar VAR_0x8007, VAR_RESULT bufferitemnameplural STR_VAR_2, VAR_0x8005, 1 @@ -194,11 +205,14 @@ EventScript_FoundHiddenItem:: end EventScript_PutHiddenItemInPocket:: + delay 10 + showitemdescription waitmessage waitfanfare bufferitemnameplural STR_VAR_2, VAR_0x8004, 1 copyvar VAR_0x8004, VAR_0x8008 msgbox gText_PutItemInPocket, MSGBOX_DEFAULT + hideitemdescription special TryPutTreasureInvestigatorsOnAir special SetHiddenItemFlag releaseall diff --git a/data/specials.inc b/data/specials.inc index f02497d603..044d794bc8 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -554,3 +554,4 @@ gSpecials:: def_special Script_GetChosenMonDefensiveEVs def_special Script_GetChosenMonOffensiveIVs def_special Script_GetChosenMonDefensiveIVs + def_special UseBlankMessageToCancelPokemonPic diff --git a/data/text/frontier_brain.inc b/data/text/frontier_brain.inc deleted file mode 100644 index 1292f2a564..0000000000 --- a/data/text/frontier_brain.inc +++ /dev/null @@ -1,108 +0,0 @@ -@ Battle Tower -gText_AnabelWonSilver:: - .string "It's very disappointing…$" - -gText_AnabelDefeatSilver:: - .string "Okay, I understand…$" - -gText_AnabelWonGold:: - .string "I'm terribly sorry…$" - -gText_AnabelDefeatGold:: - .string "Thank you…$" - -@ Battle Dome -gText_TuckerWonSilver:: - .string "Ahahaha! Aren't you embarrassed?\n" - .string "Everyone's watching!$" - -gText_TuckerDefeatSilver:: - .string "Grr…\n" - .string "What the…$" - -gText_TuckerWonGold:: - .string "My DOME ACE title isn't just for show!$" - -gText_TuckerDefeatGold:: - .string "Ahahaha!\n" - .string "You're inspiring!$" - -@ Battle Factory -gText_NolandWonSilver:: - .string "Way to work!\n" - .string "That was a good lesson, eh?$" - -gText_NolandDefeatSilver:: - .string "Good job!\n" - .string "You know what you're doing!$" - -gText_NolandWonGold:: - .string "Hey, hey, hey!\n" - .string "You're finished already?$" - -gText_NolandDefeatGold:: - .string "What happened here?$" - -@ Battle Pike -gText_LucyWonSilver:: - .string "Humph…$" - -gText_LucyDefeatSilver:: - .string "Urk…$" - -gText_LucyWonGold:: - .string "Hah!$" - -gText_LucyDefeatGold:: - .string "Darn!$" - -@ Battle Arena -gText_GretaWonSilver:: - .string "Oh, come on!\n" - .string "You have to try harder than that!$" - -gText_GretaDefeatSilver:: - .string "No way!\n" - .string "Good job!$" - -gText_GretaWonGold:: - .string "Heheh!\n" - .string "What did you expect?$" - -gText_GretaDefeatGold:: - .string "Huh?\n" - .string "Are you serious?!$" - -@ Battle Palace -gText_SpenserWonSilver:: - .string "Your POKéMON are wimpy because\n" - .string "you're wimpy as a TRAINER!$" - -gText_SpenserDefeatSilver:: - .string "Ah…\n" - .string "Now this is something else…$" - -gText_SpenserWonGold:: - .string "Gwahahaha!\n" - .string "My brethren, we have nothing to fear!$" - -gText_SpenserDefeatGold:: - .string "Gwah!\n" - .string "Hahahaha!$" - -@ Battle Pyramid -gText_BrandonWonSilver:: - .string "Hey! What's wrong with you!\n" - .string "Let's see some effort! Get up!$" - -gText_BrandonDefeatSilver:: - .string "That's it! You've done great!\n" - .string "You've worked hard for this!$" - -gText_BrandonWonGold:: - .string "Hey! Don't you give up now!\n" - .string "Get up! Don't lose faith in yourself!$" - -gText_BrandonDefeatGold:: - .string "That's it! You've done it!\n" - .string "You kept working for this!$" diff --git a/data/text/trick_house_mechadolls.inc b/data/text/trick_house_mechadolls.inc deleted file mode 100644 index 7edd1f1beb..0000000000 --- a/data/text/trick_house_mechadolls.inc +++ /dev/null @@ -1,134 +0,0 @@ -gTrickHouse_Mechadoll_Oddish:: - .string "ODDISH$" - -gTrickHouse_Mechadoll_Poochyena:: - .string "POOCHYENA$" - -gTrickHouse_Mechadoll_Taillow:: - .string "TAILLOW$" - -gTrickHouse_Mechadoll_Azurill:: - .string "AZURILL$" - -gTrickHouse_Mechadoll_Lotad:: - .string "LOTAD$" - -gTrickHouse_Mechadoll_Wingull:: - .string "WINGULL$" - -gTrickHouse_Mechadoll_Dustox:: - .string "DUSTOX$" - -gTrickHouse_Mechadoll_Zubat:: - .string "ZUBAT$" - -gTrickHouse_Mechadoll_Nincada:: - .string "NINCADA$" - -gTrickHouse_Mechadoll_Ralts:: - .string "RALTS$" - -gTrickHouse_Mechadoll_Zigzagoon:: - .string "ZIGZAGOON$" - -gTrickHouse_Mechadoll_Slakoth:: - .string "SLAKOTH$" - -gTrickHouse_Mechadoll_Poochyena2:: - .string "POOCHYENA$" - -gTrickHouse_Mechadoll_Shroomish:: - .string "SHROOMISH$" - -gTrickHouse_Mechadoll_Zigzagoon2:: - .string "ZIGZAGOON$" - -gTrickHouse_Mechadoll_Poochyena3:: - .string "POOCHYENA$" - -gTrickHouse_Mechadoll_Zubat2:: - .string "ZUBAT$" - -gTrickHouse_Mechadoll_Carvanha:: - .string "CARVANHA$" - -gTrickHouse_Mechadoll_BurnHeal:: - .string "BURN HEAL$" - -gTrickHouse_Mechadoll_HarborMail:: - .string "HARBOR MAIL$" - -gTrickHouse_Mechadoll_SamePrice:: - .string "Same price$" - -gTrickHouse_Mechadoll_60Yen:: - .string "¥60$" - -gTrickHouse_Mechadoll_55Yen:: - .string "¥55$" - -gTrickHouse_Mechadoll_Nothing:: - .string "Nothing$" - -gTrickHouse_Mechadoll_CostMore:: - .string "They will cost more.$" - -gTrickHouse_Mechadoll_CostLess:: - .string "They will cost less.$" - -gTrickHouse_Mechadoll_SamePrice2:: - .string "Same price$" - -gTrickHouse_Mechadoll_Male:: - .string "Male$" - -gTrickHouse_Mechadoll_Female:: - .string "Female$" - -gTrickHouse_Mechadoll_Neither:: - .string "Neither$" - -gTrickHouse_Mechadoll_ElderlyMen:: - .string "Elderly men$" - -gTrickHouse_Mechadoll_ElderlyLadies:: - .string "Elderly ladies$" - -gTrickHouse_Mechadoll_SameNumber:: - .string "Same number$" - -gTrickHouse_Mechadoll_None:: - .string "None$" - -gTrickHouse_Mechadoll_One:: - .string "1$" - -gTrickHouse_Mechadoll_Two:: - .string "2$" - -gTrickHouse_Mechadoll_Two2:: - .string "2$" - -gTrickHouse_Mechadoll_Three:: - .string "3$" - -gTrickHouse_Mechadoll_Four:: - .string "4$" - -gTrickHouse_Mechadoll_Six:: - .string "6$" - -gTrickHouse_Mechadoll_Seven:: - .string "7$" - -gTrickHouse_Mechadoll_Eight:: - .string "8$" - -gTrickHouse_Mechadoll_Six2:: - .string "6$" - -gTrickHouse_Mechadoll_Seven2:: - .string "7$" - -gTrickHouse_Mechadoll_Eight2:: - .string "8$" diff --git a/dev_scripts/followers/rename_to_graphics_pokemon.py b/dev_scripts/followers/rename_to_graphics_pokemon.py index bad1758b0c..a89348ddb4 100644 --- a/dev_scripts/followers/rename_to_graphics_pokemon.py +++ b/dev_scripts/followers/rename_to_graphics_pokemon.py @@ -59,6 +59,6 @@ def rellocate_follower_graphics(): #os.popen('cp followers/' + name + '.png followers/' + name + '/follower.png') #os.remove('followers/' + name + '.png') #print(pth) - #subprocess.run(["tools/gbagfx/gbagfx " + name +".png " + name + "_normal.pal'" + str(count) + "'"]) + #subprocess.run(["tools/gbagfx/gbagfx " + name +".png " + name + "_normal.pal'" + str(count) + "'"]) rellocate_follower_graphics() diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md index 3ff95a251c..603fa225db 100644 --- a/docs/SUMMARY.md +++ b/docs/SUMMARY.md @@ -3,7 +3,20 @@ - [README](./README.md) - [Installation](./INSTALL.md) - [Setting up WSL1 (Legacy Portion)](./legacy_WSL1_INSTALL.md) +- [Run documentation site locally](local_mdbook/index.md) + - [Ubuntu WSL1/WSL2](local_mdbook/ubuntu_WSL.md) - [AI Flags](./ai_flags.md) +- [Tutorials]() + - [How to add new AI Flags](./ai_logic.md) + - [How to add new battle script commands/macros](./how_to_battle_script_command_macro.md) + - [How to add a new move](./how_to_new_move.md) + - [How to add a new trainer class](./how_to_trainer_class.md) + - [How to add a new Pokémon]() + - [v1.9.x](./how_to_new_pokemon_1_9_0.md) + - [v1.8.x](./how_to_new_pokemon_1_8_0.md) + - [v1.7.x](./how_to_new_pokemon_1_7_0.md) + - [v1.6.x](./how_to_new_pokemon_1_6_0.md) + - [How to use the Testing System](./how_to_testing_system.md) - [Changelog](./CHANGELOG.md) - [1.9.x]() - [Version 1.9.0](changelogs/1.9.x/1.9.0.md) diff --git a/docs/ai_flags.md b/docs/ai_flags.md index cc5c1631ff..8559ff36f9 100644 --- a/docs/ai_flags.md +++ b/docs/ai_flags.md @@ -21,14 +21,24 @@ AI: Check Bad Move / Try to Faint / Check Viability. The name of each flag is ju * Sequence Switching ## `COMPETITIVE_PARTY_SYNTAX != TRUE` / Not Found -If you are not using competitive syntax parties, instead access the trainer data directly in [`src/data/trainers.h`](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainers.h), and add flags like so, typed exactly the same as the flag names themselves: +If you are not using competitive syntax parties, instead access the trainer data directly in [`src/data/trainers.h`](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainers.h), and add flags like so, typed exactly the same as the flag names themselves: `.aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY` # What AI Flags does pokeemerald-expansion have? This section lists all of expansion’s AI Flags and briefly describes the effect they have on the AI’s behaviour. In all cases, please check the corresponding function or surrounding code around their implementation for more details. Some of these functions are vanilla, some share a name with vanilla but have been modified to varying degrees, and some are completely new. +## Composite AI Flags + +Expansion has two "composite" AI flags, `AI_FLAG_BASIC_TRAINER` and `AI_FLAG_SMART_TRAINER`. This means that these flags have no unique functionality themselves, and can instead be thought of as groups of other flags that are all enabled when this flag is enabled. The idea behind these flags is that if you don't care to manage the detailed behaviour of a particular trainer, you can use these as a baseline instead, and expansion will keep them updated for you. + +`AI_FLAG_BASIC_TRAINER` is expansion's version of generic, normal AI behaviour. It includes `AI_FLAG_CHECK_BAD_MOVE` (don't use bad moves), `AI_FLAG_TRY_TO_FAINT` (faint the player where possible), and `AI_FLAG_CHECK_VIABILITY` (choose the most effective move to use in the current context). Trainers with this flag will still be smarter than they are in vanilla as there have been dramatic improvements made to move selection, but not incredibly so. Trainers with this flag should feel like normal trainers. In general we recommend these three flags be used in all cases, unless you specifically want a trainer who makes obvious mistakes in battle. + +`AI_FLAG_SMART_TRAINER` is expansion's version of a "smart AI". It includes everything in `AI_FLAG_BASIC_TRAINER` along with `AI_FLAG_SMART_SWITCHING` (make smart decisions about when to switch), `AI_FLAG_SMART_MON_CHOICES` (make smart decisions about what mon to send in after a switch / KO), and `AI_FLAG_OMNISCIENT` (awareness of what moves, items, and abilities the player's mons have to better inform decisions). Expansion will keep this updated to represent the most objectively intelligent behaviour our flags are capable of producing. + +Expansion has LOADS of flags, which will be covered in the rest of this guide. If you don't want to engage with detailed trainer AI tuning though, you can just use these two composite flags, and trust that expansion will keep their contents updated to always represent the most standard and the smartest behaviour we can. + ## `AI_FLAG_CHECK_BAD_MOVE` -The AI will avoid using moves that are likely to fail in the current situation. This flag helps prevent the AI from making ineffective choices, such as using moves into immunities, into invulnerable states, or when the moves are otherwise hindered by abilities, terrain, or status conditions. +The AI will avoid using moves that are likely to fail in the current situation. This flag helps prevent the AI from making ineffective choices, such as using moves into immunities, into invulnerable states, or when the moves are otherwise hindered by abilities, terrain, or status conditions. ## `AI_FLAG_TRY_TO_FAINT` AI will prioritize KOing the player if able rather than using status moves. Will prioritize using a move that can OHKO the player. If the player can KO the AI’s mon and the AI’s mon is slower, prioritize priority moves (this does not prevent the AI from switching out instead). @@ -42,8 +52,8 @@ This flag is divided into two components to calculate the best available move fo This is different to `AI_FLAG_CHECK_BAD_MOVE` as it calculates how poor a move is and not whether it will fail or not. -## `AI_FLAG_SETUP_FIRST_TURN` -AI will prioritize using setup moves on the first turn. These include stat buffs, field effects, status moves, etc. +## `AI_FLAG_FORCE_SETUP_FIRST_TURN` +AI will prioritize using setup moves on the first turn at the expense of all else. These include stat buffs, field effects, status moves, etc. AI_FLAG_CHECK_VIABILITY will instead do this when the AI determines it makes sense. This is just a flat increase without any consideration of whether it makes sense to use the move or not. For better move choice quality for those moves, `AI_FLAG_CHECK_VIABILITY` should be used. @@ -58,12 +68,12 @@ AI will generally behave more recklessly. This AI enables the following behaviou * Prioritize Explosion moves ## `AI_FLAG_PREFER_STRONGEST_MOVE` -Adds score bonus to any move the AI has that either OHKOs or 2HKOs the player. +Adds score bonus to any move the AI has that either OHKOs or 2HKOs the player. Keep in mind that this is a weaker form of `AI_FLAG_TRY_TO_FAINT` at scoring OHKOs as it does not take into account who is attacking first, it does however handle 2HKOs. ## `AI_FLAG_PREFER_BATON_PASS` -AI prefers raising its own stats if it has >= 60% HP, as well as Ingrain, Aqua Ring, and Protect. Prioritizes Baton Bass if the mon is rooted (Ingrain) or has the Aqua Ring effect, and doesn’t if it has been Leech Seeded. +AI prefers raising its own stats if it has >= 60% HP, as well as Ingrain, Aqua Ring, and Protect. Prioritizes Baton Bass if the mon is rooted (Ingrain) or has the Aqua Ring effect, and doesn’t if it has been Leech Seeded. ## `AI_FLAG_DOUBLE_BATTLE` This flag is automatically set in double battles, and controls much of the doubles-specific scoring. I’ll summarize some of its scoring as follows: @@ -83,7 +93,7 @@ With respect to the AI’s mons, in doubles: In both singles and doubles: * Prioritizes not using moves that require the user fainting (Destiny Bond, Explosion etc.) and healing moves while on >= 70% HP. * Prioritize not using moves that require the user fainting or losing significant HP (Belly Drum etc) while between 30% and 70% HP -* Prioritize not using setup moves (Light Screen etc.) and Bide while on <= 30% HP +* Prioritize not using setup moves (Light Screen etc.) and Bide while on <= 30% HP With respect to the player’s mons: * Prioritize not using many status moves (stat buffs, Poison, Pain Split) if the player has between 30% and 70% HP @@ -96,7 +106,7 @@ AI prioritizes setting up field effects (Trick Room, Rain Dance, etc.) and side AI does not understand ability suppression (Mold Breaker etc., weather suppression (Air Lock etc.), redirection abilities (Lightningrod etc.) being temporarily removed due to move effects (Sky Drop etc.), or item suppression (Magic Room etc.) and will ignore them. This is a handicap flag. ## `AI_FLAG_WILL_SUICIDE` -AI prioritizes self destruction moves (Explosion, Memento). +AI prioritizes self destruction moves (Explosion, Memento). ## `AI_FLAG_PREFER_STATUS_MOVES` AI gets a score bonus for status moves. This should be combined with `AI_FLAG_CHECK_BAD_MOVE` to prevent using only status moves. @@ -127,7 +137,7 @@ Affects when the AI chooses to switch. AI will make smarter decisions about when Marks the last Pokemon in the party as the Ace Pokemon. It will not be used unless it is the last one remaining, or is forced to be switched in (Roar, U-Turn with 1 mon remaining, etc.) ## `AI_FLAG_OMNISCIENT` -AI has full knowledge of player moves, abilities, and hold items, and can use this knowledge when making decisions. +AI has full knowledge of player moves, abilities, and hold items, and can use this knowledge when making decisions. ## `AI_FLAG_SMART_MON_CHOICES` Affects what the AI chooses to send out after a switch. AI will make smarter decisions when choosing which mon to send out mid-battle and after a KO, which are handled separately. Automatically included when `AI_FLAG_SMART_SWITCHING` is enabled. @@ -148,7 +158,7 @@ And will choose mons after a mid-battle switch prioritizing the following criter * Has Baton Pass ## `AI_FLAG_CONSERVATIVE` -AI always assumes it will roll the lowest possible result when comparing damage in scoring. +AI always assumes it will roll the lowest possible result when comparing damage in scoring. ## `AI_FLAG_SEQUENCE_SWITCHING` AI will always switch out after a KO in exactly party order as defined in the trainer data (ie. slot 1, then 2, then 3, etc.). The AI will never switch out mid-battle unless forced to (Roar etc.). If the AI uses a move that requires a switch where it makes a decision about what to send in (U-Turn etc.), it will always switch out into the lowest available party index. diff --git a/docs/ai_logic.md b/docs/ai_logic.md new file mode 100644 index 0000000000..b910d46946 --- /dev/null +++ b/docs/ai_logic.md @@ -0,0 +1,31 @@ +# How to add new AI Flags + +The battle engine upgrade has rewritten the AI battle scripts to C functions to easily add new logic. This tutorial explains how to add a new AI logic flag. + +## 1. Define your flag + +Open `include/constants/battle_ai.h`. We have many unused flags, but you can add a new one after `AI_FLAG_SMART_SWITCHING` like so: + +`#define AI_FLAG_SUPPORT (1 << 16)` + +## 2. Make your new function + +Open `src/battle_ai_main.c`. Search for the array `static s16 (*const sBattleAiFuncTable[])(u8, u8, u16, s16)`. We want to add our new function to this table. Since we have defined our flag as `(1 << 16)`, find the 16th entry in the table (identifiable by the initializer, `[16]`), and replace it with: + +`[16] = AI_Support, // AI_FLAG_SUPPORT` + +Define your function above the table as `static s16 AI_Support(u8 battlerAtk, u8 battlerDef, u16 move, s16 score);` + +## Make your function do something + +at the bottom of the file, add: +```c +static s16 AI_Support(u8 battlerAtk, u8 battlerDef, u16 move, s16 score) +{ + // Add your logic here! +} +``` + +## Give your trainer the correct AI flag! + +And that's it! diff --git a/docs/changelogs/1.5.x/1.5.2.md b/docs/changelogs/1.5.x/1.5.2.md index ab6735c7a3..69e0ecaabf 100644 --- a/docs/changelogs/1.5.x/1.5.2.md +++ b/docs/changelogs/1.5.x/1.5.2.md @@ -92,5 +92,5 @@ * Court Change by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3160 * Item Effects * Utility Umbrella, by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/2835 - + **Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.5.1...expansion/1.5.2 \ No newline at end of file diff --git a/docs/changelogs/1.5.x/1.5.3.md b/docs/changelogs/1.5.x/1.5.3.md index 831814740a..85748b2375 100644 --- a/docs/changelogs/1.5.x/1.5.3.md +++ b/docs/changelogs/1.5.x/1.5.3.md @@ -9,8 +9,8 @@ ## CRITICAL FIX, please update to avoid the issues detailed down below: - Fixed memory corruption when handling trigger sprites by @SBird1337 in https://github.com/rh-hideout/pokeemerald-expansion/pull/3238 - This had the posibility of manifesting in weird ways, like camera and music changes, NPC duplication and more. If you've had this issue in the past, we ***heavily*** recommend you update to this version of the expansion. - - Thank you @Bassoonian for helping us pinpointing the issue. - + - Thank you @Bassoonian for helping us pinpointing the issue. + ![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/26b9b984-c5db-4dac-85f7-5fc4e95a32ce) ![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/d490eb30-ce54-4b90-bb2e-79c2e9bb50ac) diff --git a/docs/changelogs/1.7.x/1.7.2.md b/docs/changelogs/1.7.x/1.7.2.md index 34aa131e70..a92d778956 100644 --- a/docs/changelogs/1.7.x/1.7.2.md +++ b/docs/changelogs/1.7.x/1.7.2.md @@ -41,7 +41,7 @@ * Clodsire * Crocalor * Dolliv - * Dudunsparce + * Dudunsparce * Esparthra ### Fixed * Multiple Pokémon graphical fixes by @katykat5099 in https://github.com/rh-hideout/pokeemerald-expansion/pull/3805 diff --git a/docs/changelogs/1.9.x/1.9.1.md b/docs/changelogs/1.9.x/1.9.1.md new file mode 100644 index 0000000000..8393727c2a --- /dev/null +++ b/docs/changelogs/1.9.x/1.9.1.md @@ -0,0 +1,140 @@ +# Version 1.9.1 + +```md +## How to update +- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.9.1`. +``` + +## 🌋 *REFACTORS* 🌋 +* Removed `ENDTURN_RETALIATE` in [#5182](https://github.com/rh-hideout/pokeemerald-expansion/pull/5182) +* Removed `ENDTURN_WEATHER_FORM` and `allowedToChangeFormInWeather` in [#5171](https://github.com/rh-hideout/pokeemerald-expansion/pull/5171) + +## 🧬 General 🧬 +### Added +* Move Relearner UI now displays move category by @kittenchilly in [#5081](https://github.com/rh-hideout/pokeemerald-expansion/pull/5081) +### Fixed +* Fixes wrong padding field in `SpeciesInfo` struct by @AlexOn1ine in [#5139](https://github.com/rh-hideout/pokeemerald-expansion/pull/5139) +* Fixed specific tiles changing to PC tiles when using Box Link/Debug PC option by @cawtds in [#5141](https://github.com/rh-hideout/pokeemerald-expansion/pull/5141) + +## 🐉 Pokémon 🐉 +### Fixed +* Fixed stray transparent pixels in Urshifu sprites by @hedara90 in [#5071](https://github.com/rh-hideout/pokeemerald-expansion/pull/5071) +* Fixed `bufferspeciesname` not working for species IDs over 1023 by @SBird1337 in [#5088](https://github.com/rh-hideout/pokeemerald-expansion/pull/5088) +* Fixed overworld Pokémon breaking for species IDs above 1535 by @hedara90, @mrgriffin and +@SarnPoke in [#5179](https://github.com/rh-hideout/pokeemerald-expansion/pull/5179) +* Fixed overworld palettes for multiple species by @hedara90 in [#5107](https://github.com/rh-hideout/pokeemerald-expansion/pull/5107) + * Dialga Origin (Normal and Shiny) + * Palkia Origin (Normal and Shiny) + * Giratina Origin (shiny palette fixed by @hedara90 in [#5108](https://github.com/rh-hideout/pokeemerald-expansion/pull/5108)) + * Xerneas Neutral/Active (Normal and Shiny) + * Enamorus Incarnate/Therian (Normal and Shiny) +* Fixed/added missing Pokémon sprites and palettes by @Cafeei in [#5126](https://github.com/rh-hideout/pokeemerald-expansion/pull/5126) + * Overworld: + * Shiny Sneasler, Morelul, Bounsweet, Bruxish, Guzzlord, Regieleki, Zacian, Zamazenta + * Hisuian Zorua sprite + * Shiny Summer Sawsbuck + * Shiny Galarian Yamask, Darumaka, Zigzagoon, Zapdos, Ponyta, Rapidash, Slowpoke, Farfetch'd, Weezing, Mr. Mime, Articuno, Moltres, Slowking, Stunfisk, Darmanitan + * Shiny Hisuian Sneasel, Qwilfish, Samurott, + * Battle sprites: + * Shiny Sneasler, Cursola, Pincurchin, Runerigus + * Shiny Galarian Yamask, Darumaka +* Fixed Unown Overworld follower sprites by Sarn by @hedara90 in [#5146](https://github.com/rh-hideout/pokeemerald-expansion/pull/5146) + +## ⚔️ Battle General ⚔️ +### Changed +* Set new animation particles by default to off by @AlexOn1ine in [#5161](https://github.com/rh-hideout/pokeemerald-expansion/pull/5161) +### Fixed +* Fixed speed ties by @mrgriffin in [#4780](https://github.com/rh-hideout/pokeemerald-expansion/pull/4780) + * Cleanup by @hedara90 in [#5092](https://github.com/rh-hideout/pokeemerald-expansion/pull/5092) +* Fixed Defiant/Competitive not working after the battler enters the field with a Court Changed Sticky Web on its side of the field by @PhallenTree in [#5093](https://github.com/rh-hideout/pokeemerald-expansion/pull/5093) +* Fixed `trainerproc` not properly parsing line markers, which caused erroring lines to be offset by @mrgriffin in [#5122](https://github.com/rh-hideout/pokeemerald-expansion/pull/5122) +* Fixed initial Zigzagoon battle being able to use a Gimmick by @AlexOn1ine in [#5129](https://github.com/rh-hideout/pokeemerald-expansion/pull/5129) +* Fixed incorrect rounding when `maxHP` is lower than 16 by @hedara90 in [#5183](https://github.com/rh-hideout/pokeemerald-expansion/pull/5183) + * This caused these Pokémon to not be hurt by Sandstorm/Hail. +* Fixes UB in `Cmd_averagestats` by @mrgriffin and @AlexOn1ine in [#5191](https://github.com/rh-hideout/pokeemerald-expansion/pull/5191) + +## 🤹 Moves 🤹 +### Added +* Added move animations for multiple moves by @TheTrueSadfish in [#5159](https://github.com/rh-hideout/pokeemerald-expansion/pull/5159) + * Spin Out, Mortal Spin, Fillet Away, Flower Trick, Make It Rain, Shed Tail, Hyper Drill, Twin Beam, Comeuppance, Blood Moon, Fickle Beam, Thunder Clap, Hard Press, Dragon Cheer, Malignant Chain. + * Purple chains by ogwon on Discord, beam by @TheTrueSadfish and livra on Discord. +### Changed +* Adjusted Raging Bull's animation to include Brick Break's wall break effect by @TheTrueSadfish in [#5159](https://github.com/rh-hideout/pokeemerald-expansion/pull/5159) +### Fixed +* Fixed non-grass Ivy Cudgel breaking battle UI by @hedara90 in [#5117](https://github.com/rh-hideout/pokeemerald-expansion/pull/5117) +* Fixes Stomping Tantrum effect not doubling power in certain situations by @AlexOn1ine in [#5140](https://github.com/rh-hideout/pokeemerald-expansion/pull/5140) +* Fixed Fickle Beam's description by @PhallenTree in [#5093](https://github.com/rh-hideout/pokeemerald-expansion/pull/5093) +* Fixed Revelation Dance interactions with Z-Move, Roost and typeless mons by @PhallenTree in [#5133](https://github.com/rh-hideout/pokeemerald-expansion/pull/5133) +* Fixes Poltergeist missing its accuracy check by @AlexOn1ine in [#5168](https://github.com/rh-hideout/pokeemerald-expansion/pull/5168) +* Fixed Fickle Beam not showing its message by @TheTrueSadfish in [#5159](https://github.com/rh-hideout/pokeemerald-expansion/pull/5159) +* Fixed Retaliate not working correctly if the party member fainted via passive damage during end of turn by @hedara90 in [#5182](https://github.com/rh-hideout/pokeemerald-expansion/pull/5182) +* Fixed Flame Burst's passive damage being based off current HP rather than Max HP by @hedara90 in [#5182](https://github.com/rh-hideout/pokeemerald-expansion/pull/5182) +* Fixed using Population Bomb with Loaded Dice printing garbage text by @kittenchilly in [#5195](https://github.com/rh-hideout/pokeemerald-expansion/pull/5195) + +## 🎭 Abilities 🎭 +### Added +* Added in-battle effect of Pickup by @PhallenTree in [#5170](https://github.com/rh-hideout/pokeemerald-expansion/pull/5170) +### Fixed +* Fixes Purifying Salt not halving damage for dynamic move types by @AlexOn1ine in [#5145](https://github.com/rh-hideout/pokeemerald-expansion/pull/5145) +* Fixed Dancer-called moves not changing their type based on the new user by @PhallenTree in [#5133](https://github.com/rh-hideout/pokeemerald-expansion/pull/5133) +* Fixed Ice Face not regenerating after switching in during Hail/Snow by @hedara90 in [#5171](https://github.com/rh-hideout/pokeemerald-expansion/pull/5171) +* Fixed Wind Rider not activating when switched in while Tailwind is active on the user's side of the field activation and tests by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/5207 + +## 🧶 Items 🧶 +### Added +* Added Dowsing Machine's expanded name by @kittenchilly in [#5134](https://github.com/rh-hideout/pokeemerald-expansion/pull/5134) +### Fixed +* Fixes Booster Energy not increasing speed by @AlexOn1ine in [#5167](https://github.com/rh-hideout/pokeemerald-expansion/pull/5167) + +## 🤖 Battle AI 🤖 +### Changed +* Adjusted AI calculation for Triple Kick Effect by @AlexOn1ine in [#5127](https://github.com/rh-hideout/pokeemerald-expansion/pull/5127) +### Fixed +* Fix Switch AI Bug: AI never switching out when it could be OHKO'd by @Pawkkie in [#5089](https://github.com/rh-hideout/pokeemerald-expansion/pull/5089) +* Adds missing AI checks for poltergeist by @AlexOn1ine in [#5189](https://github.com/rh-hideout/pokeemerald-expansion/pull/5189) + +## 🧹 Other Cleanup 🧹 +* `IsValidForBattle` function formatting by @AlexOn1ine in [#5085](https://github.com/rh-hideout/pokeemerald-expansion/pull/5085) +* Opportunist/Mirror Herb cleanup by @AlexOn1ine in [#5120](https://github.com/rh-hideout/pokeemerald-expansion/pull/5120) + * Cleanup by @AlexOn1ine in [#5158](https://github.com/rh-hideout/pokeemerald-expansion/pull/5158) +* Remove trailing whitespace (master) by @AsparagusEduardo in [#5174](https://github.com/rh-hideout/pokeemerald-expansion/pull/5174) + +## 🧪 Test Runner 🧪 +### Added +* Added missing Move Effect TODO tests - Volume C by @AsparagusEduardo in [#5094](https://github.com/rh-hideout/pokeemerald-expansion/pull/5094) +* Added multiple missing ability TODO tests by @AsparagusEduardo in [#5163](https://github.com/rh-hideout/pokeemerald-expansion/pull/5163) +* Added missing Guard/Power split tests by @mrgriffin and @AlexOn1ine in [#5191](https://github.com/rh-hideout/pokeemerald-expansion/pull/5191) +* Added missing Harvest and Pickup tests by @PhallenTree in [#5170](https://github.com/rh-hideout/pokeemerald-expansion/pull/5170) +* Added missing Round tests by @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/5196 +* Added missing Wind Rider tests by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/5207 +### Changed +* Fixed G-Max Replenish not considering Gen 5+ Pickup by @PhallenTree in [#5170](https://github.com/rh-hideout/pokeemerald-expansion/pull/5170) +### Fixed +* Fixed `RandomUniformExcept` not being exclusive on the higher boundary by @PhallenTree in [#5170](https://github.com/rh-hideout/pokeemerald-expansion/pull/5170) + + +## 📚 Documentation 📚 +* Added guide to running documentation website locally by @AsparagusEduardo in [#5059](https://github.com/rh-hideout/pokeemerald-expansion/pull/5059) +* How to docs and fixes to be added to the mdbook documentation site by @anrichtait in [#5070](https://github.com/rh-hideout/pokeemerald-expansion/pull/5070) +* Improved 1.8 ⇒ 1.9 non-Competitive syntax migration instructions by @mrgriffin in [#5079](https://github.com/rh-hideout/pokeemerald-expansion/pull/5079) + +## 📦 Branch Synchronisation 📦 +### pret +* 5th of August in [#5098](https://github.com/rh-hideout/pokeemerald-expansion/pull/5098) + * Fixed bottom half of Mt. Pyre not being labeled in PokeNav by @fdeblasio in [pret#2018](https://github.com/pret/pokeemerald/pull/2018) +* 7th of August in [#5116](https://github.com/rh-hideout/pokeemerald-expansion/pull/5116) + * Changed type1 and type2 to be consistent by @pkmnsnfrn in [pret#2021](https://github.com/pret/pokeemerald/pull/2021) +* 14th of August in [#5165](https://github.com/rh-hideout/pokeemerald-expansion/pull/5165) + * Fix type for offset in MapConnection by @GriffinRichards in [pret#2011](https://github.com/pret/pokeemerald/pull/2011) +### Followers +* 7th of August in [#5110](https://github.com/rh-hideout/pokeemerald-expansion/pull/5110) + * Fixed expanded OW IDs by @pkmnsnfrn in [aarant#38](https://github.com/aarant/pokeemerald/pull/38) + * Fix two small text errors in follower dialogue by @Bassoonian in [aarant#39](https://github.com/aarant/pokeemerald/pull/39) + +**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.9.0...expansion/1.9.1 + +## New Contributors +* @TheTrueSadfish made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/5159 + + diff --git a/docs/changelogs/template.md b/docs/changelogs/template.md index 6641d612f3..a40afebad3 100644 --- a/docs/changelogs/template.md +++ b/docs/changelogs/template.md @@ -122,7 +122,10 @@ ### Fixed * N/A -## 📦 Pret merges 📦 +## 📦 Branch Synchronisation 📦 +### pret's base pokeemerald +* N/A +### merrp/aarant's followers * N/A diff --git a/docs/how_to_battle_script_command_macro.md b/docs/how_to_battle_script_command_macro.md new file mode 100644 index 0000000000..042a87601d --- /dev/null +++ b/docs/how_to_battle_script_command_macro.md @@ -0,0 +1,51 @@ +## How to add new Battle Script Commands/Macros + +To preface this tutorial, the battle engine upgrade has exhausted all battle script command IDs, and instead uses the `various` command to effectively add new commands. This is preferential to creating a secondary battle script command table like is done in the CFRU. + +In general, `gBattlescriptCurrInstr` tracks the current battle script position as a ROM address. Fortunately, we don't need to worry about ROM addresses when using the decomps, but it is important to understand because of how the `various` command is set up. + +``` +.macro various battler:req, param1:req + .byte 0x76 + .byte \battler + .byte \param1 + .endm +``` + +`various` is 3 bytes in size, so if we wanted to advance to the next battle script command, we would write `gBattlescriptCurrInstr += 3`. Coincidentally, this is found at the end of `Cmd_Various` in `src/battle_script_commands.c`. + +Now, how might we add a custom various command case? Here are the steps. We will use `VARIOUS_SET_SIMPLE_BEAM` as an example. +### 1. Add a definition to `include/constants/battle_script_commands.h`. + +For example, `#define VARIOUS_SET_SIMPLE_BEAM 39` + +### 2. Create a macro in `asm/macros/battle_script.inc`. For example: +```c +.macro setabilitysimple battler:req, ptr:req + various \battler VARIOUS_SET_SIMPLE_BEAM + .4byte \ptr + .endm +``` + +### 3. Add your new various command ID to `Cmd_Various`. For example: +```c + case VARIOUS_SET_SIMPLE_BEAM: + if (IsEntrainmentTargetOrSimpleBeamBannedAbility(gBattleMons[gBattlerTarget].ability) + || gBattleMons[gBattlerTarget].ability == ABILITY_SIMPLE) + { + gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3); + } + else + { + gBattleMons[gBattlerTarget].ability = ABILITY_SIMPLE; + RecordAbilityBattle(gActiveBattler, ABILITY_SIMPLE); + gBattlescriptCurrInstr += 7; + } + return; +``` + +The macros' `battler` argument is the battler who will be affected/considered by your command. In our case, which battler we will try to give `ABILITY_SIMPLE`. Note that `gActiveBattler` is always set to this battler at the beginning of `Cmd_Various`. + +The `ptr` argument is an extra argument that, in this case, provides a battle script to jump to in the event that we fail to set `ABILITY_SIMPLE`. We must add the `.4byte \ptr` inside our macro. So now when we want to advance to the next battle script command in our script, we must increment `gBattlescriptCurrInstr` by `7` because our overall macro is 3 bytes for the various command, and 4 bytes for the pointer. *IMPORTANT* the `return` at the end of the switch case is required because remember that `various` always defaults to `gBattlescriptCurrInstr += 3` at the very end of the function, so if we included `gBattlescriptCurrInstr += 7` with a `break`, we would end up effectively doing `gBattlescriptCurrInstr += 10`. + +This behavior can be found under the `else` statement in the example above, corresponding to `ABILITY_SIMPLE` being correctly applied. If we are unable to set `ABILITY_SIMPLE`, however, notice the following `gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);`. This means we are jumping to the battle script provided by the pointer 3 bytes after our various command (which is the `ptr` argument described previously). We still must `return` or else we would actually jump to 3 bytes after the `ptr` battle script begins. diff --git a/docs/how_to_new_move.md b/docs/how_to_new_move.md new file mode 100644 index 0000000000..9ddc09b904 --- /dev/null +++ b/docs/how_to_new_move.md @@ -0,0 +1,197 @@ +*Full credits and thank you to CancerFairy for writing this guide!* + +### Note: This guide was written for version 1.8.0. Most stuff still applies to 1.7.x versions and earlier, with the following exceptions: +- Battle and Contest move data are separated in `src/data/battle_moves.h` and `src/data/contest_moves.h` +- `additionalEffects` doesn't exist, instead being handled by a combination of `secondaryEffectChance` and unique `EFFECT_xxx`s. +- There's no `include/constants/battle_move_effects.h`, so data specific to certain effects is handled in other places. +- Move names are handled in `gMoveNames`. + +# Adding/editing moves +This guide is here to give you a breakdown of how moves work, how to edit existing ones, and how to add your own. + +## Contents: +1. [Key files and definitions](#key-files-and-definitions) + - [Header files](#header-files) + - [C files](#c-files) + - [Script files](#script-files) +2. [Editing a move](#editing-a-move) +3. [Adding a new move](#adding-a-new-move) + +## Key files and definitions +Before beginning the process, it's important to familiarise yourself with the important files that control moves. There are three categories of files - header(.h) files, which contain static information about a move, .c files which contains functions in C that determine how the move behaves, and script files (.s or .inc) that actually "run" the move - i.e. determine the sequence of events you see on screen when you execute the move. + +## Header files +### src/data/moves_info.h +This is the place where the bulk of move information is stored, including name, base power, typing, PP, contest information etc. + +Let's look at an example: +```c +[MOVE_THUNDER_SHOCK] = +{ + .name = HANDLE_EXPANDED_MOVE_NAME("ThunderShock", "Thunder Shock"), + .description = COMPOUND_STRING( + "An electrical attack that\n" + "may paralyze the foe."), + .effect = EFFECT_HIT, + .power = 40, + .type = TYPE_ELECTRIC, + .accuracy = 100, + .pp = 30, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .category = DAMAGE_CATEGORY_SPECIAL, + .sheerForceBoost = TRUE, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_PARALYSIS, + .chance = 10, + }), + .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_COOL, + .contestComboStarterId = 0, + .contestComboMoves = {COMBO_STARTER_CHARGE}, +}, +``` +The `HANDLE_EXPANDED_MOVE_NAME` allows the usage of a name of extended character length, so long as the `B_EXPANDED_MOVE_NAMES` is set to `TRUE`, whereas by default it's limited in Gen 3 to 12 characters. Most of the fields here are obvious, but the two important ones for determining what a move actually *does* are `effect` and `additionalEffects`. + +The `effect` represents how the move actually works when called in battle - it can be a two turn move, or a move that only works if the target is holding an item, for example. How each effect works is pretty much unique, but the way a move of a particular effect is executed is defined by a script [`data/battle_scripts_1.s`](#databattle_scripts_1s), and any *variable* characteristics such as typing or power are defined in either [`src/battle_script_commands.c`](#srcbattle_script_commandsc) or [`src/battle_util.c`](#srcbattle_utilc), depending on the effect. The vast majority of non-status moves are simply `EFFECT_HIT`, in that they deal damage and apply `additionalEffects` (if defined). + +The `additionalEffects` field represents effects that are applied at the `setadditionaleffects` stage of the move script (for most moves, see `BattleScript_Hit_RetFromAtkAnimation`). These are effects that can be encapsulated by any of the `MOVE_EFFECT_X` defined in [`include/constants/battle.h`](#includeconstantsbattleh) and encoded under `SetMoveEffect` in [`src/battle_script_commands.c`](#srcbattle_script_commandsc). These can vary from applying a status, such as `MOVE_EFFECT_PARALYSIS`, or lowering/raising stats etc. The move effect could target the user by setting `self = TRUE`, such as Overheat lowering the user's own Sp. Atk. What's more, definining a `chance`, such as for Thunder Shock, not only limits the effect to applying only `chance`% of the time, but it also turns it into a *secondary effect.* This difference is important because secondary effects are nullified by Sheer Force (which in turn will boost the move's power) and they are blocked by Shield Dust. These two limitations do not apply to *primary effects* which do not a chance field defined and by definition will *always* happen when the move is executed. + +### src/data/battle_move_effects.h +Effects are listed here along with the `battleScript` that governs each one. Said scripts are defined in [`data/battle_scripts_1.s`](#databattle_scripts_1s). The indices/names of the effects (e.g. `EFFECT_FIRST_TURN_ONLY`) are enums defined in [`include/constants/battle_move_effects.h`](#includeconstantsbattle_move_effectsh). + +### include/battle_scripts.h +Contains references to scripts [`data/battle_scripts_1.s`](#databattle_scripts_1s), allowing them to be referenced in C. Any new scripts must be added here. + +### include/constants/battle_move_effects.h +Simply an enum list of possible effects for moves. Any new effects would be added here, with a definition for them (including defining a script) would then also be added to [`src/data/battle_move_effects.h`](#srcdatabattle_move_effectsh). + +### include/constants/battle_string_ids.h +All strings that can be printed in battle have an id that is defined here. The actual message itself would then be defined and assigned to this id in [`src/data/battle_message.c`](#srcbattle_messagec). + +### include/constants/battle.h +A whole range of constants defining battle variables, such as statuses, weather, and move effects. + +### include/constants/moves.h +Where moves are defined (and nothing else). + +**Note:** When adding custom moves, you should add them between the moves from the latest generation and the z moves, then adjust `MOVES_COUNT` accordingly. Adding a move after `MOVES_COUNT` that is neither a Max Move or a Z Move will result in that move's name not being printed when it is used, instead a generic message will be printed. + +## C files +### src/battle_script_commands.c +This is where a lot of the commands referred to in scripts are defined. For example, the `jumpifnotfirstturn` command above is defined by the function `Cmd_jumpifnotfirstturn` and you can see how it works in C. It's possible that any move editing or updating you have in mind can be done with existing commands, but if you wanted to add a new function that could be called in a script above, this is where you would define it. + +### src/battle_util.c +This contains a lot of the "utility" functions used to determine things like a move's dynamic typing or power. It's also where damage calculation takes place, and a lot of that will naturally take a move's effect into account. For example, a move with the effect `EFFECT_SOLAR_BEAM` would have its damage halved in sandstorm. If you wanted to add a move with an effect which gave it variable BP or typing, this is the file you would encode that effect. + +### src/battle_message.c +Contains string defines and functions that print messages during the battle. If you wish to add or edit a move's string, then this is where you would do so. + +### src/battle_main.c +Contains more fundamental functions that control the flow of the battle. Functions here determine move order, dynamic typing, animations, priority, speed calculations and more. + +## Script files +### data/battle_scripts_1.s +Each move's effect is governed by a script defined here. For a simple example, let's look at the script for Fake Out/First Impression: + +``` +BattleScript_EffectFirstTurnOnly:: + attackcanceler + jumpifnotfirstturn BattleScript_FailedFromAtkString + goto BattleScript_EffectHit +``` + +`attackcanceler` is a command that covers all the cases that could cause a move to fail before it's even attempted (e.g. paralysis). And as we can tell from the commands, if it's not the first turn, we go to `BattleScript_FailedFromAtkString` which evidently causes us to print the `attackstring` ("POKEMON used MOVE") then fail ("But it failed!"). Otherwise, we go to the generic "hit" effect which is the same script for moves that just deal damage and nothing else. + +This is the most advanced part of the ROM. There are dozens upon dozens of commands and hundreds of scripts so this guide would go on forever if I were to go into more detail. To learn how these scripts work, it's best to look at a few examples of moves you know. + +### asm/macros/battle_script.inc +The "link" between [`data/battle_scripts_1.s`](#databattle_scripts_1s) and [`src/battle_script_commands.c`](#srcbattle_script_commandsc). Each command is represented by a hex byte which represents its index in the `gBattleScriptingCommandsTable` array at the top of [`src/battle_script_commands.c`](#srcbattle_script_commandsc). However, this file also contains macros which perform combinations of other commands, or just calculations in assembly. In addition to commands, it is also possible to call functions in [`src/battle_script_commands.c`](#srcbattle_script_commandsc) using the `various` (now gradually being deprecated) and the `callnative` functionality. The `various` macros will point to a case under the `Cmd_various` function in [`src/battle_script_commands.c`](#srcbattle_script_commandsc), whereas `callnative` will let you directly call a function in [`src/battle_script_commands.c`](#srcbattle_script_commandsc) by name. + +### data/battle_anim_scripts.s +This is the place where move animations are defined. The array at the top, `gBattleAnims_Moves`, is in move index order and determines which animation goes with which move. + +## Editing a move +### Basic information +To edit a move's basic information, you need only edit the relevant fields in [`src/data/battle_moves.h`](#srcdatamoves_infoh). This will let you change a move's: +- name +- description +- power +- accuracy +- type +- category +- target +- pp +- recoil percentage +- flags +- Z-move effect (for status moves) or overwritting its calculated power (for damaging moves) + +### Changing a move's main effect +To change the main effect of a move to an existing effect, you need only change its `effect` field to one of the options in [`src/data/battle_move_effects.h`](#srcdatabattle_move_effectsh). If you wish to keep the effect but simply modify how it works, you can modify how it plays out on screen by editing its entry in [`data/battle_scripts_1.s`](#databattle_scripts_1s) and any relevant functions in [`src/battle_script_commands.c`](#srcbattle_script_commandsc). To change how a move's dynamic power, accuracy and are calculated, then you need to modify the following functions: + +- For power: `CalcMoveBasePowerAfterModifiers` in [`src/battle_util.c`](#srcbattle_utilc) +- For accuracy: `AccuracyCalcHelper` in [`src/battle_script_commands.c`](#srcbattle_script_commandsc) +- For type: `SetTypeBeforeUsingMove` in [`src/battle_main.c`](#srcbattle_mainc) + +Note: A generic function for calculating category does not currently exist - Photon Geyser's script in [`data/battle_scripts_1.s`](#databattle_scripts_1s) uses a special `callnative` function `BS_SetPhotonGeyserCategory`. + +### Changing a move's additional effects +If you look at the example [here](#srcdatamoves_infoh), you can see that Thunder Shock has an additional effects array that contains a single move effect `MOVE_EFFECT_PARALYSIS` with a 10% chance of applying. Thanks to this field, you can add and remove primary and secondary effects (so long as they are defined by a `MOVE_EFFECT`) to a move without having to change its effect or script. You can also make an effect apply to the attacker rather than the target (for, say, a stat boost) with `.self = TRUE` and you can set the probability to whatever you want with the `chance` field. + +All additional effects with a defined chance (even 100%) are treated as "secondary effects". This means that they are nullified by Sheer Force, blocked by Shield Dust or the Covert Cloak, and have their chance modified by Serene Grace. Additional effects without a chance field (effectively setting it to 0) are treated as "primary effects", which means that they cannot be blocked by the aforementioned items and abilities and their chance to occur cannot be modified; they will *always* happen. + +Each move can have up to 15 additional effects, allowing you to construct monstrosities like this: +``` +[MOVE_POUND] = +{ + .name = COMPOUND_STRING("Pound"), + .description = COMPOUND_STRING( + "Pounds the foe with\n" + "forelegs or tail."), + .effect = EFFECT_HIT, + .power = 40, + .type = TYPE_NORMAL, + .accuracy = 100, + .pp = 35, + .target = MOVE_TARGET_SELECTED, + .priority = 0, + .category = DAMAGE_CATEGORY_PHYSICAL, + .additionalEffects = ADDITIONAL_EFFECTS({ + .moveEffect = MOVE_EFFECT_PARALYSIS, + .chance = 10, + },{ + .moveEffect = MOVE_EFFECT_CONFUSION, + .chance = 100, + },{ + .moveEffect = MOVE_EFFECT_FLINCH, + .chance = 30, + },{ + .moveEffect = MOVE_EFFECT_ALL_STATS_UP, + .chance = 40, + .self = TRUE, + },{ + .moveEffect = MOVE_EFFECT_RAPID_SPIN, + },{ + .moveEffect = MOVE_EFFECT_DEF_MINUS_2, + .chance = 50, + }), + .makesContact = TRUE, + .ignoresKingsRock = B_UPDATED_MOVE_FLAGS == GEN_4, + .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .contestComboStarterId = COMBO_STARTER_POUND, + .contestComboMoves = {0} +}, +``` + +**Note: at the moment, additional effects can only be used by damaging moves, not by status moves.** + +## Adding a new move +To add a new move, you need to create an entry in three locations: + +- a define in [`include/constants/moves.h`](#includeconstantsmovesh) +- an info entry in [`src/data/battle_moves.h`](#srcdatamoves_infoh) +- an animation entry in [data/battle_anim_scripts.s](#databattle_anim_scriptss) + +And that's it! You can use an existing animation or effect for your move - or you can add your own, but I'll leave figuring that out to you. + diff --git a/docs/how_to_new_pokemon_1_6_0.md b/docs/how_to_new_pokemon_1_6_0.md new file mode 100644 index 0000000000..9bf3e2e61f --- /dev/null +++ b/docs/how_to_new_pokemon_1_6_0.md @@ -0,0 +1,1860 @@ +This is a modified version of [the original tutorial about adding new Pokémon species available in Pokeemerald's wiki](https://github.com/pret/pokeemerald/wiki/How-to-add-a-new-Pokémon-species). + +Despite the persistent rumors about an incredibly strong third form of Mew hiding somewhere, it actually wasn't possible to catch it... OR WAS IT? +In this tutorial, we will add a new Pokémon species to the game. + +## IMPORTANT: This tutorial applies to Version 1.6.2 and lower. +- [Version 1.9.x](how_to_new_pokemon_1_9_0.md) +- [Version 1.8.x](how_to_new_pokemon_1_8_0.md) +- [Version 1.7.x](how_to_new_pokemon_1_7_0.md) + +# Changes compared to vanilla +The main things that the Expansion changes are listed here. +* Still Front Pics *(`gMonStillFrontPic_YourPokemon`)* and by extension `src/anim_mon_front_pics.c` have been removed. +* `src/data/pokemon/cry_ids.h` doesn't exist anymore. + +# Content +* [The Graphics](#the-graphics) + * [1. Edit the sprites](#1-edit-the-sprites) + * [2. Register the sprites](#2-register-the-sprites) + * [3. Animate the sprites](#3-animate-the-sprites) + * [4. Update the tables](#4-update-the-tables) +* [The Data](#the-data) + * [1. Declare a species constant](#1-declare-a-species-constant) + * [2. Devise a name](#2-devise-a-name) + * [3. Define its Pokédex entry](#3-define-its-pokédex-entry) + * [4. Define its species information](#4-define-its-species-information) + * [5. Delimit the moveset](#5-delimit-the-moveset) + * [6. Define its cry](#6-define-its-cry) + * [7. Define the Evolutions](#7-define-the-evolutions) + * [8. Easy Chat about your Pokémon](#8-easy-chat-about-your-pokémon) + * [9. Make it appear!](#9-make-it-appear) +* [Appendix](#appendix) + * [Available Front Animations](#available-front-animations) + * [Available Back Animations](#available-back-animations) + * [Pokémon ordered by height](#pokémon-ordered-by-height) + * [Pokémon ordered by weight](#pokémon-ordered-by-weight) + * [Making this easier](#making-this-easier) + + +# The Graphics +We will start by copying the folder containing the sprites for Mewtwo and rename it to `mewthree` (pretty meta huh?): +```sh +cp -r graphics/pokemon/mewtwo graphics/pokemon/mewthree +``` +## 1. Edit the sprites +Let's edit the sprites. Start your favourite image editor (I have used GIMP) and change `anim_front.png`, `front.png` and `back.png` to meet your expectations. +__Make sure that you are using the indexed mode and you have limited yourself to 15 colors!__ +Put the RGB values of your colors into `normal.pal` between the first and the last color and the RGB values for the shiny version into `shiny.pal`. +Edit `footprint.png` using two colors in indexed mode, black and white. +Finally, edit `icon.png`. Notice, that the icon will use one of three predefined palettes instead of `normal.pal`. + +## 2. Register the sprites +Sadly, just putting the image files into the graphics folder is not enough. To use the sprites we have to register them, which is kind of tedious. +First, create constants for the file paths. You'll want to add the constants for your species after the constants for the last valid species. +Edit [include/graphics.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/graphics.h): + +```diff + extern const u32 gMonFrontPic_Calyrex[]; ++extern const u32 gMonFrontPic_Mewthree[]; +``` + +```diff + extern const u32 gMonBackPic_Calyrex[]; ++extern const u32 gMonBackPic_Mewthree[]; +``` + +```diff + extern const u32 gMonPalette_Calyrex[]; ++extern const u32 gMonPalette_Mewthree[]; +``` + +```diff + extern const u32 gMonShinyPalette_Calyrex[]; ++extern const u32 gMonShinyPalette_Mewthree[]; +``` + +```diff + //extern const u8 gMonIcon_Calyrex[]; ++extern const u8 gMonIcon_Mewthree[]; +``` + +```diff + extern const u8 gMonFootprint_Calyrex[]; ++extern const u8 gMonFootprint_Mewthree[]; +``` + +Now link the graphic files. + +Edit [src/data/graphics/pokemon.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/pokemon.h): + +```diff + const u32 gMonFrontPic_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/front.4bpp.lz"); ++const u32 gMonFrontPic_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/front.4bpp.lz"); +``` + +```diff + const u32 gMonBackPic_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/back.4bpp.lz"); ++const u32 gMonBackPic_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/back.4bpp.lz"); +``` + +```diff + const u32 gMonPalette_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/normal.gbapal.lz"); ++const u32 gMonPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/normal.gbapal.lz"); +``` + +```diff + const u32 gMonShinyPalette_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/shiny.gbapal.lz"); ++const u32 gMonShinyPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/shiny.gbapal.lz"); +``` + +```diff + //const u8 gMonIcon_Calyrex[] = INCBIN_U8("graphics/pokemon/calyrex/icon.4bpp"); ++const u8 gMonIcon_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/icon.4bpp"); +``` + +```diff + const u8 gMonFootprint_Calyrex[] = INCBIN_U8("graphics/pokemon/calyrex/footprint.1bpp"); ++const u8 gMonFootprint_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/footprint.1bpp"); +``` + +Please note that Calyrex, the Pokémon that should be above your insertion for the time being, reads a "front.png" sprite instead of an "anim_front.png" sprite. This is because currently, Calyrex lacks a 2nd frame. If the front sprite sheet of your species uses 2 frames, you should use "anim_front". + +It is also worth to mention that Calyrex's icon sprite is commented out simply because it's currently missing. If you do have an icon sprite sheet present inside your species' folder at `graphics/pokemon`, by all means do not comment entries involving the `gMonIcon` constants. + +## 3. Animate the sprites + +You can define the animation order, in which the sprites will be shown. The first number is the sprite index (so 0 or 1) and the second number is the number of frames the sprite will be visible. + +Edit [src/data/pokemon_graphics/front_pic_anims.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/front_pic_anims.h): + +```diff +static const union AnimCmd sAnim_Enamorus_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + ++static const union AnimCmd sAnim_Mewthree_1[] = ++{ ++ ANIMCMD_FRAME(1, 30), ++ ANIMCMD_FRAME(0, 20), ++ ANIMCMD_END, ++}; +#endif +``` + +```diff +SINGLE_ANIMATION(Enamorus); ++SINGLE_ANIMATION(Mewthree); +#endif +``` + +```diff + const union AnimCmd *const *const gMonFrontAnimsPtrTable[] = + { + [SPECIES_NONE] = sAnims_None, + [SPECIES_BULBASAUR] = sAnims_Bulbasaur, + ... + [SPECIES_ENAMORUS] = sAnims_Enamorus, ++ [SPECIES_MEWTHREE] = sAnims_Mewthree, +#endif + ... + }; +``` + +Because you are limited to two frames, there are already [predefined front sprite animations](#available-front-animations), describing translations, rotations, scalings or color changes. + +Edit [src/pokemon.c](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/pokemon.c): +```diff + static const u8 sMonFrontAnimIdsTable[] = + { + [SPECIES_BULBASAUR - 1] = ANIM_V_JUMPS_H_JUMPS, + ... + [SPECIES_DEOXYS_SPEED - 1] = ANIM_GROW_VIBRATE, ++ [SPECIES_MEWTHREE - 1] = ANIM_GROW_VIBRATE, + }; +``` + +There are also [predefined back sprite animations](#available-back-animations) for the back sprites as well. + +Edit [src/pokemon_animation.c](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/pokemon_animation.c): + +```diff + static const u8 sSpeciesToBackAnimSet[] = + { + [SPECIES_BULBASAUR] = BACK_ANIM_DIP_RIGHT_SIDE, + ... + [SPECIES_CHIMECHO] = BACK_ANIM_CONVEX_DOUBLE_ARC, ++ [SPECIES_MEWTHREE] = BACK_ANIM_GROW_STUTTER, + }; +``` + +If you want to delay the time between when the Pokémon appears and when the animation starts, you can add an entry to `sMonAnimationDelayTable` + +Edit [src/pokemon.c](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/pokemon.c): + +```diff + static const u8 sMonAnimationDelayTable[NUM_SPECIES - 1] = + { + [SPECIES_BLASTOISE - 1] = 50, + ... + [SPECIES_KYOGRE - 1] = 60, + [SPECIES_RAYQUAZA - 1] = 60, ++ [SPECIES_MEWTHREE - 1] = 15, + }; +``` + +If you want your Pokémon to fly above the ground, you can add an entry to `gEnemyMonElevation`. + +Edit [src/data/pokemon_graphics/enemy_mon_elevation.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/enemy_mon_elevation.h): + +```diff + const u8 gEnemyMonElevation[NUM_SPECIES] = + { + [SPECIES_BUTTERFREE] = 10, + ... + [SPECIES_REGIDRAGO] = 5, ++ [SPECIES_MEWTHREE] = 6, + }; +``` + +## 4. Update the tables + +Edit [src/data/pokemon_graphics/front_pic_table.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/front_pic_table.h): + +```diff + const struct CompressedSpriteSheet gMonFrontPicTable[] = + { + SPECIES_SPRITE(NONE, gMonFrontPic_CircledQuestionMark), + SPECIES_SPRITE(BULBASAUR, gMonFrontPic_Bulbasaur), + ... + SPECIES_SPRITE(ENAMORUS, gMonFrontPic_Enamorus), ++ SPECIES_SPRITE(MEWTHREE, gMonFrontPic_Mewthree), +#endif + ... +}; +``` + +Edit [src/data/pokemon_graphics/front_pic_coordinates.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/front_pic_coordinates.h): + +```diff + const struct MonCoords gMonFrontPicCoords[] = + { + ... + [SPECIES_ENAMORUS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, ++ [SPECIES_MEWTHREE] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, +#endif + ... + }; +``` + +Edit [src/data/pokemon_graphics/back_pic_table.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/back_pic_table.h): + +```diff + const struct CompressedSpriteSheet gMonBackPicTable[] = + { + SPECIES_SPRITE(NONE, gMonBackPic_CircledQuestionMark), + SPECIES_SPRITE(BULBASAUR, gMonBackPic_Bulbasaur), + ... + SPECIES_SPRITE(ENAMORUS, gMonBackPic_Enamorus), ++ SPECIES_SPRITE(MEWTHREE, gMonBackPic_Mewthree), +#endif + ... + }; +``` + +Edit [src/data/pokemon_graphics/back_pic_coordinates.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/back_pic_coordinates.h): + +```diff + const struct MonCoords gMonBackPicCoords[] = + { + ... + [SPECIES_ENAMORUS] = { .size = MON_COORDS_SIZE(64, 64), .y_offset = 0 }, ++ [SPECIES_MEWTHREE] = { .size = MON_COORDS_SIZE(56, 64), .y_offset = 1 }, +#endif + ... + }; +``` + +Edit [src/data/pokemon_graphics/footprint_table.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/footprint_table.h): + +```diff + const u8 *const gMonFootprintTable[] = + { + [SPECIES_NONE] = gMonFootprint_Bulbasaur, + [SPECIES_BULBASAUR] = gMonFootprint_Bulbasaur, + ... + [SPECIES_CALYREX] = gMonFootprint_Calyrex, ++ [SPECIES_MEWTHREE] = gMonFootprint_Mewthree, +#endif + [SPECIES_EGG] = gMonFootprint_Bulbasaur, + }; +``` + +Edit [src/data/pokemon_graphics/palette_table.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/palette_table.h): + +```diff + const struct CompressedSpritePalette gMonPaletteTable[] = + { + SPECIES_PAL(NONE, gMonPalette_CircledQuestionMark), + SPECIES_PAL(BULBASAUR, gMonPalette_Bulbasaur), + ... + SPECIES_PAL(ENAMORUS, gMonPalette_Enamorus), ++ SPECIES_PAL(MEWTHREE, gMonPalette_Mewthree), +#endif + ... +}; +``` + +Edit [src/data/pokemon_graphics/shiny_palette_table.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/shiny_palette_table.h): + +```diff +const struct CompressedSpritePalette gMonShinyPaletteTable[] = +{ + SPECIES_SHINY_PAL(NONE, gMonShinyPalette_CircledQuestionMark), + SPECIES_SHINY_PAL(BULBASAUR, gMonShinyPalette_Bulbasaur), + ... + SPECIES_SHINY_PAL(ENAMORUS, gMonShinyPalette_Enamorus), ++ SPECIES_SHINY_PAL(MEWTHREE, gMonShinyPalette_Mewthree), +#endif + ... +}; +``` + +Edit [src/pokemon_icon.c](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/pokemon_icon.c): + +```diff + const u8 *const gMonIconTable[] = + { + [SPECIES_NONE] = gMonIcon_Bulbasaur, + ... + [SPECIES_ENAMORUS] = gMonIcon_Enamorus, ++ [SPECIES_MEWTHREE] = gMonIcon_Mewthree, +#endif + ... + }; +``` + +```diff + const u8 gMonIconPaletteIndices[] = + { + [SPECIES_NONE] = 0, + ... + [SPECIES_ENAMORUS] = 1, ++ [SPECIES_MEWTHREE] = 2, + [SPECIES_VENUSAUR_MEGA] = 1, + ... + }; +``` + +Here, you can choose between the six icon palettes; 0, 1, 2, 3, 4 and 5. All of them located in `graphics/pokemon/icon_palettes`. + +Open an icon sprite and load one of the palettes to find out which palette suits your icon sprite best. + +# The Data + +Our plan is as simple as it is brilliant: clone Mewtwo... and make it even stronger! + +## 1. Declare a species constant + +Our first step towards creating a new digital lifeform is to define its own species constant. + +Edit [include/constants/species.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/species.h): + +```diff + #define SPECIES_NONE 0 + #define SPECIES_BULBASAUR 1 + ... + #define SPECIES_ENAMORUS 905 ++#define SPECIES_MEWTHREE 906 + +-#define FORMS_START SPECIES_ENAMORUS ++#define FORMS_START SPECIES_MEWTHREE +``` + +## 2. Devise a name + + +This name will be displayed in the game. It may be different than the identifier of the species constant, especially when there are special characters involved. + +Edit [src/data/text/species_names.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/text/species_names.h): + +```diff + const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1] = { + [SPECIES_NONE] = _("??????????"), + [SPECIES_BULBASAUR] = _("Bulbasaur"), + ... + [SPECIES_ENAMORUS] = _("Enamorus"), ++ [SPECIES_MEWTHREE] = _("Mewthree"), + }; +``` + +The `_()` underscore function doesn't really exist - it's a convention borrowed from GNU gettext to let `preproc` know this is text to be converted to the custom encoding used by the Gen 3 Pokemon games. + +## 3. Define its Pokédex entry + +First, we will need to add new index constants for its Pokédex entry. The index constants are divided into the Hoenn Pokédex, which contains all Pokémon native to the Hoenn region, and the National Pokédex containing all known Pokémon, which can be received after entering the hall of fame for the first time. + +Edit [include/constants/pokedex.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/pokedex.h): + +```diff +// National Pokedex order +enum { + NATIONAL_DEX_NONE, + // Kanto + NATIONAL_DEX_BULBASAUR, +... + NATIONAL_DEX_ENAMORUS, ++ NATIONAL_DEX_MEWTHREE, +}; +``` + +```diff + #define KANTO_DEX_COUNT NATIONAL_DEX_MEW + #define JOHTO_DEX_COUNT NATIONAL_DEX_CELEBI +#if P_GEN_8_POKEMON == TRUE +- #define NATIONAL_DEX_COUNT NATIONAL_DEX_ENAMORUS ++ #define NATIONAL_DEX_COUNT NATIONAL_DEX_MEWTHREE +``` + +Do keep in mind that if you intend to add your new species to the Hoenn Dex, you'll also want to add a `HOENN_DEX` constant for it, like this: + +```diff +// Hoenn Pokedex order +enum { + HOENN_DEX_NONE, + HOENN_DEX_TREECKO, +... + HOENN_DEX_DEOXYS, ++ HOENN_DEX_MEWTHREE, +... +}; +``` + +```diff +- #define HOENN_DEX_COUNT (HOENN_DEX_DEOXYS + 1) ++ #define HOENN_DEX_COUNT (HOENN_DEX_MEWTHREE + 1) +``` + +Edit [src/pokemon.c](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/pokemon.c): + + +```diff + // Assigns all species to the National Dex Index (Summary No. for National Dex) + static const u16 sSpeciesToNationalPokedexNum[NUM_SPECIES - 1] = + { + SPECIES_TO_NATIONAL(ENAMORUS), ++ SPECIES_TO_NATIONAL(MEWTHREE), + }; +``` + +Just like before, if we want to insert our new species in the Hoenn Dex, we'll have to do a few extra steps: + +```diff + // Assigns all species to the Hoenn Dex Index (Summary No. for Hoenn Dex) + static const u16 sSpeciesToHoennPokedexNum[NUM_SPECIES - 1] = + { + SPECIES_TO_HOENN(TREECKO), + ... + SPECIES_TO_HOENN(DEOXYS), ++ SPECIES_TO_HOENN(MEWTHREE), + }; +``` + +```diff + const u16 gHoennToNationalOrder[NUM_SPECIES] = // Assigns Hoenn Dex Pokémon (Using National Dex Index) + { + HOENN_TO_NATIONAL(TREECKO), + ... + HOENN_TO_NATIONAL(DEOXYS), ++ HOENN_TO_NATIONAL(MEWTHREE), + }; +``` + +Now we can define the actual text of the Pokédex entry. + +Append to [src/data/pokemon/pokedex_text.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/pokedex_text.h): + +```diff + const u8 gEnamorusPokedexText[] = _( + "Its arrival brings an end to the\n" + "winter. According to legend, this\n" + "Pokémon's love gives rise to the\n" + "budding of fresh life across the land."); + ++const u8 gMewthreePokedexText[] = _( ++ "The rumors became true.\n" ++ "This is Mews final form.\n" ++ "Its power level is over 9000.\n" ++ "Has science gone too far?"); +``` + +Finally, we will add the Pokédex entry for Mewthree and link the text to it. + +Edit [src/data/pokemon/pokedex_entries.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/pokedex_entries.h): + +```diff + const struct PokedexEntry gPokedexEntries[] = + { + ... + [NATIONAL_DEX_ENAMORUS] = + { + .categoryName = _("Love-Hate"), + .height = 16, + .weight = 480, + .description = gEnamorusPokedexText, + .pokemonScale = 259, + .pokemonOffset = 1, + .trainerScale = 296, + .trainerOffset = 1, + }, + ++ [NATIONAL_DEX_MEWTHREE] = ++ { ++ .categoryName = _("NEW SPECIES"), ++ .height = 15, ++ .weight = 330, ++ .description = gMewthreePokedexText, ++ .pokemonScale = 256, ++ .pokemonOffset = 0, ++ .trainerScale = 290, ++ .trainerOffset = 2, ++ }, + #endif + }; +``` + +The values `pokemonScale`, `pokemonOffset`, `trainerScale` and `trainerOffset` are used for the height comparison figure in the Pokédex. Height and weight are specified in meters and kilograms respectively, while the last digit is the first decimal place. + +In Pokémon Emerald, you can sort the Pokédex by name, height or weight. Apparently, the Pokémon order is hardcoded in the game files and not calculated from their data. Therefore we have to include our new Pokémon species at the right places. While the correct position for the alphabetical order is easy to find, it can become quite tedious for height and weight. To find the right position for your Pokémon, you may look at the tables sorted by [height](#pokémon-ordered-by-height) and [weight](#pokémon-ordered-by-weight) respectively in the appendix. + +Edit [src/data/pokemon/pokedex_orders.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/pokedex_orders.h): + +```diff + const u16 gPokedexOrder_Alphabetical[] = + { + ... + NATIONAL_DEX_MEW, ++ NATIONAL_DEX_MEWTHREE, + NATIONAL_DEX_MEWTWO, + ... + }; + + const u16 gPokedexOrder_Weight[] = + { + ... + NATIONAL_DEX_ESCAVALIER, + NATIONAL_DEX_FRILLISH, + NATIONAL_DEX_DURANT, + NATIONAL_DEX_CINDERACE, ++ NATIONAL_DEX_MEWTHREE, + //NATIONAL_DEX_PERSIAN, // Alolan Form + NATIONAL_DEX_DUGTRIO, + ... + }; + + const u16 gPokedexOrder_Height[] = + { + ... + NATIONAL_DEX_ZERAORA, + NATIONAL_DEX_GRIMMSNARL, + NATIONAL_DEX_MR_RIME, ++ NATIONAL_DEX_MEWTHREE, + // 5'03" / 1.6m + ... + }; +``` + +## 4. Define its species information +Edit [src/data/pokemon/species_info.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/species_info.h): +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + [SPECIES_NONE] = {0}, + ... + + [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, + }, + ++ [SPECIES_MEWTHREE] = ++ { ++ .baseHP = 106, ++ .baseAttack = 150, ++ .baseDefense = 70, ++ .baseSpeed = 140, ++ .baseSpAttack = 194, ++ .baseSpDefense = 120, ++ .types = { TYPE_PSYCHIC, TYPE_PSYCHIC}, ++ .catchRate = 3, ++ .expYield = 255, ++ .evYield_SpAttack = 3, ++ .genderRatio = MON_GENDERLESS, ++ .eggCycles = 120, ++ .friendship = 0, ++ .growthRate = GROWTH_SLOW, ++ .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, ++ .abilities = {ABILITY_INSOMNIA, ABILITY_NONE}, ++ .safariZoneFleeRate = 0, ++ .bodyColor = BODY_COLOR_PURPLE, ++ .noFlip = FALSE, ++ }, +#endif + }; +``` + +The `.` is the structure reference operator in C to refer to the member object of the structure SpeciesInfo. + +Notice how I also set the ability to `ABILITY_INSOMNIA`, so our little monster doesn't even need to sleep anymore. You can find the abilities for example here [include/constants/abilities.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/abilities.h) and here [src/data/text/abilities.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/text/abilities.h). + +You can also incorporate a 3rd ability to your species, which is intended to be a [Hidden Ability](https://bulbapedia.bulbagarden.net/wiki/Ability#Hidden_Abilities)! + +## 5. Delimit the moveset + +Let's begin with the moves that can be learned by leveling up. + +Append to [src/data/pokemon/level_up_learnsets.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/level_up_learnsets.h): + +```diff +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_END +}; + ++static const struct LevelUpMove sMewthreeLevelUpLearnset[] = { ++ LEVEL_UP_MOVE( 1, MOVE_CONFUSION), ++ LEVEL_UP_MOVE( 1, MOVE_DISABLE), ++ LEVEL_UP_MOVE(11, MOVE_BARRIER), ++ LEVEL_UP_MOVE(22, MOVE_SWIFT), ++ LEVEL_UP_MOVE(33, MOVE_PSYCH_UP), ++ LEVEL_UP_MOVE(44, MOVE_FUTURE_SIGHT), ++ LEVEL_UP_MOVE(55, MOVE_MIST), ++ LEVEL_UP_MOVE(66, MOVE_PSYCHIC), ++ LEVEL_UP_MOVE(77, MOVE_AMNESIA), ++ LEVEL_UP_MOVE(88, MOVE_RECOVER), ++ LEVEL_UP_MOVE(99, MOVE_SAFEGUARD), ++ LEVEL_UP_END ++}; +#endif +``` + +Again, we need to register the learnset. + +Edit [src/data/pokemon/level_up_learnset_pointers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/level_up_learnset_pointers.h): + +```diff + const struct LevelUpMove *const gLevelUpLearnsets[NUM_SPECIES] = + { + [SPECIES_NONE] = sBulbasaurLevelUpLearnset, + [SPECIES_BULBASAUR] = sBulbasaurLevelUpLearnset, + ... + [SPECIES_ENAMORUS] = sEnamorusLevelUpLearnset, ++ [SPECIES_MEWTHREE] = sMewthreeLevelUpLearnset, + }; +``` + +Next we need to specify which moves can be taught via TM, HM, or Move Tutor. + +Append to [src/data/pokemon/teachable_learnsets.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/teachable_learnsets.h): + +```diff +static const u16 sEnamorusTeachableLearnset[] = { + MOVE_UNAVAILABLE, +}; + ++static const u16 sMewthreeTeachableLearnset[] = { ++ MOVE_FOCUS_PUNCH, ++ MOVE_WATER_PULSE, ++ MOVE_CALM_MIND, ++ MOVE_TOXIC, ++ MOVE_HAIL, ++ MOVE_BULK_UP, ++ MOVE_HIDDEN_POWER, ++ MOVE_SUNNY_DAY, ++ MOVE_TAUNT, ++ MOVE_ICE_BEAM, ++ MOVE_BLIZZARD, ++ MOVE_HYPER_BEAM, ++ MOVE_LIGHT_SCREEN, ++ MOVE_PROTECT, ++ MOVE_RAIN_DANCE, ++ MOVE_SAFEGUARD, ++ MOVE_FRUSTRATION, ++ MOVE_SOLAR_BEAM, ++ MOVE_IRON_TAIL, ++ MOVE_THUNDERBOLT, ++ MOVE_THUNDER, ++ MOVE_EARTHQUAKE, ++ MOVE_RETURN, ++ MOVE_PSYCHIC, ++ MOVE_SHADOW_BALL, ++ MOVE_BRICK_BREAK, ++ MOVE_DOUBLE_TEAM, ++ MOVE_REFLECT, ++ MOVE_SHOCK_WAVE, ++ MOVE_FLAMETHROWER, ++ MOVE_SANDSTORM, ++ MOVE_FIRE_BLAST, ++ MOVE_ROCK_TOMB, ++ MOVE_AERIAL_ACE, ++ MOVE_TORMENT, ++ MOVE_FACADE, ++ MOVE_SECRET_POWER, ++ MOVE_REST, ++ MOVE_SKILL_SWAP, ++ MOVE_SNATCH, ++ MOVE_STRENGTH, ++ MOVE_FLASH, ++ MOVE_ROCK_SMASH, ++ MOVE_MEGA_PUNCH, ++ MOVE_MEGA_KICK, ++ MOVE_BODY_SLAM, ++ MOVE_DOUBLE_EDGE, ++ MOVE_COUNTER, ++ MOVE_SEISMIC_TOSS, ++ MOVE_MIMIC, ++ MOVE_METRONOME, ++ MOVE_DREAM_EATER, ++ MOVE_THUNDER_WAVE, ++ MOVE_SUBSTITUTE, ++ MOVE_DYNAMIC_PUNCH, ++ MOVE_PSYCH_UP, ++ MOVE_SNORE, ++ MOVE_ICY_WIND, ++ MOVE_ENDURE, ++ MOVE_MUD_SLAP, ++ MOVE_ICE_PUNCH, ++ MOVE_SWAGGER, ++ MOVE_SLEEP_TALK, ++ MOVE_SWIFT, ++ MOVE_THUNDER_PUNCH, ++ MOVE_FIRE_PUNCH, ++ MOVE_UNAVAILABLE, ++}; +#endif +``` + +Once more, we need to register the learnset. + +Edit [src/data/pokemon/teachable_learnset_pointers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/teachable_learnset_pointers.h): + +```diff +const u16 *const gTeachableLearnsets[NUM_SPECIES] = + { + [SPECIES_NONE] = sBulbasaurTeachableLearnset, + [SPECIES_BULBASAUR] = sBulbasaurTeachableLearnset, + ... + [SPECIES_ENAMORUS] = sEnamorusTeachableLearnset, ++ [SPECIES_MEWTHREE] = sMewthreeTeachableLearnset, + }; +``` + +If you want to create a Pokémon which can breed, you will need to edit [src/data/pokemon/egg_moves.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/egg_moves.h). + +## 6. Define its cry +First run these command to copy the Mewtwo sound files: +```sh +cp -r sound/direct_sound_samples/cries/mewtwo.bin sound/direct_sound_samples/cries/mewthree.bin +cp -r sound/direct_sound_samples/cries/mewtwo.aif sound/direct_sound_samples/cries/mewthree.aif +``` + +In [sound/direct_sound_data.inc](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/sound/direct_sound_data.inc). + +```diff + .align 2 +Cry_Enamorus:: + .incbin "sound/direct_sound_samples/cries/enamorus.bin" + ++ .align 2 ++Cry_Mewthree:: ++ .incbin "sound/direct_sound_samples/cries/mewthree.bin" + +.endif +``` + +And linking it in [sound/cry_tables.inc](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/sound/cry_tables.inc). `cry_reverse` in particular is for reversed cries used by moves such as Growl. + +```diff +... + cry Cry_Enamorus ++ cry Cry_Mewthree +.else +``` + +```diff + cry_reverse Cry_Overqwil ++ cry_reverse Cry_Mewthree +.else +``` + +Mon cries are 10512Hz. Make sure to put the aif file in the directory [sound/direct_sound_samples/cries](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/sound/direct_sound_samples/cries) + +Higher frequencies may be ruined by compression. To have the cries uncompressed, follow [this](https://github.com/ShinyDragonHunter/pokefirereddx/commit/71ba1c193082817afbed9a8a0ba1d123fffb6f36#diff-e1823f56db7c2344fb9ee843e3c42797f72fa1e108e13a7080018e1db545322eR116) , then clear out the old sound bins + +## 7. Define the Evolutions + +We want Mewthree to evolve from Mewtwo by reaching level 100. + +Edit [src/data/pokemon/evolution.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/evolution.h): + +```diff + [SPECIES_SNEASEL_HISUIAN] = {{EVO_ITEM_DAY, ITEM_RAZOR_CLAW, SPECIES_SNEASLER}, + {EVO_ITEM_HOLD_DAY, ITEM_RAZOR_CLAW, SPECIES_SNEASLER}}, ++ [SPECIES_MEWTWO] = {{EVO_LEVEL, 100, SPECIES_MEWTHREE}}, +#endif +``` + +## 8. Easy Chat about your Pokémon + + +Edit [src/data/easy_chat/easy_chat_words_by_letter.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/easy_chat/easy_chat_words_by_letter.h): + +```diff + const u16 gEasyChatWordsByLetter_M[] = { + EC_MOVE2(MACH_PUNCH), + ... + EC_POKEMON_NATIONAL(MEW), ++ EC_POKEMON_NATIONAL(MEWTHREE), + EC_POKEMON_NATIONAL(MEWTWO), + ... + EC_WORD_MYSTERY, + }; +``` + +## 9. Make it appear! + + +Now Mewthree really does slumber in the games code - but we won't know until we make him appear somewhere! The legend tells that Mewthree is hiding somewhere in Petalburg Woods... + +Edit [src/data/wild_encounters.json](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/wild_encounters.json): + +```diff + { + "map": "MAP_PETALBURG_WOODS", + "base_label": "gPetalburgWoods", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WURMPLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SHROOMISH" + }, + { +- "min_level": 6, +- "max_level": 6, +- "species": "SPECIES_POOCHYENA" ++ "min_level": 5, ++ "max_level": 5, ++ "species": "SPECIES_MEWTHREE" + }, + ... + } +``` + +Congratulations, you have created your own personal pocket monster! You may call yourself a mad scientist now. + +# Appendix +## Available Front Animations +_Only 65 are used in-game, but you can use any animation from this list._ +1. ANIM_V_SQUISH_AND_BOUNCE +2. ANIM_CIRCULAR_STRETCH_TWICE +3. ANIM_H_VIBRATE +4. ANIM_H_SLIDE +5. ANIM_V_SLIDE +6. ANIM_BOUNCE_ROTATE_TO_SIDES +7. ANIM_V_JUMPS_H_JUMPS +8. ANIM_ROTATE_TO_SIDES +9. ANIM_ROTATE_TO_SIDES_TWICE +10. ANIM_GROW_VIBRATE +11. ANIM_ZIGZAG_FAST +12. ANIM_SWING_CONCAVE +13. ANIM_SWING_CONCAVE_FAST +14. ANIM_SWING_CONVEX +15. ANIM_SWING_CONVEX_FAST +16. ANIM_H_SHAKE +17. ANIM_V_SHAKE +18. ANIM_CIRCULAR_VIBRATE +19. ANIM_TWIST +20. ANIM_SHRINK_GROW +21. ANIM_CIRCLE_C_CLOCKWISE +22. ANIM_GLOW_BLACK +23. ANIM_H_STRETCH +24. ANIM_V_STRETCH +25. ANIM_RISING_WOBBLE +26. ANIM_V_SHAKE_TWICE +27. ANIM_TIP_MOVE_FORWARD +28. ANIM_H_PIVOT +29. ANIM_V_SLIDE_WOBBLE +30. ANIM_H_SLIDE_WOBBLE +31. ANIM_V_JUMPS_BIG +32. ANIM_SPIN_LONG +33. ANIM_GLOW_ORANGE +34. ANIM_GLOW_RED +35. ANIM_GLOW_BLUE +36. ANIM_GLOW_YELLOW +37. ANIM_GLOW_PURPLE +38. ANIM_BACK_AND_LUNGE +39. ANIM_BACK_FLIP +40. ANIM_FLICKER +41. ANIM_BACK_FLIP_BIG +42. ANIM_FRONT_FLIP +43. ANIM_TUMBLING_FRONT_FLIP +44. ANIM_FIGURE_8 +45. ANIM_FLASH_YELLOW +46. ANIM_SWING_CONCAVE_FAST_SHORT +47. ANIM_SWING_CONVEX_FAST_SHORT +48. ANIM_ROTATE_UP_SLAM_DOWN +49. ANIM_DEEP_V_SQUISH_AND_BOUNCE +50. ANIM_H_JUMPS +51. ANIM_H_JUMPS_V_STRETCH +52. ANIM_ROTATE_TO_SIDES_FAST +53. ANIM_ROTATE_UP_TO_SIDES +54. ANIM_FLICKER_INCREASING +55. ANIM_TIP_HOP_FORWARD +56. ANIM_PIVOT_SHAKE +57. ANIM_TIP_AND_SHAKE +58. ANIM_VIBRATE_TO_CORNERS +59. ANIM_GROW_IN_STAGES +60. ANIM_V_SPRING +61. ANIM_V_REPEATED_SPRING +62. ANIM_SPRING_RISING +63. ANIM_H_SPRING +64. ANIM_H_REPEATED_SPRING_SLOW +65. ANIM_H_SLIDE_SHRINK +66. ANIM_LUNGE_GROW +67. ANIM_CIRCLE_INTO_BG +68. ANIM_RAPID_H_HOPS +69. ANIM_FOUR_PETAL +70. ANIM_V_SQUISH_AND_BOUNCE_SLOW +71. ANIM_H_SLIDE_SLOW +72. ANIM_V_SLIDE_SLOW +73. ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL +74. ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW +75. ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL_SLOW +76. ANIM_ZIGZAG_SLOW +77. ANIM_H_SHAKE_SLOW +78. ANIM_V_SHAKE_SLOW +79. ANIM_TWIST_TWICE +80. ANIM_CIRCLE_C_CLOCKWISE_SLOW +81. ANIM_V_SHAKE_TWICE_SLOW +82. ANIM_V_SLIDE_WOBBLE_SMALL +83. ANIM_V_JUMPS_SMALL +84. ANIM_SPIN +85. ANIM_TUMBLING_FRONT_FLIP_TWICE +86. ANIM_DEEP_V_SQUISH_AND_BOUNCE_TWICE +87. ANIM_H_JUMPS_V_STRETCH_TWICE +88. ANIM_V_SHAKE_BACK +89. ANIM_V_SHAKE_BACK_SLOW +90. ANIM_V_SHAKE_H_SLIDE_SLOW +91. ANIM_V_STRETCH_BOTH_ENDS_SLOW +92. ANIM_H_STRETCH_FAR_SLOW +93. ANIM_V_SHAKE_LOW_TWICE +94. ANIM_H_SHAKE_FAST +95. ANIM_H_SLIDE_FAST +96. ANIM_H_VIBRATE_FAST +97. ANIM_H_VIBRATE_FASTEST +98. ANIM_V_SHAKE_BACK_FAST +99. ANIM_V_SHAKE_LOW_TWICE_SLOW +100. ANIM_V_SHAKE_LOW_TWICE_FAST +101. ANIM_CIRCLE_C_CLOCKWISE_LONG +102. ANIM_GROW_STUTTER_SLOW +103. ANIM_V_SHAKE_H_SLIDE +104. ANIM_V_SHAKE_H_SLIDE_FAST +105. ANIM_TRIANGLE_DOWN_SLOW +106. ANIM_TRIANGLE_DOWN +107. ANIM_TRIANGLE_DOWN_TWICE +108. ANIM_GROW +109. ANIM_GROW_TWICE +110. ANIM_H_SPRING_FAST +111. ANIM_H_SPRING_SLOW +112. ANIM_H_REPEATED_SPRING_FAST +113. ANIM_H_REPEATED_SPRING +114. ANIM_SHRINK_GROW_FAST +115. ANIM_SHRINK_GROW_SLOW +116. ANIM_V_STRETCH_BOTH_ENDS +117. ANIM_V_STRETCH_BOTH_ENDS_TWICE +118. ANIM_H_STRETCH_FAR_TWICE +119. ANIM_H_STRETCH_FAR +120. ANIM_GROW_STUTTER_TWICE +121. ANIM_GROW_STUTTER +122. ANIM_CONCAVE_ARC_LARGE_SLOW +123. ANIM_CONCAVE_ARC_LARGE +124. ANIM_CONCAVE_ARC_LARGE_TWICE +125. ANIM_CONVEX_DOUBLE_ARC_SLOW +126. ANIM_CONVEX_DOUBLE_ARC +127. ANIM_CONVEX_DOUBLE_ARC_TWICE +128. ANIM_CONCAVE_ARC_SMALL_SLOW +129. ANIM_CONCAVE_ARC_SMALL +130. ANIM_CONCAVE_ARC_SMALL_TWICE +131. ANIM_H_DIP +132. ANIM_H_DIP_FAST +133. ANIM_H_DIP_TWICE +134. ANIM_SHRINK_GROW_VIBRATE_FAST +135. ANIM_SHRINK_GROW_VIBRATE +136. ANIM_SHRINK_GROW_VIBRATE_SLOW +137. ANIM_JOLT_RIGHT_FAST +138. ANIM_JOLT_RIGHT +139. ANIM_JOLT_RIGHT_SLOW +140. ANIM_SHAKE_FLASH_YELLOW_FAST +141. ANIM_SHAKE_FLASH_YELLOW +142. ANIM_SHAKE_FLASH_YELLOW_SLOW +143. ANIM_SHAKE_GLOW_RED_FAST +144. ANIM_SHAKE_GLOW_RED +145. ANIM_SHAKE_GLOW_RED_SLOW +146. ANIM_SHAKE_GLOW_GREEN_FAST +147. ANIM_SHAKE_GLOW_GREEN +148. ANIM_SHAKE_GLOW_GREEN_SLOW +149. ANIM_SHAKE_GLOW_BLUE_FAST +150. ANIM_SHAKE_GLOW_BLUE +151. ANIM_SHAKE_GLOW_BLUE_SLOW + +## Available Back Animations +1. BACK_ANIM_NONE +2. BACK_ANIM_H_VIBRATE +3. BACK_ANIM_H_SLIDE +4. BACK_ANIM_H_SPRING +5. BACK_ANIM_H_SPRING_REPEATED +6. BACK_ANIM_SHRINK_GROW +7. BACK_ANIM_GROW +8. BACK_ANIM_CIRCLE_COUNTERCLOCKWISE +9. BACK_ANIM_H_SHAKE +10. BACK_ANIM_V_SHAKE +11. BACK_ANIM_V_SHAKE_H_SLIDE +12. BACK_ANIM_V_STRETCH +13. BACK_ANIM_H_STRETCH +14. BACK_ANIM_GROW_STUTTER +15. BACK_ANIM_V_SHAKE_LOW +16. BACK_ANIM_TRIANGLE_DOWN +17. BACK_ANIM_CONCAVE_ARC_LARGE +18. BACK_ANIM_CONVEX_DOUBLE_ARC +19. BACK_ANIM_CONCAVE_ARC_SMALL +20. BACK_ANIM_DIP_RIGHT_SIDE +21. BACK_ANIM_SHRINK_GROW_VIBRATE +22. BACK_ANIM_JOLT_RIGHT +23. BACK_ANIM_SHAKE_FLASH_YELLOW +24. BACK_ANIM_SHAKE_GLOW_RED +25. BACK_ANIM_SHAKE_GLOW_GREEN +26. BACK_ANIM_SHAKE_GLOW_BLUE + +## Pokémon ordered by height +| Pokemon | height (m) | +| :------ | ---------: | +| Diglett | 0.2 | +| Natu | 0.2 | +| Azurill | 0.2 | +| Caterpie | 0.3 | +| Weedle | 0.3 | +| Pidgey | 0.3 | +| Rattata | 0.3 | +| Spearow | 0.3 | +| Paras | 0.3 | +| Magnemite | 0.3 | +| Shellder | 0.3 | +| Ditto | 0.3 | +| Eevee | 0.3 | +| Pichu | 0.3 | +| Cleffa | 0.3 | +| Igglybuff | 0.3 | +| Togepi | 0.3 | +| Sunkern | 0.3 | +| Wurmple | 0.3 | +| Taillow | 0.3 | +| Roselia | 0.3 | +| Castform | 0.3 | +| Jirachi | 0.3 | +| Pikachu | 0.4 | +| Nidoran_f | 0.4 | +| Meowth | 0.4 | +| Geodude | 0.4 | +| Krabby | 0.4 | +| Exeggcute | 0.4 | +| Cubone | 0.4 | +| Horsea | 0.4 | +| Omanyte | 0.4 | +| Mew | 0.4 | +| Bellossom | 0.4 | +| Marill | 0.4 | +| Hoppip | 0.4 | +| Wooper | 0.4 | +| Swinub | 0.4 | +| Smoochum | 0.4 | +| Torchic | 0.4 | +| Mudkip | 0.4 | +| Zigzagoon | 0.4 | +| Ralts | 0.4 | +| Shroomish | 0.4 | +| Aron | 0.4 | +| Plusle | 0.4 | +| Minun | 0.4 | +| Gulpin | 0.4 | +| Cacnea | 0.4 | +| Swablu | 0.4 | +| Barboach | 0.4 | +| Clamperl | 0.4 | +| Squirtle | 0.5 | +| Nidoran_m | 0.5 | +| Jigglypuff | 0.5 | +| Oddish | 0.5 | +| Mankey | 0.5 | +| Voltorb | 0.5 | +| Kabuto | 0.5 | +| Cyndaquil | 0.5 | +| Spinarak | 0.5 | +| Chinchou | 0.5 | +| Murkrow | 0.5 | +| Unown | 0.5 | +| Qwilfish | 0.5 | +| Phanpy | 0.5 | +| Treecko | 0.5 | +| Poochyena | 0.5 | +| Linoone | 0.5 | +| Lotad | 0.5 | +| Seedot | 0.5 | +| Surskit | 0.5 | +| Nincada | 0.5 | +| Sableye | 0.5 | +| Torkoal | 0.5 | +| Baltoy | 0.5 | +| Charmander | 0.6 | +| Kakuna | 0.6 | +| Sandshrew | 0.6 | +| Clefairy | 0.6 | +| Vulpix | 0.6 | +| Poliwag | 0.6 | +| Koffing | 0.6 | +| Goldeen | 0.6 | +| Totodile | 0.6 | +| Togetic | 0.6 | +| Mareep | 0.6 | +| Skiploom | 0.6 | +| Pineco | 0.6 | +| Snubbull | 0.6 | +| Shuckle | 0.6 | +| Teddiursa | 0.6 | +| Corsola | 0.6 | +| Remoraid | 0.6 | +| Houndour | 0.6 | +| Porygon2 | 0.6 | +| Elekid | 0.6 | +| Larvitar | 0.6 | +| Celebi | 0.6 | +| Silcoon | 0.6 | +| Wingull | 0.6 | +| Whismur | 0.6 | +| Skitty | 0.6 | +| Mawile | 0.6 | +| Meditite | 0.6 | +| Electrike | 0.6 | +| Illumise | 0.6 | +| Corphish | 0.6 | +| Feebas | 0.6 | +| Shuppet | 0.6 | +| Chimecho | 0.6 | +| Wynaut | 0.6 | +| Luvdisc | 0.6 | +| Bagon | 0.6 | +| Beldum | 0.6 | +| Bulbasaur | 0.7 | +| Metapod | 0.7 | +| Raticate | 0.7 | +| Dugtrio | 0.7 | +| Growlithe | 0.7 | +| Bellsprout | 0.7 | +| Hoothoot | 0.7 | +| Misdreavus | 0.7 | +| Slugma | 0.7 | +| Tyrogue | 0.7 | +| Magby | 0.7 | +| Marshtomp | 0.7 | +| Cascoon | 0.7 | +| Swellow | 0.7 | +| Volbeat | 0.7 | +| Numel | 0.7 | +| Spoink | 0.7 | +| Trapinch | 0.7 | +| Anorith | 0.7 | +| Snorunt | 0.7 | +| Raichu | 0.8 | +| Nidorina | 0.8 | +| Zubat | 0.8 | +| Gloom | 0.8 | +| Psyduck | 0.8 | +| Machop | 0.8 | +| Farfetchd | 0.8 | +| Staryu | 0.8 | +| Jolteon | 0.8 | +| Porygon | 0.8 | +| Sentret | 0.8 | +| Flaaffy | 0.8 | +| Azumarill | 0.8 | +| Jumpluff | 0.8 | +| Aipom | 0.8 | +| Sunflora | 0.8 | +| Magcargo | 0.8 | +| Kirlia | 0.8 | +| Masquerain | 0.8 | +| Slakoth | 0.8 | +| Ninjask | 0.8 | +| Shedinja | 0.8 | +| Carvanha | 0.8 | +| Duskull | 0.8 | +| Spheal | 0.8 | +| Nidorino | 0.9 | +| Abra | 0.9 | +| Tentacool | 0.9 | +| Grimer | 0.9 | +| Magikarp | 0.9 | +| Flareon | 0.9 | +| Chikorita | 0.9 | +| Quilava | 0.9 | +| Espeon | 0.9 | +| Sneasel | 0.9 | +| Octillery | 0.9 | +| Delibird | 0.9 | +| Grovyle | 0.9 | +| Combusken | 0.9 | +| Lairon | 0.9 | +| Grumpig | 0.9 | +| Whiscash | 0.9 | +| Ivysaur | 1.0 | +| Wartortle | 1.0 | +| Beedrill | 1.0 | +| Sandslash | 1.0 | +| Wigglytuff | 1.0 | +| Parasect | 1.0 | +| Venonat | 1.0 | +| Persian | 1.0 | +| Primeape | 1.0 | +| Poliwhirl | 1.0 | +| Weepinbell | 1.0 | +| Graveler | 1.0 | +| Ponyta | 1.0 | +| Magneton | 1.0 | +| Drowzee | 1.0 | +| Marowak | 1.0 | +| Rhyhorn | 1.0 | +| Tangela | 1.0 | +| Vaporeon | 1.0 | +| Omastar | 1.0 | +| Ledyba | 1.0 | +| Umbreon | 1.0 | +| Mightyena | 1.0 | +| Beautifly | 1.0 | +| Nuzleaf | 1.0 | +| Loudred | 1.0 | +| Makuhita | 1.0 | +| Nosepass | 1.0 | +| Lunatone | 1.0 | +| Lileep | 1.0 | +| Kecleon | 1.0 | +| Relicanth | 1.0 | +| Charmeleon | 1.1 | +| Butterfree | 1.1 | +| Pidgeotto | 1.1 | +| Ninetales | 1.1 | +| Seel | 1.1 | +| Chansey | 1.1 | +| Starmie | 1.1 | +| Electabuzz | 1.1 | +| Croconaw | 1.1 | +| Ariados | 1.1 | +| Politoed | 1.1 | +| Gligar | 1.1 | +| Piloswine | 1.1 | +| Donphan | 1.1 | +| Delcatty | 1.1 | +| Spinda | 1.1 | +| Vibrava | 1.1 | +| Altaria | 1.1 | +| Crawdaunt | 1.1 | +| Banette | 1.1 | +| Sealeo | 1.1 | +| Shelgon | 1.1 | +| Fearow | 1.2 | +| Vileplume | 1.2 | +| Slowpoke | 1.2 | +| Muk | 1.2 | +| Electrode | 1.2 | +| Lickitung | 1.2 | +| Weezing | 1.2 | +| Seadra | 1.2 | +| Bayleef | 1.2 | +| Lanturn | 1.2 | +| Sudowoodo | 1.2 | +| Yanma | 1.2 | +| Forretress | 1.2 | +| Smeargle | 1.2 | +| Miltank | 1.2 | +| Pupitar | 1.2 | +| Dustox | 1.2 | +| Lombre | 1.2 | +| Pelipper | 1.2 | +| Breloom | 1.2 | +| Solrock | 1.2 | +| Absol | 1.2 | +| Metang | 1.2 | +| Nidoqueen | 1.3 | +| Clefable | 1.3 | +| Poliwrath | 1.3 | +| Kadabra | 1.3 | +| Gastly | 1.3 | +| Kingler | 1.3 | +| Seaking | 1.3 | +| Mr_mime | 1.3 | +| Magmar | 1.3 | +| Kabutops | 1.3 | +| Wobbuffet | 1.3 | +| Shiftry | 1.3 | +| Medicham | 1.3 | +| Cacturne | 1.3 | +| Zangoose | 1.3 | +| Nidoking | 1.4 | +| Golem | 1.4 | +| Doduo | 1.4 | +| Hitmonchan | 1.4 | +| Jynx | 1.4 | +| Tauros | 1.4 | +| Ledian | 1.4 | +| Ampharos | 1.4 | +| Quagsire | 1.4 | +| Granbull | 1.4 | +| Houndoom | 1.4 | +| Stantler | 1.4 | +| Hitmontop | 1.4 | +| Vigoroth | 1.4 | +| Walrein | 1.4 | +| Latias | 1.4 | +| Pidgeot | 1.5 | +| Venomoth | 1.5 | +| Alakazam | 1.5 | +| Machoke | 1.5 | +| Cloyster | 1.5 | +| Gengar | 1.5 | +| Hitmonlee | 1.5 | +| Scyther | 1.5 | +| Pinsir | 1.5 | +| Xatu | 1.5 | +| Girafarig | 1.5 | +| Dunsparce | 1.5 | +| Heracross | 1.5 | +| Blissey | 1.5 | +| Swampert | 1.5 | +| Ludicolo | 1.5 | +| Exploud | 1.5 | +| Manectric | 1.5 | +| Claydol | 1.5 | +| Cradily | 1.5 | +| Armaldo | 1.5 | +| Glalie | 1.5 | +| Salamence | 1.5 | +| Blastoise | 1.6 | +| Golbat | 1.6 | +| Machamp | 1.6 | +| Tentacruel | 1.6 | +| Slowbro | 1.6 | +| Haunter | 1.6 | +| Hypno | 1.6 | +| Zapdos | 1.6 | +| Noctowl | 1.6 | +| Gardevoir | 1.6 | +| Dusclops | 1.6 | +| Metagross | 1.6 | +| Charizard | 1.7 | +| Golduck | 1.7 | +| Victreebel | 1.7 | +| Rapidash | 1.7 | +| Dewgong | 1.7 | +| Articuno | 1.7 | +| Typhlosion | 1.7 | +| Skarmory | 1.7 | +| Sceptile | 1.7 | +| Swalot | 1.7 | +| Huntail | 1.7 | +| Regirock | 1.7 | +| Deoxys | 1.7 | +| Dodrio | 1.8 | +| Aerodactyl | 1.8 | +| Dratini | 1.8 | +| Meganium | 1.8 | +| Furret | 1.8 | +| Crobat | 1.8 | +| Scizor | 1.8 | +| Ursaring | 1.8 | +| Kingdra | 1.8 | +| Sharpedo | 1.8 | +| Gorebyss | 1.8 | +| Regice | 1.8 | +| Arcanine | 1.9 | +| Rhydon | 1.9 | +| Raikou | 1.9 | +| Blaziken | 1.9 | +| Camerupt | 1.9 | +| Registeel | 1.9 | +| Venusaur | 2.0 | +| Ekans | 2.0 | +| Exeggutor | 2.0 | +| Moltres | 2.0 | +| Mewtwo | 2.0 | +| Slowking | 2.0 | +| Suicune | 2.0 | +| Tyranitar | 2.0 | +| Slaking | 2.0 | +| Wailmer | 2.0 | +| Flygon | 2.0 | +| Tropius | 2.0 | +| Latios | 2.0 | +| Snorlax | 2.1 | +| Mantine | 2.1 | +| Entei | 2.1 | +| Aggron | 2.1 | +| Kangaskhan | 2.2 | +| Dragonite | 2.2 | +| Feraligatr | 2.3 | +| Hariyama | 2.3 | +| Lapras | 2.5 | +| Seviper | 2.7 | +| Arbok | 3.5 | +| Groudon | 3.5 | +| Ho_oh | 3.8 | +| Dragonair | 4.0 | +| Kyogre | 4.5 | +| Lugia | 5.2 | +| Milotic | 6.2 | +| Gyarados | 6.5 | +| Rayquaza | 7.0 | +| Onix | 8.8 | +| Steelix | 9.2 | +| Wailord | 14.5 | + +## Pokémon ordered by weight +| Pokemon | weight (kg) | +| :------ | ----------: | +| Gastly | 0.1 | +| Haunter | 0.1 | +| Hoppip | 0.5 | +| Diglett | 0.8 | +| Castform | 0.8 | +| Igglybuff | 1.0 | +| Koffing | 1.0 | +| Skiploom | 1.0 | +| Chimecho | 1.0 | +| Misdreavus | 1.0 | +| Jirachi | 1.1 | +| Swablu | 1.2 | +| Shedinja | 1.2 | +| Togepi | 1.5 | +| Surskit | 1.7 | +| Pidgey | 1.8 | +| Sunkern | 1.8 | +| Barboach | 1.9 | +| Natu | 2.0 | +| Azurill | 2.0 | +| Spearow | 2.0 | +| Pichu | 2.0 | +| Roselia | 2.0 | +| Murkrow | 2.1 | +| Taillow | 2.3 | +| Shuppet | 2.3 | +| Exeggcute | 2.5 | +| Torchic | 2.5 | +| Lotad | 2.6 | +| Caterpie | 2.9 | +| Cleffa | 3.0 | +| Jumpluff | 3.0 | +| Weedle | 3.2 | +| Togetic | 3.2 | +| Dratini | 3.3 | +| Rattata | 3.5 | +| Wurmple | 3.6 | +| Masquerain | 3.6 | +| Qwilfish | 3.9 | +| Shellder | 4.0 | +| Ditto | 4.0 | +| Mew | 4.0 | +| Seedot | 4.0 | +| Bellsprout | 4.0 | +| Meowth | 4.2 | +| Plusle | 4.2 | +| Minun | 4.2 | +| Shroomish | 4.5 | +| Unown | 5.0 | +| Treecko | 5.0 | +| Corsola | 5.0 | +| Celebi | 5.0 | +| Spinda | 5.0 | +| Paras | 5.4 | +| Oddish | 5.4 | +| Jigglypuff | 5.5 | +| Nincada | 5.5 | +| Bellossom | 5.8 | +| Magnemite | 6.0 | +| Pikachu | 6.0 | +| Smoochum | 6.0 | +| Sentret | 6.0 | +| Chikorita | 6.4 | +| Weepinbell | 6.4 | +| Eevee | 6.5 | +| Krabby | 6.5 | +| Cubone | 6.5 | +| Swinub | 6.5 | +| Ralts | 6.6 | +| Bulbasaur | 6.9 | +| Ekans | 6.9 | +| Nidoran_f | 7.0 | +| Pineco | 7.2 | +| Feebas | 7.4 | +| Omanyte | 7.5 | +| Clefairy | 7.5 | +| Zubat | 7.5 | +| Mudkip | 7.6 | +| Mareep | 7.8 | +| Snubbull | 7.8 | +| Cyndaquil | 7.9 | +| Horsea | 8.0 | +| Marill | 8.5 | +| Wooper | 8.5 | +| Spinarak | 8.5 | +| Charmander | 8.5 | +| Sunflora | 8.5 | +| Gloom | 8.6 | +| Luvdisc | 8.7 | +| Teddiursa | 8.8 | +| Squirtle | 9.0 | +| Nidoran_m | 9.0 | +| Totodile | 9.5 | +| Wingull | 9.5 | +| Weezing | 9.5 | +| Vulpix | 9.9 | +| Metapod | 9.9 | +| Kakuna | 10.0 | +| Silcoon | 10.0 | +| Magikarp | 10.0 | +| Gulpin | 10.3 | +| Voltorb | 10.4 | +| Houndour | 10.8 | +| Ledyba | 10.8 | +| Sableye | 11.0 | +| Skitty | 11.0 | +| Meditite | 11.2 | +| Kabuto | 11.5 | +| Mawile | 11.5 | +| Corphish | 11.5 | +| Cascoon | 11.5 | +| Aipom | 11.5 | +| Chinchou | 12.0 | +| Sandshrew | 12.0 | +| Remoraid | 12.0 | +| Ninjask | 12.0 | +| Wigglytuff | 12.0 | +| Poliwag | 12.4 | +| Anorith | 12.5 | +| Banette | 12.5 | +| Venomoth | 12.5 | +| Ivysaur | 13.0 | +| Flaaffy | 13.3 | +| Poochyena | 13.6 | +| Wynaut | 14.0 | +| Dunsparce | 14.0 | +| Goldeen | 15.0 | +| Trapinch | 15.0 | +| Farfetchd | 15.0 | +| Duskull | 15.0 | +| Xatu | 15.0 | +| Electrike | 15.2 | +| Vibrava | 15.3 | +| Victreebel | 15.5 | +| Bayleef | 15.8 | +| Delibird | 16.0 | +| Whismur | 16.3 | +| Dragonair | 16.5 | +| Snorunt | 16.8 | +| Zigzagoon | 17.5 | +| Illumise | 17.7 | +| Volbeat | 17.7 | +| Raticate | 18.5 | +| Vileplume | 18.6 | +| Growlithe | 19.0 | +| Quilava | 19.0 | +| Charmeleon | 19.0 | +| Machop | 19.5 | +| Nidorino | 19.5 | +| Abra | 19.5 | +| Combusken | 19.5 | +| Psyduck | 19.6 | +| Swellow | 19.8 | +| Ninetales | 19.9 | +| Geodude | 20.0 | +| Nidorina | 20.0 | +| Poliwhirl | 20.0 | +| Kirlia | 20.2 | +| Shuckle | 20.5 | +| Altaria | 20.6 | +| Carvanha | 20.8 | +| Tyrogue | 21.0 | +| Hoothoot | 21.2 | +| Magby | 21.4 | +| Baltoy | 21.5 | +| Grovyle | 21.6 | +| Kecleon | 22.0 | +| Wartortle | 22.5 | +| Lanturn | 22.5 | +| Gorebyss | 22.6 | +| Relicanth | 23.4 | +| Elekid | 23.5 | +| Whiscash | 23.6 | +| Lileep | 23.8 | +| Numel | 24.0 | +| Slakoth | 24.0 | +| Jolteon | 24.5 | +| Flareon | 25.0 | +| Croconaw | 25.0 | +| Seadra | 25.0 | +| Espeon | 26.5 | +| Umbreon | 27.0 | +| Huntail | 27.0 | +| Mankey | 28.0 | +| Marshtomp | 28.0 | +| Sneasel | 28.0 | +| Nuzleaf | 28.0 | +| Pelipper | 28.0 | +| Beautifly | 28.4 | +| Azumarill | 28.5 | +| Octillery | 28.5 | +| Wobbuffet | 28.5 | +| Vaporeon | 29.0 | +| Beedrill | 29.5 | +| Sandslash | 29.5 | +| Parasect | 29.5 | +| Raichu | 30.0 | +| Grimer | 30.0 | +| Venonat | 30.0 | +| Ponyta | 30.0 | +| Pidgeotto | 30.0 | +| Electabuzz | 30.0 | +| Muk | 30.0 | +| Spoink | 30.6 | +| Dusclops | 30.6 | +| Medicham | 31.5 | +| Dustox | 31.6 | +| Persian | 32.0 | +| Primeape | 32.0 | +| Butterfree | 32.0 | +| Drowzee | 32.4 | +| Linoone | 32.5 | +| Porygon2 | 32.5 | +| Lombre | 32.5 | +| Furret | 32.5 | +| Delcatty | 32.6 | +| Crawdaunt | 32.8 | +| Dugtrio | 33.3 | +| Phanpy | 33.5 | +| Ariados | 33.5 | +| Politoed | 33.9 | +| Staryu | 34.5 | +| Chansey | 34.6 | +| Slugma | 35.0 | +| Tangela | 35.0 | +| Omastar | 35.0 | +| Houndoom | 35.0 | +| Ledian | 35.6 | +| Slowpoke | 36.0 | +| Porygon | 36.5 | +| Mightyena | 37.0 | +| Fearow | 38.0 | +| Sudowoodo | 38.0 | +| Yanma | 38.0 | +| Seaking | 39.0 | +| Breloom | 39.2 | +| Doduo | 39.2 | +| Spheal | 39.5 | +| Pidgeot | 39.5 | +| Clefable | 40.0 | +| Latias | 40.0 | +| Manectric | 40.2 | +| Zangoose | 40.3 | +| Loudred | 40.5 | +| Kabutops | 40.5 | +| Gengar | 40.5 | +| Jynx | 40.6 | +| Noctowl | 40.8 | +| Girafarig | 41.5 | +| Bagon | 42.1 | +| Magmar | 44.5 | +| Marowak | 45.0 | +| Tentacool | 45.5 | +| Vigoroth | 46.5 | +| Blissey | 46.8 | +| Absol | 47.0 | +| Hitmontop | 48.0 | +| Alakazam | 48.0 | +| Gardevoir | 48.4 | +| Granbull | 48.7 | +| Hitmonlee | 49.8 | +| Hitmonchan | 50.2 | +| Skarmory | 50.5 | +| Cacnea | 51.3 | +| Blaziken | 52.0 | +| Sceptile | 52.2 | +| Clamperl | 52.5 | +| Seviper | 52.5 | +| Zapdos | 52.6 | +| Poliwrath | 54.0 | +| Heracross | 54.0 | +| Mr_mime | 54.5 | +| Magcargo | 55.0 | +| Pinsir | 55.0 | +| Ludicolo | 55.0 | +| Golbat | 55.0 | +| Tentacruel | 55.0 | +| Articuno | 55.4 | +| Piloswine | 55.8 | +| Scyther | 56.0 | +| Kadabra | 56.5 | +| Smeargle | 58.0 | +| Aerodactyl | 59.0 | +| Shiftry | 59.6 | +| Aron | 60.0 | +| Magneton | 60.0 | +| Nidoqueen | 60.0 | +| Kingler | 60.0 | +| Moltres | 60.0 | +| Latios | 60.0 | +| Cradily | 60.4 | +| Deoxys | 60.8 | +| Ampharos | 61.5 | +| Nidoking | 62.0 | +| Gligar | 64.8 | +| Arbok | 65.0 | +| Lickitung | 65.5 | +| Electrode | 66.6 | +| Armaldo | 68.2 | +| Machoke | 70.5 | +| Stantler | 71.2 | +| Grumpig | 71.5 | +| Larvitar | 72.0 | +| Quagsire | 75.0 | +| Crobat | 75.0 | +| Miltank | 75.5 | +| Hypno | 75.6 | +| Golduck | 76.6 | +| Cacturne | 77.4 | +| Slowbro | 78.5 | +| Typhlosion | 79.5 | +| Slowking | 79.5 | +| Starmie | 80.0 | +| Swalot | 80.0 | +| Kangaskhan | 80.0 | +| Torkoal | 80.4 | +| Swampert | 81.9 | +| Flygon | 82.0 | +| Exploud | 84.0 | +| Dodrio | 85.2 | +| Blastoise | 85.5 | +| Makuhita | 86.4 | +| Sealeo | 87.6 | +| Tauros | 88.4 | +| Sharpedo | 88.8 | +| Feraligatr | 88.8 | +| Seel | 90.0 | +| Charizard | 90.5 | +| Rapidash | 95.0 | +| Beldum | 95.2 | +| Nosepass | 97.0 | +| Venusaur | 100.0 | +| Tropius | 100.0 | +| Meganium | 100.5 | +| Salamence | 102.6 | +| Graveler | 105.0 | +| Claydol | 108.0 | +| Shelgon | 110.5 | +| Rhyhorn | 115.0 | +| Scizor | 118.0 | +| Lairon | 120.0 | +| Donphan | 120.0 | +| Dewgong | 120.0 | +| Rhydon | 120.0 | +| Exeggutor | 120.0 | +| Mewtwo | 122.0 | +| Forretress | 125.8 | +| Ursaring | 125.8 | +| Machamp | 130.0 | +| Wailmer | 130.0 | +| Slaking | 130.5 | +| Cloyster | 132.5 | +| Walrein | 150.6 | +| Pupitar | 152.0 | +| Kingdra | 152.0 | +| Solrock | 154.0 | +| Arcanine | 155.0 | +| Milotic | 162.0 | +| Lunatone | 168.0 | +| Regice | 175.0 | +| Raikou | 178.0 | +| Suicune | 187.0 | +| Entei | 198.0 | +| Ho_oh | 199.0 | +| Tyranitar | 202.0 | +| Metang | 202.5 | +| Registeel | 205.0 | +| Rayquaza | 206.5 | +| Dragonite | 210.0 | +| Onix | 210.0 | +| Lugia | 216.0 | +| Camerupt | 220.0 | +| Mantine | 220.0 | +| Lapras | 220.0 | +| Regirock | 230.0 | +| Gyarados | 235.0 | +| Hariyama | 253.8 | +| Glalie | 256.5 | +| Golem | 300.0 | +| Kyogre | 352.0 | +| Aggron | 360.0 | +| Wailord | 398.0 | +| Steelix | 400.0 | +| Snorlax | 460.0 | +| Metagross | 550.0 | +| Groudon | 950.0 | + +## Making this easier +If you have multiple species that you want to add to pokeemerald but don't want to copy and paste or type everything out multiple times, just use this handy program to generate text with the species name in there! +https://github.com/smithk200/making-a-new-pokemon-species-in-pokeemerald diff --git a/docs/how_to_new_pokemon_1_7_0.md b/docs/how_to_new_pokemon_1_7_0.md new file mode 100644 index 0000000000..30c1f82dbe --- /dev/null +++ b/docs/how_to_new_pokemon_1_7_0.md @@ -0,0 +1,1049 @@ + +This is a modified version of [the original tutorial about adding new Pokémon species available in Pokeemerald's wiki](https://github.com/pret/pokeemerald/wiki/How-to-add-a-new-Pokémon-species). + +Despite the persistent rumors about an incredibly strong third form of Mew hiding somewhere, it actually wasn't possible to catch it... OR WAS IT? +In this tutorial, we will add a new Pokémon species to the game. + +## IMPORTANT: This tutorial applies to 1.7.x versions. +- [Version 1.9.x](how_to_new_pokemon_1_9_0.md) +- [Version 1.8.x](how_to_new_pokemon_1_8_0.md) +- [Version 1.6.x](how_to_new_pokemon_1_6_0.md) + +# Changes compared to vanilla +The main things that the Expansion changes are listed here. +* Still Front Pics *(`gMonStillFrontPic_YourPokemon`)* and by extension `src/anim_mon_front_pics.c` have been removed. +* `src/data/pokemon/cry_ids.h` doesn't exist anymore. +* You have 6 icon palettes available instead of the base 3. +* Most tables that use `SPECIES_x` as indexes have been moved to `gSpeciesInfo`. + +# Content +* [Useful resources](#useful-resources) +* [The Data - Part 1](#the-data---part-1) + * [1. Declare a species constant](#1-Declare-a-species-constant) + * [2. `SpeciesInfo`'s structure](#2-speciesinfos-structure) + * [3. Define its basic species information](#3-define-its-basic-species-information) + * [4. Species Name](#4-species-name) + * [5. Define its cry](#5-define-its-cry) + * [6. Define its Pokédex entry](#6-define-its-pokédex-entry) +* [The Graphics](#the-graphics) + * [1. Edit the sprites](#1-edit-the-sprites) + * [2. Add the sprites to the rom](#2-add-the-sprites-to-the-rom) + * [3. Add the animations to the rom](#3-add-the-animations-to-the-rom) + * [4. Linking graphic information to our Pokémon](#4-linking-graphic-information-to-our-pokémon) +* [The Data - Part 2](#the-data---part-2) + * [1. Species Flags](#1-species-flags) + * [2. Delimit the moveset](#2-delimit-the-moveset) + * [3. Define the Evolutions](#3-define-the-evolutions) + * [4. Make it appear!](#4-make-it-appear) +* [Optional data](#optional-data) + * [1. Form tables](#1-form-tables) + * [2. Form change tables](#2-form-change-tables) + * [3. Gender differences](#3-gender-differences) + +# Useful resources +You can open a sprite debug menu by pressing `Select` in a Pokémon's summary screen outside of battle. + +![mGBA_6WOo1TSlsn](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/0c625cd8-8f89-4bc8-a285-b10a420a8f6d) + + +# The Data - Part 1 + +Our plan is as simple as it is brilliant: clone Mewtwo... and make it even stronger! + +## 1. Declare a species constant + +Our first step towards creating a new digital lifeform is to define its own species constant. + +Edit [include/constants/species.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/species.h): + +```diff + #define SPECIES_NONE 0 + #define SPECIES_BULBASAUR 1 + ... + #define SPECIES_EEVEE_PARTNER PLACEHOLDER_START + 54 ++#define SPECIES_MEWTHREE PLACEHOLDER_START + 55 + +-#define GIGANTAMAX_START SPECIES_EEVEE_PARTNER ++#define GIGANTAMAX_START SPECIES_MEWTHREE + + // Gigantamax Forms + #define SPECIES_VENUSAUR_GIGANTAMAX GIGANTAMAX_START + 1 +``` +This number is stored in a Pokémon's save structure. These should generally never change, otherwise your saved Pokémon species will change as well. + +We add this before Gigantamax forms because they're temporary forms that shouldn't normally be saved into a Pokémon's save structure. + +Now, let's see how it looks in-game! + +![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/dc15b0ba-a4bd-4f4e-9658-2dff73a11f79) + +Hmmm, something's not right... + +Oh, I know! We need to add the rest of the data! Normally, the vanilla game would crash if we try to look up anything about Mewthree in this state, but the expansion defaults all of its data to `SPECIES_NONE`. + +Now, let's see what needs to be done. + +## 2. `SpeciesInfo`'s structure +Now, to better understand Mewtwo, we also need to understand Mew. Let's look at its data. +```diff + [SPECIES_MEW] = + { + .baseHP = 100, + .baseAttack = 100, + .baseDefense = 100, + .baseSpeed = 100, + .baseSpAttack = 100, + .baseSpDefense = 100, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, + .catchRate = 45, + #if P_UPDATED_EXP_YIELDS >= GEN_8 + .expYield = 300, + #elif P_UPDATED_EXP_YIELDS >= GEN_5 + .expYield = 270, + #else + .expYield = 64, + #endif + .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_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, + .abilities = { ABILITY_SYNCHRONIZE, ABILITY_NONE }, + .bodyColor = BODY_COLOR_PINK, + .isMythical = TRUE, + .speciesName = _("Mew"), + .cryId = CRY_MEW, + .natDexNum = NATIONAL_DEX_MEW, + .categoryName = _("New Species"), + .height = 4, + .weight = 40, + .description = COMPOUND_STRING( + "A Mew is said to possess the genes of all\n" + "Pokémon. It is capable of making itself\n" + "invisible at will, so it entirely avoids\n" + "notice even if it approaches people."), + .pokemonScale = 457, + .pokemonOffset = -2, + .trainerScale = 256, + .trainerOffset = 0, + FRONT_PIC(Mew, 64, 48), + .frontPicYOffset = 9, + .frontAnimFrames = sAnims_Mew, + .frontAnimId = ANIM_ZIGZAG_SLOW, + .enemyMonElevation = 11, + BACK_PIC(Mew, 64, 64), + .backPicYOffset = 0, + .backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL, + PALETTES(Mew), + ICON(Mew, 0), + FOOTPRINT(Mew) + LEARNSETS(Mew), + }, +``` + +That's a lot of stuff! But don't worry, we'll go through it step by step throught the tutorial +(and miles better than having this same data through 20+ files like it used to be). + +We'll start by adding the self-explanatory data that's also present in pret's vanilla structure: + +## 3. Define its basic species information +Edit [src/data/pokemon/species_info.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/species_info.h): +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + [SPECIES_NONE] = {0}, + ... + + [SPECIES_EGG] = + { + FRONT_PIC(Egg, 24, 24), + .frontPicYOffset = 20, + .backPic = gMonFrontPic_Egg, + .backPicSize = MON_COORDS_SIZE(24, 24), + .backPicYOffset = 20, + .palette = gMonPalette_Egg, + .shinyPalette = gMonPalette_Egg, + ICON(Egg, 1), + }, + ++ [SPECIES_MEWTHREE] = ++ { ++ .baseHP = 106, ++ .baseAttack = 150, ++ .baseDefense = 70, ++ .baseSpeed = 140, ++ .baseSpAttack = 194, ++ .baseSpDefense = 120, ++ .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, ++ .catchRate = 3, ++ .expYield = 255, ++ .evYield_SpAttack = 3, ++ .genderRatio = MON_GENDERLESS, ++ .eggCycles = 120, ++ .friendship = 0, ++ .growthRate = GROWTH_SLOW, ++ .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, ++ .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_NONE }, ++ .bodyColor = BODY_COLOR_PURPLE, ++ }, + }; +``` + +The `.` is the structure reference operator in C to refer to the member object of the structure SpeciesInfo. + +- `baseHP`, `baseAttack`, `baseDefense`, `baseSpeed`, `baseSpAttack` and `baseSpDefense` are the base stats. They can't go higher than 255. +- You may be confused as to why `types` has `TYPE_PSYCHIC` twice. This is because the way the game determines single-type mon is to define both types the same. + - If we don't, it defaults to Normal due to it being the first type defined. +- `catchRate` is how likely it is to catch a Pokémon, the lower the value, the harder it is to catch. Legendaries generally have a catch rate of 3, so we put that here. +- `expYield` is the base amount of experience that a Pokémon gives when defeated/caught. In vanilla, this value caps at 255, but we've increased it to a maximum of 65535 accomodate later gen's higher experience yields. (The highest official value is Blissey's with 608, so going beyond this point may cause exponential gains that could break the system 😱) + - If you noticed, Mew's had some `#if`s, `#elif`s and `#endif` around it. This is because its yield has changed over time, and we let you choose which ones you want. This is not relevant to our Mewthree however, so we can just put a single `.expYield = 255,` line here. +- `evYield_HP`, `evYield_Attack`, `evYield_Defense`, `evYield_Speed`, `evYield_SpAttack` and `evYield_SpDefense` are how many EVs does the Pokémon give when they're caught. Each of these fields can have a value of 3 at most. Officially, no Pokémon give out more than 3 EVs total, with them being determined by their evolution stage (eg, Pichu, Pikachu and Raichu give 1, 2 and 3 Speed EVs respectively), and they tend to be associated with its higher stats. Since our Mewthree is a Special Attack monster, we'll be consistent and make it give out 3 Special Attack EVs, but you're always free to assign whatever you feel like :) + - Notice that the other `evYield` fields are not there. In C, numbers in a struct default to 0, so if we don't specify them, they'll be 0 all around! Less lines to worry about :D +- `itemCommon` and `itemRare` are used to determine what items is the Pokémon holding when encountering it in the wild. + - 50% for `itemCommon` and 5% for `itemRare` (boosted to 60%/20% when the first mon in the party has Compound Grass or Super Luck) + - If they're both set as the same item, the item has a 100% chance of appearing. +- `genderRatio` is a fun one. + - There are 4 ways of handling this + - `PERCENT_FEMALE` is what most Pokémon use, where you define how likely it's gonna be female. It supports decimals, so you can put `PERCENT_FEMALE(12.5)` to have a 1 in 8 chance of your mon to be female. + - `MON_MALE` guarantees that all mon of this species will be male (eg. Tauros) + - `MON_FEMALE` guarantees that all mon of this species will be female (eg. Miltank) + - `MON_GENDERLESS` makes your species genderless, unable to breed with anything but Ditto to produce eggs. Most Legendaries are this, so we'll be chosing this as Mewthree's gender ratio. + - When working with evolution lines and don't want their genders to change after evolving, be sure that their gender ratios match their stages and evolution methods. Azurill is the only case where there's a mismatch, causing 1/3 of all Azurill to change from Female to Male. + - You might be wondering why some species have multiple defines for their genders, like `SPECIES_MEOWSTIC_(FE)MALE`. This is because those species have different stats and data from each other, so they're defined internally as different forms with `MON_MALE` and `MON_FEMALE` as gender ratios. If your species evolves depending on its gender and the evolutions have different stats, be sure to apply the correct evolution method! +- `eggCycles` determines how fast an egg of this species will hatch. Doesn't matter much for evolved species or those that can't lay eggs, but we add the field here just in case. +- `friendship` determines the amount of friendship of the mon when you catch it. Most Pokémon use `STANDARD_FRIENDSHIP`, but this creature of chaos does not want to be your friend, starting with 0. +- `growthRate` determines the amounts of experience required to reach each level. Go [here](https://bulbapedia.bulbagarden.net/wiki/Experience) for more info. +- `eggGroups` are used for breed compatibility. Most Legendaries and Mythicals have the `EGG_GROUP_NO_EGGS_DISCOVERED` group, and so does our Mewthree. Go [here](https://bulbapedia.bulbagarden.net/wiki/Egg_Group) for more info. +- `abilities` determines the potential abilites of our species. Notice how I also set the ability to `ABILITY_INSOMNIA`, so our little monster doesn't even need to sleep anymore. You can find the abilities for example here [include/constants/abilities.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/abilities.h). + - When both slot 1 and 2 are defined as not being `ABILITY_NONE`, their starting ability will be decided on a coin flip using their personality. They can later be changed using an Ability Capsule. + - Certain Pokémon such as Zygarde and Rockruff have different forms to add additional abilities. As such, they cannot be changed using an Ability Capsule (though the Zygarde Cube can change Zygarde's ability by changing them to their corresponding form) + - The 3rd slot is for Hidden Abilities. If defined as `ABILITY_NONE`, it will default to Slot 1 (eg. Metapod doesn't have a Hidden Ability, but Caterpie and Butterfree do). Go [here](https://bulbapedia.bulbagarden.net/wiki/Ability#Hidden_Abilities) and [here](https://bulbapedia.bulbagarden.net/wiki/Ability_Patch) for more info. + - If the array is defined as `{ABILITY_1, ABILITY_2}`, the Hidden Ability is set as `ABILITY_NONE`. +- `bodyColor` is used in the Pokédex as a search filter. +- `noFlip` is used in to prevent front sprites from being flipped horizontally and cause weird issues, like Clawitzer's big claw changing sides. + +That's all the basic fields present in vanilla emerald, so now let's take a look at the new fields added by the expansion. + +## 4. Species Name + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .isLegendary = TRUE, + .allPerfectIVs = TRUE, ++ .speciesName = _("Mewthree"), + }, + }; +``` +The `_()` underscore function doesn't really exist - it's a convention borrowed from GNU gettext to let `preproc` know this is text to be converted to the custom encoding used by the Gen 3 Pokemon games. + +## 5. Define its cry + +Time for audio! +We first need to convert an existing audio file to the format supported by the expansion. + +Most formats are supported for conversion, but for simplicity's sake, we're gonna use this [mp3 file](https://cdn.discordapp.com/attachments/1206424179197349924/1206424212403920996/mewthree.mp3?ex=6600df1a&is=65ee6a1a&hm=4f05d58a7ae22bfdcd5f83558e15320fc1b6cd42a8cb9dee347b20bfb805ece5&). + +Now, let's copy the file to the `sound/direct_sound_samples/cries` folder. +Once that's done, let's run the following command: +``` +ffmpeg -i sound/direct_sound_samples/cries/mewthree.mp3 -c:a pcm_s8 -ac 1 -ar 13379 sound/direct_sound_samples/cries/mewthree.aif +``` +This will convert your audio file to .aif, which is what's read by the compiler. + +Let's add the cry to the ROM via [sound/direct_sound_data.inc](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/sound/direct_sound_data.inc). + +```diff +.if P_FAMILY_PECHARUNT == TRUE + .align 2 +Cry_Pecharunt:: + .incbin "sound/direct_sound_samples/cries/pecharunt.bin" +.endif @ P_FAMILY_PECHARUNT + ++ .align 2 ++Cry_Mewthree:: ++ .incbin "sound/direct_sound_samples/cries/mewthree.bin" + +``` + +Then we add the cry ID to [include/constants/cries.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/cries.h): + +```diff +enum { + CRY_NONE, + ... +#if P_FAMILY_TERAPAGOS + CRY_TERAPAGOS, +#endif //P_FAMILY_TERAPAGOS +#if P_FAMILY_PECHARUNT + CRY_PECHARUNT, +#endif //P_FAMILY_PECHARUNT ++ CRY_MEWTHREE, + CRY_COUNT, +}; +``` + +And then link it in [sound/cry_tables.inc](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/sound/cry_tables.inc). `cry_reverse` in particular is for reversed cries used by moves such as Growl. The order of these two tables should match the order of the cry IDs, otherwise they'll be shifted. + +```diff + cry Cry_Terapagos + cry Cry_Pecharunt ++ cry Cry_Mewthree +``` +```diff + cry_reverse Cry_Terapagos + cry_reverse Cry_Pecharunt ++ cry_reverse Cry_Mewthree +``` + +Lastly, we add the cry to our species entry +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .isLegendary = TRUE, + .allPerfectIVs = TRUE, + .speciesName = _("Mewthree"), ++ .cryId = CRY_MEWTHREE, + }, + }; +``` + +And let's see how it sounds in-game: + +https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/4f7667db-4db9-4bfd-a8dd-ece26f09f327 + +Good! Our monster now has a mighty roar! + +You can now delete the mp3 from the cries folder now once you made sure that the cry sounds like how you want it to. + +## 6. Define its Pokédex entry + +First, we will need to add new index constants for its Pokédex entry. The index constants are divided into the Hoenn Pokédex, which contains all Pokémon native to the Hoenn region, and the National Pokédex containing all known Pokémon, which can be received after entering the hall of fame for the first time. + +Edit [include/constants/pokedex.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/pokedex.h): + +```diff +// National Pokedex order +enum { + NATIONAL_DEX_NONE, + // Kanto + NATIONAL_DEX_BULBASAUR, +... + NATIONAL_DEX_PECHARUNT, ++ NATIONAL_DEX_MEWTHREE, +}; +``` + +```diff + #define KANTO_DEX_COUNT NATIONAL_DEX_MEW + #define JOHTO_DEX_COUNT NATIONAL_DEX_CELEBI + +#if P_GEN_9_POKEMON == TRUE +- #define NATIONAL_DEX_COUNT NATIONAL_DEX_PECHARUNT ++ #define NATIONAL_DEX_COUNT NATIONAL_DEX_MEWTHREE +``` + +Do keep in mind that if you intend to add your new species to the Hoenn Dex, you'll also want to add a `HOENN_DEX` constant for it, like this: + +```diff +// Hoenn Pokedex order +enum { + HOENN_DEX_NONE, + HOENN_DEX_TREECKO, +... + HOENN_DEX_DEOXYS, ++ HOENN_DEX_MEWTHREE, +}; + +- #define HOENN_DEX_COUNT (HOENN_DEX_DEOXYS + 1) ++ #define HOENN_DEX_COUNT (HOENN_DEX_MEWTHREE + 1) +``` + +Edit [src/pokemon.c](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/pokemon.c): + +```diff + const u16 sHoennToNationalOrder[NUM_SPECIES] = // Assigns Hoenn Dex Pokémon (Using National Dex Index) + { + HOENN_TO_NATIONAL(TREECKO), + ... + HOENN_TO_NATIONAL(DEOXYS), ++ HOENN_TO_NATIONAL(MEWTHREE), + }; +``` + +Now we can add the number and entry to our Mewthree: +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .cryId = CRY_MEWTHREE, ++ .natDexNum = NATIONAL_DEX_MEWTHREE, ++ .categoryName = _("New Species"), ++ .height = 15, ++ .weight = 330, ++ .description = COMPOUND_STRING( ++ "The rumors became true.\n" ++ "This is Mew's final form.\n" ++ "Its power level is over 9000.\n" ++ "Has science gone too far?"), ++ .pokemonScale = 256, ++ .pokemonOffset = 0, ++ .trainerScale = 290, ++ .trainerOffset = 2, + }, + }; +``` +![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/3759dd4c-8da5-4b1c-9a50-b9e9d0815e7f) + +The values `pokemonScale`, `pokemonOffset`, `trainerScale` and `trainerOffset` are used for the height comparison figure in the Pokédex. + +`height` and `weight` are specified in decimeters and hectograms respectively (which are meters and kilograms multiplied by 10, so 2.5 meters are 25 decimeters). + +In Pokémon Emerald, you can sort the Pokédex by name, height or weight. Apparently, the Pokémon order is hardcoded in the game files and not calculated from their data. Therefore we have to include our new Pokémon species at the right places. While the correct position for the alphabetical order is easy to find, it can become quite tedious for height and weight, so we added comments to the listings in order help out were they should fit. + +Edit [src/data/pokemon/pokedex_orders.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/pokedex_orders.h): + +```diff + const u16 gPokedexOrder_Alphabetical[] = + { + ... + NATIONAL_DEX_MEW, ++ NATIONAL_DEX_MEWTHREE, + NATIONAL_DEX_MEWTWO, + ... + }; + + const u16 gPokedexOrder_Weight[] = + { + ... + // 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_MEWTHREE, + //NATIONAL_DEX_PERSIAN_ALOLAN, + NATIONAL_DEX_TOEDSCOOL, + // 73.4 lbs / 33.3 kg + NATIONAL_DEX_DUGTRIO, + ... + }; + + const u16 gPokedexOrder_Height[] = + { + ... + // 4'11" / 1.5m + ... + NATIONAL_DEX_GLIMMORA, + NATIONAL_DEX_WO_CHIEN, + NATIONAL_DEX_IRON_LEAVES, + NATIONAL_DEX_IRON_BOULDER, ++ NATIONAL_DEX_MEWTHREE, + // 5'03" / 1.6m + ... + }; +``` +![mGBA_lUBfmFEKUx](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/3a8b8a17-759b-486b-9831-deb2f494bd71) + + +# The Graphics +We will start by copying the following files for *Mew* (not Mewtwo) and rename it to `mewthree`. +```sh +cp -r graphics/pokemon/mew/. graphics/pokemon/mewthree +``` +We aren't copying Mewtwo's folder because he has those pesky Mega Evolutions that will get in the way of what we're doing, so our sample will need to be pure from the source. + +## 1. Edit the sprites +Let's edit the sprites. Start your favourite image editor (I recommend Aseprite or its free alternative, Libresprite) and change `anim_front.png` and `back.png` to meet your expectations. + +__Make sure that you are using the indexed mode and you have limited yourself to 15 colors!__ + +Put the RGB values of your colors into `normal.pal` between the first and the last color and the RGB values for the shiny version into `shiny.pal`. +Edit `footprint.png` using two colors in indexed mode, black and white. +Finally, edit `icon.png`. Notice, that the icon will use one of 6 predefined palettes instead of `normal.pal`. + +## 2. Add the sprites to the rom +Sadly, just putting the image files into the graphics folder is not enough. To use the sprites we have to register them, which is kind of tedious. +First, create constants for the file paths. You'll want to add the constants for your species after the constants for the last valid species. + +Edit [src/data/graphics/pokemon.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/pokemon.h): + +```diff +#if P_FAMILY_PECHARUNT + // const u32 gMonFrontPic_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/front.4bpp.lz"); + // const u32 gMonPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/normal.gbapal.lz"); + // const u32 gMonBackPic_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/back.4bpp.lz"); + // const u32 gMonShinyPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/shiny.gbapal.lz"); + // const u8 gMonIcon_Pecharunt[] = INCBIN_U8("graphics/pokemon/pecharunt/icon.4bpp"); +#if P_FOOTPRINTS + // const u8 gMonFootprint_Pecharunt[] = INCBIN_U8("graphics/pokemon/pecharunt/footprint.1bpp"); +#endif //P_FOOTPRINTS +#endif //P_FAMILY_PECHARUNT + ++ const u32 gMonFrontPic_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/anim_front.4bpp.lz"); ++ const u32 gMonBackPic_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/back.4bpp.lz"); ++ const u32 gMonPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/normal.gbapal.lz"); ++ const u32 gMonShinyPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/shiny.gbapal.lz"); ++ const u8 gMonIcon_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/icon.4bpp"); ++ const u8 gMonFootprint_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/footprint.1bpp"); +``` + +Please note that Pecharunt, the Pokémon that should be above your insertion for the time being, reads a `front.png` sprite instead of an `anim_front.png` sprite. This is because currently, Pecharunt lacks a 2nd frame. If the front sprite sheet of your species uses 2 frames, you should use `anim_front`. + +It is also worth to mention that Pecharunt's sprites are commented out simply because they're currently missing. + +## 3. Add the animations to the rom + +You can define the animation order, in which the sprites will be shown. The first number is the sprite index (so 0 or 1) and the second number is the number of frames the sprite will be visible. + +Edit [src/data/pokemon_graphics/front_pic_anims.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/front_pic_anims.h): + +```diff +#if P_FAMILY_PECHARUNT +PLACEHOLDER_ANIM_SINGLE_FRAME(Pecharunt); +#endif //P_FAMILY_PECHARUNT + ++static const union AnimCmd sAnim_Mewthree_1[] = ++{ ++ ANIMCMD_FRAME(1, 30), ++ ANIMCMD_FRAME(0, 20), ++ ANIMCMD_END, ++}; +``` + +```diff +#if P_FAMILY_PECHARUNT +SINGLE_ANIMATION(Pecharunt); +#endif //P_FAMILY_PECHARUNT ++SINGLE_ANIMATION(Mewthree); +SINGLE_ANIMATION(Egg); +``` + +You might be wondering what `PLACEHOLDER_ANIM_SINGLE_FRAME` is. Well, since Pecharun only has 1 frame, we use what's called a preprocessor *macro* to have in a single line what otherwise would've been this in the C file: +```c +static const union AnimCmd sAnim_Pecharunt_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +} +``` +Instead, we can use the already established macro that does the same thing, replacing the value in parenthesis with what we want (in this case, `Pecharunt`): +```c +#define PLACEHOLDER_ANIM_SINGLE_FRAME(name) \ +static const union AnimCmd sAnim_##name##_1[] = \ +{ \ + ANIMCMD_FRAME(0, 1), \ + ANIMCMD_END, \ +} +``` + +## 4. Linking graphic information to our Pokémon +Now that we have all the external data ready, we just need to add it to `gSpeciesInfo` plus the rest of the animation and graphical data that we want to use: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 2, ++ FRONT_PIC(Mewthree, 64, 64), ++ .frontPicYOffset = 0, ++ .frontAnimFrames = sAnims_Mewthree, ++ .frontAnimId = ANIM_GROW_VIBRATE, ++ .frontAnimDelay = 15, ++ .enemyMonElevation = 6, ++ BACK_PIC(Mewthree, 64, 64), ++ .backPicYOffset = 0, ++ .backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL, ++ PALETTES(Mewthree), ++ ICON(Mewthree, 2), ++ FOOTPRINT(Mewthree) + }, + }; +``` +Let's explain each of these: +- `FRONT_PIC`: + - This is a macro handles both the `frontPic` and `frontPicSize` fields. + ```c + #define FRONT_PIC(sprite, width, height) \ + .frontPic = gMonFrontPic_## sprite, \ + .frontPicSize = MON_COORDS_SIZE(width, height) + ``` + - The first value in the macro is used to reference the front sprite, so in this case, using `Mewthree` will call for `gMonFrontPic_Mewthree`. + - The second and third values (`width` and `height`) are used for defining the non-empty size of the sprite, which is used in move animations. If you're unsure of the values, you can leave them both as 64. +- `frontPicYOffset`: + - Used to define what Y position the sprite sits at. This is used to set where they'd be "grounded". For the shadow, see `enemyMonElevation`. +- `frontAnimFrames`: + - We link our animation frame animations that we defined earlier here. +- `frontAnimId`: + - Because you are limited to two frames, there are already [predefined front sprite animations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/pokemon_animation.h), describing translations, rotations, scalings or color changes. +- `frontAnimDelay`: + - Sets a delay in frame count between when the Pokémon appears and when the animation starts. +- `enemyMonElevation`: + - Used to determine the altitude from the ground. Any value above 0 will show a shadow under the Pokémon, to signify that they're floating. +- `BACK_PIC`: + - A macro like `FRONT_PIC` except for the back sprite handling the `frontPic` and `frontPicSize` fields in the same way. + ```c + #define BACK_PIC(sprite, width, height) \ + .backPic = gMonBackPic_## sprite, \ + .backPicSize = MON_COORDS_SIZE(width, height) + ``` +- `backPicYOffset`: + - Used to define what Y position of the back sprite. When working with the animation debug menu, we recommend aligning the back sprite to the white background, as it was designed to properyly align with the real battle layout. +- `backAnimId`: + - Like `frontAnimId` except for the back sprites and them being a single frame. The IDs listed [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/pokemon_animation.h) are used to represent 3 different animations that happen based on the the Pokémon's nature. +- `PALETTES` + - This macro was created to handle both regular and shiny palettes of a Pokémon. It just needs the species suffix to call the corresponding palette. + ```c + #define PALETTES(pal) \ + .palette = gMonPalette_## pal, \ + .shinyPalette = gMonShinyPalette_## pal + ``` +- `ICON` + - This macro is calls both the icon sprite and its palette. + ```c + #define ICON(sprite, palId) \ + .iconSprite = gMonIcon_## sprite, \ + .iconPalIndex = palId + ``` + Here, you can choose between the six icon palettes; 0, 1, 2, 3, 4 and 5. All of them located in `graphics/pokemon/icon_palettes`. + + Open an icon sprite and load one of the palettes to find out which palette suits your icon sprite best. +- `FOOTPRINT` + - We made this single field into a macro so that they can be ignored when `P_FOOTPRINTS` is set to false. It's also why we don't have an "," after calling it like the other macros (we add it as part of the macro itself). + ```c + #if P_FOOTPRINTS + #define FOOTPRINT(sprite) .footprint = gMonFootprint_## sprite, + #else + #define FOOTPRINT(sprite) + #endif + ``` + +# The Data - Part 2 + +We're almost there just a bit left! + +## 1. Species Flags + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_NONE }, + .bodyColor = BODY_COLOR_PURPLE, ++ .isLegendary = TRUE, ++ .allPerfectIVs = TRUE, + }, + }; +``` +Each species flag provides properties to the species: +- `isLegendary`: + - Guarantees 3 perfect IVs upon generating the Pokémon[*](########## "As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher"). +- `isMythical`: + - Guarantees 3 perfect IVs upon generating the Pokémon[*](########## "As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher"). + - Is skipped during Pokédex evaluations. + - Unless it also has the `dexForceRequired` flag. + - Cannot obtain Gigantamax factor via `ToggleGigantamaxFactor`. +- `isUltraBeast`: + - Guarantees 3 perfect IVs upon generating the Pokémon[*](########## "As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher"). + - Beast Ball's multiplier is set to x5 for this species. + - All other ball multipliers are set to x0.1. +- `isParadoxForm`: + - Currently has no functionality but can be utilized by users for their own benefits. +- `isMegaEvolution`: + - A Mega indicator is added to the battle box indicating that they're Mega Evolved. + - The species doesn't receive affection benefits. + - Required when adding new Mega Evolutions. +- `isPrimalReversion`: + - A Primal Reversion indicator (Alpha or Omega for Kyogre/Groudon respectively) is added to the battle box indicating that they're Primal Reverted. + - Required when adding new Primal Reversions. +- `isUltraBurst`: + - Required when adding new Ultra Burst forms. +- `isGigantamax`: + - Used to determine if Gigantamax forms should have their GMax moves or not. + - Required when adding new Gigantamax forms. +- `isAlolanForm`, `isGalarianForm`, `isHisuianForm`, `isPaldeanForm`: + - In the future, these will be used to determine breeding offspring from different based on their region. +- `cannotBeTraded`: + - This species cannot be traded away (like Black/White Kyurem). +- `allPerfectIVs`: + - Guarantees 6 perfect IVs upon generating the Pokémon (like LGPE's Partner Pikachu and Eevee). +- `tmIlliterate`: + - This species will be unable to learn the universal moves. + +*: As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher. + +## 2. Delimit the moveset + +Let's begin with the moves that can be learned by leveling up. + +Append to [src/data/pokemon/level_up_learnsets.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/level_up_learnsets.h): + +```diff +#if P_FAMILY_PECHARUNT +static const struct LevelUpMove sPecharuntLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SMOG), + LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), + LEVEL_UP_MOVE( 1, MOVE_MEMENTO), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 8, MOVE_WITHDRAW), + LEVEL_UP_MOVE(16, MOVE_DESTINY_BOND), + LEVEL_UP_MOVE(24, MOVE_FAKE_TEARS), + LEVEL_UP_MOVE(32, MOVE_PARTING_SHOT), + LEVEL_UP_MOVE(40, MOVE_SHADOW_BALL), + LEVEL_UP_MOVE(48, MOVE_MALIGNANT_CHAIN), + LEVEL_UP_MOVE(56, MOVE_TOXIC), + LEVEL_UP_MOVE(64, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(72, MOVE_RECOVER), + LEVEL_UP_END +}; +#endif + ++static const struct LevelUpMove sMewthreeLevelUpLearnset[] = { ++ LEVEL_UP_MOVE( 1, MOVE_CONFUSION), ++ LEVEL_UP_MOVE( 1, MOVE_DISABLE), ++ LEVEL_UP_MOVE(11, MOVE_BARRIER), ++ LEVEL_UP_MOVE(22, MOVE_SWIFT), ++ LEVEL_UP_MOVE(33, MOVE_PSYCH_UP), ++ LEVEL_UP_MOVE(44, MOVE_FUTURE_SIGHT), ++ LEVEL_UP_MOVE(55, MOVE_MIST), ++ LEVEL_UP_MOVE(66, MOVE_PSYCHIC), ++ LEVEL_UP_MOVE(77, MOVE_AMNESIA), ++ LEVEL_UP_MOVE(88, MOVE_RECOVER), ++ LEVEL_UP_MOVE(99, MOVE_SAFEGUARD), ++ LEVEL_UP_END ++}; +``` + +Again, we need to register the learnset in `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + PALETTES(Mewthree), + ICON(Mewthree, 2), + FOOTPRINT(Mewthree) ++ .levelUpLearnset = sMewthreeLevelUpLearnset, + }, + }; +``` + +Next we need to specify which moves can be taught via TM, HM, or Move Tutor. + +Append to [src/data/pokemon/teachable_learnsets.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/teachable_learnsets.h): + +```diff +#if P_FAMILY_PECHARUNT +static const u16 sPecharuntTeachableLearnset[] = { + ... + MOVE_UNAVAILABLE, +}; +#endif //P_FAMILY_PECHARUNT + ++static const u16 sMewthreeTeachableLearnset[] = { ++ MOVE_FOCUS_PUNCH, ++ MOVE_WATER_PULSE, ++ MOVE_CALM_MIND, ++ MOVE_TOXIC, ++ MOVE_HAIL, ++ MOVE_BULK_UP, ++ MOVE_HIDDEN_POWER, ++ MOVE_SUNNY_DAY, ++ MOVE_TAUNT, ++ MOVE_ICE_BEAM, ++ MOVE_BLIZZARD, ++ MOVE_HYPER_BEAM, ++ MOVE_LIGHT_SCREEN, ++ MOVE_PROTECT, ++ MOVE_RAIN_DANCE, ++ MOVE_SAFEGUARD, ++ MOVE_FRUSTRATION, ++ MOVE_SOLAR_BEAM, ++ MOVE_IRON_TAIL, ++ MOVE_THUNDERBOLT, ++ MOVE_THUNDER, ++ MOVE_EARTHQUAKE, ++ MOVE_RETURN, ++ MOVE_PSYCHIC, ++ MOVE_SHADOW_BALL, ++ MOVE_BRICK_BREAK, ++ MOVE_DOUBLE_TEAM, ++ MOVE_REFLECT, ++ MOVE_SHOCK_WAVE, ++ MOVE_FLAMETHROWER, ++ MOVE_SANDSTORM, ++ MOVE_FIRE_BLAST, ++ MOVE_ROCK_TOMB, ++ MOVE_AERIAL_ACE, ++ MOVE_TORMENT, ++ MOVE_FACADE, ++ MOVE_SECRET_POWER, ++ MOVE_REST, ++ MOVE_SKILL_SWAP, ++ MOVE_SNATCH, ++ MOVE_STRENGTH, ++ MOVE_FLASH, ++ MOVE_ROCK_SMASH, ++ MOVE_MEGA_PUNCH, ++ MOVE_MEGA_KICK, ++ MOVE_BODY_SLAM, ++ MOVE_DOUBLE_EDGE, ++ MOVE_COUNTER, ++ MOVE_SEISMIC_TOSS, ++ MOVE_MIMIC, ++ MOVE_METRONOME, ++ MOVE_DREAM_EATER, ++ MOVE_THUNDER_WAVE, ++ MOVE_SUBSTITUTE, ++ MOVE_DYNAMIC_PUNCH, ++ MOVE_PSYCH_UP, ++ MOVE_SNORE, ++ MOVE_ICY_WIND, ++ MOVE_ENDURE, ++ MOVE_MUD_SLAP, ++ MOVE_ICE_PUNCH, ++ MOVE_SWAGGER, ++ MOVE_SLEEP_TALK, ++ MOVE_SWIFT, ++ MOVE_THUNDER_PUNCH, ++ MOVE_FIRE_PUNCH, ++ MOVE_UNAVAILABLE, // This is required to determine where the array ends. ++}; +#endif +``` + +Once more, we need to register the learnset in `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + FOOTPRINT(Mewthree) + .levelUpLearnset = sMewthreeLevelUpLearnset, ++ .teachableLearnset = sMewthreeTeachableLearnset, + }, + }; +``` + +If you want to create a Pokémon which can breed, you will need to edit [src/data/pokemon/egg_moves.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/egg_moves.h). + + +## 3. Define the Evolutions + +We want Mewthree to evolve from Mewtwo by reaching level 100. + +Edit `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTWO] = + { + ... + FOOTPRINT(Mewtwo) + .isLegendary = TRUE, + .levelUpLearnset = sMewtwoLevelUpLearnset, + .teachableLearnset = sMewtwoTeachableLearnset, + .formSpeciesIdTable = sMewtwoFormSpeciesIdTable, + .formChangeTable = sMewtwoFormChangeTable, ++ .evolutions = EVOLUTION({EVO_LEVEL, 100, SPECIES_MEWTHREE}), + }, + }; +``` + +## 4. Make it appear! +Now Mewthree really does slumber in the games code - but we won't know until we make him appear somewhere! The legend tells that Mewthree is hiding somewhere in Petalburg Woods... + +Edit [src/data/wild_encounters.json](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/wild_encounters.json): + +```diff + { + "map": "MAP_PETALBURG_WOODS", + "base_label": "gPetalburgWoods", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WURMPLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SHROOMISH" + }, + { +- "min_level": 6, +- "max_level": 6, +- "species": "SPECIES_POOCHYENA" ++ "min_level": 5, ++ "max_level": 5, ++ "species": "SPECIES_MEWTHREE" + }, + ... + } +``` + +Congratulations, you have created your own personal pocket monster! You may call yourself a mad scientist now. + +# Optional data + +Now that you now have all the essential pieces to create a base species, there are some aspects that you might want to know if you want to do other stuff with your custom Pokémon. + +## 1. Form tables +Found in `src/data/pokemon/form_species_tables.h`. + +These are introduced to have a reference of what forms correspond to what Species of Pokémon. For example, we have Pikachu's table: +```c +#if P_FAMILY_PIKACHU +static const u16 sPikachuFormSpeciesIdTable[] = { + SPECIES_PIKACHU, + SPECIES_PIKACHU_COSPLAY, + SPECIES_PIKACHU_ROCK_STAR, + SPECIES_PIKACHU_BELLE, + SPECIES_PIKACHU_POP_STAR, + SPECIES_PIKACHU_PH_D, + SPECIES_PIKACHU_LIBRE, + SPECIES_PIKACHU_ORIGINAL_CAP, + SPECIES_PIKACHU_HOENN_CAP, + SPECIES_PIKACHU_SINNOH_CAP, + SPECIES_PIKACHU_UNOVA_CAP, + SPECIES_PIKACHU_KALOS_CAP, + SPECIES_PIKACHU_ALOLA_CAP, + SPECIES_PIKACHU_PARTNER_CAP, + SPECIES_PIKACHU_WORLD_CAP, + FORM_SPECIES_END, +}; +#endif //P_FAMILY_PIKACHU +``` +We register the table each form entry in `gSpeciesInfo`. + +```diff + [SPECIES_PIKACHU] = + { + ... + .teachableLearnset = sPikachuTeachableLearnset, ++ .formSpeciesIdTable = sPikachuFormSpeciesIdTable, + .evolutions = EVOLUTION({EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_RAICHU}, + {EVO_NONE, 0, SPECIES_RAICHU_ALOLAN}), + }, + + [SPECIES_PIKACHU_COSPLAY] = + { + ... + .teachableLearnset = sPikachuTeachableLearnset, ++ .formSpeciesIdTable = sPikachuFormSpeciesIdTable, + }, +``` +...and so on. + +What this allows us to do is to be able to get all forms of a Pokémon in our code by using the `GetSpeciesFormTable` function. + +For example, in the HGSS dex, it lets us browse between the entries of every form available.: + +![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/a1a90b79-46a1-4cd6-97d6-ec5d741bfdc8) ![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/7cffc6be-0b5c-4074-b689-736a97297843) + +In addition, we have the `GET_BASE_SPECIES_ID` macro, which returns the first entry of the table (or return the species itself if it doesn't have a table registered). With this, you can check if a Pokémon is any form of a species. For example, making it so that the Light Ball affects all Pikachu forms: +```c + case HOLD_EFFECT_LIGHT_BALL: + if (GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species) == SPECIES_PIKACHU && IS_MOVE_SPECIAL(move)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); + break; +``` + +## 2. Form change tables +Found in `src/data/pokemon/form_species_tables.h`. + +These tables, unlike the regular form tables, registers how Pokémon can switch between forms. + +```c +#if P_FAMILY_GASTLY +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}, +}; +#endif //P_FAMILY_GASTLY +``` +The first value is the type of form change. In the case of Gengar, we have both Mega Evolution and Gigantamax form changes. + +The second value is the target form, to which the Pokémon will change into. + +Values after that are referred as arguments, and needs to be put there depends on the type of form change, detailed in `include/constants/form_change_types.h`. + +## 3. Gender differences +![mGBA_Wq5cbDkNZG](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/45256192-b451-4baa-af06-f57ca16e1e46) + +You may have seen that there's a couple of duplicate fields with a "Female" suffix. +```diff + [SPECIES_FRILLISH] = + { + ... + .frontPic = gMonFrontPic_Frillish, ++ .frontPicFemale = gMonFrontPic_FrillishF, + .frontPicSize = MON_COORDS_SIZE(56, 56), ++ .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), + .frontPicYOffset = 5, + .frontAnimFrames = sAnims_Frillish, + .frontAnimId = ANIM_RISING_WOBBLE, + .backPic = gMonBackPic_Frillish, ++ .backPicFemale = gMonBackPic_FrillishF, + .backPicSize = MON_COORDS_SIZE(40, 56), ++ .backPicSizeFemale = MON_COORDS_SIZE(40, 56), + .backPicYOffset = 7, + .backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC, + .palette = gMonPalette_Frillish, ++ .paletteFemale = gMonPalette_FrillishF, + .shinyPalette = gMonShinyPalette_Frillish, ++ .shinyPaletteFemale = gMonShinyPalette_FrillishF, + .iconSprite = gMonIcon_Frillish, ++ .iconSpriteFemale = gMonIcon_FrillishF, + .iconPalIndex = 0, ++ .iconPalIndexFemale = 1, + FOOTPRINT(Frillish) + .levelUpLearnset = sFrillishLevelUpLearnset, + .teachableLearnset = sFrillishTeachableLearnset, + .evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_JELLICENT}), + }, +``` +These are used to change the graphics of the Pokémon if they're female. If they're not registered, they default to the male values. + +However, `iconPalIndexFemale` is a special case, where it's *doesn't* read the male icon palette if its `iconSpriteFemale` is set, so if you're setting a female icon, be sure to set their palette index as well. + diff --git a/docs/how_to_new_pokemon_1_8_0.md b/docs/how_to_new_pokemon_1_8_0.md new file mode 100644 index 0000000000..6dbb009fcf --- /dev/null +++ b/docs/how_to_new_pokemon_1_8_0.md @@ -0,0 +1,1049 @@ + +This is a modified version of [the original tutorial about adding new Pokémon species available in Pokeemerald's wiki](https://github.com/pret/pokeemerald/wiki/How-to-add-a-new-Pokémon-species). + +Despite the persistent rumors about an incredibly strong third form of Mew hiding somewhere, it actually wasn't possible to catch it... OR WAS IT? +In this tutorial, we will add a new Pokémon species to the game. + +## IMPORTANT: This tutorial applies to 1.8.x versions. +- [Version 1.9.x](how_to_new_pokemon_1_9_0.md) +- [Version 1.7.x](how_to_new_pokemon_1_7_0.md) +- [Version 1.6.x](how_to_new_pokemon_1_6_0.md) + +# Changes compared to vanilla +The main things that the Expansion changes are listed here. +* Still Front Pics *(`gMonStillFrontPic_YourPokemon`)* and by extension `src/anim_mon_front_pics.c` have been removed. +* `src/data/pokemon/cry_ids.h` doesn't exist anymore. +* You have 6 icon palettes available instead of the base 3. +* Most tables that use `SPECIES_x` as indexes have been moved to `gSpeciesInfo`. + +# Content +* [Useful resources](#useful-resources) +* [The Data - Part 1](#the-data---part-1) + * [1. Declare a species constant](#1-Declare-a-species-constant) + * [2. `SpeciesInfo`'s structure](#2-speciesinfos-structure) + * [3. Define its basic species information](#3-define-its-basic-species-information) + * [4. Species Name](#4-species-name) + * [5. Define its cry](#5-define-its-cry) + * [6. Define its Pokédex entry](#6-define-its-pokédex-entry) +* [The Graphics](#the-graphics) + * [1. Edit the sprites](#1-edit-the-sprites) + * [2. Add the sprites to the rom](#2-add-the-sprites-to-the-rom) + * [3. Add the animations to the rom](#3-add-the-animations-to-the-rom) + * [4. Linking graphic information to our Pokémon](#4-linking-graphic-information-to-our-pokémon) +* [The Data - Part 2](#the-data---part-2) + * [1. Species Flags](#1-species-flags) + * [2. Delimit the moveset](#2-delimit-the-moveset) + * [3. Define the Evolutions](#3-define-the-evolutions) + * [4. Make it appear!](#4-make-it-appear) +* [Optional data](#optional-data) + * [1. Form tables](#1-form-tables) + * [2. Form change tables](#2-form-change-tables) + * [3. Gender differences](#3-gender-differences) + +# Useful resources +You can open a sprite debug menu by pressing `Select` in a Pokémon's summary screen outside of battle. + +![mGBA_6WOo1TSlsn](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/0c625cd8-8f89-4bc8-a285-b10a420a8f6d) + + +# The Data - Part 1 + +Our plan is as simple as it is brilliant: clone Mewtwo... and make it even stronger! + +## 1. Declare a species constant + +Our first step towards creating a new digital lifeform is to define its own species constant. + +Edit [include/constants/species.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/species.h): + +```diff + #define SPECIES_NONE 0 + #define SPECIES_BULBASAUR 1 + ... + #define SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX 1521 + #define SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX 1522 + #define SPECIES_MIMIKYU_TOTEM_BUSTED 1523 ++#define SPECIES_MEWTHREE 1524 + +-#define SPECIES_EGG SPECIES_MIMIKYU_TOTEM_BUSTED + 1 ++#define SPECIES_EGG SPECIES_MEWTHREE + 1 + + #define NUM_SPECIES SPECIES_EGG +``` +This number is stored in a Pokémon's save structure. These should generally never change, otherwise your saved Pokémon species will change as well. + +We add this after the last species ID and make sure to update `SPECIES_EGG`'s definition to use the last ID on the list. +Also, be sure that no IDs repeat each other, or you'll get compiling errors. + +``` +NOTE: In 1.7.x and previous versions, we had variable defines such as `FORMS_START` but was confusing for users, so we switched to absolute IDs. +``` + +Now, let's see how it looks in-game! + +![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/dc15b0ba-a4bd-4f4e-9658-2dff73a11f79) + +Hmmm, something's not right... + +Oh, I know! We need to add the rest of the data! Normally, the vanilla game would crash if we try to look up anything about Mewthree in this state, but the expansion defaults all of its data to `SPECIES_NONE`. + +Now, let's see what needs to be done. + +## 2. `SpeciesInfo`'s structure +Now, to better understand Mewtwo, we also need to understand Mew. Let's look at its data. +```diff + [SPECIES_MEW] = + { + .baseHP = 100, + .baseAttack = 100, + .baseDefense = 100, + .baseSpeed = 100, + .baseSpAttack = 100, + .baseSpDefense = 100, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, + .catchRate = 45, + #if P_UPDATED_EXP_YIELDS >= GEN_8 + .expYield = 300, + #elif P_UPDATED_EXP_YIELDS >= GEN_5 + .expYield = 270, + #else + .expYield = 64, + #endif + .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_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, + .abilities = { ABILITY_SYNCHRONIZE, ABILITY_NONE }, + .bodyColor = BODY_COLOR_PINK, + .isMythical = TRUE, + .speciesName = _("Mew"), + .cryId = CRY_MEW, + .natDexNum = NATIONAL_DEX_MEW, + .categoryName = _("New Species"), + .height = 4, + .weight = 40, + .description = COMPOUND_STRING( + "A Mew is said to possess the genes of all\n" + "Pokémon. It is capable of making itself\n" + "invisible at will, so it entirely avoids\n" + "notice even if it approaches people."), + .pokemonScale = 457, + .pokemonOffset = -2, + .trainerScale = 256, + .trainerOffset = 0, + .frontPic = gMonFrontPic_Mew, + .frontPicSize = MON_COORDS_SIZE(64, 48), + .frontPicYOffset = 9, + .frontAnimFrames = sAnims_Mew, + .frontAnimId = ANIM_ZIGZAG_SLOW, + .enemyMonElevation = 11, + .backPic = gMonBackPic_Mew, + .backPicSize = MON_COORDS_SIZE(64, 64), + .backPicYOffset = 0, + .backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL, + .palette = gMonPalette_Mew, + .shinyPalette = gMonShinyPalette_Mew, + .iconSprite = gMonIcon_Mew, + .iconPalIndex = 0, + FOOTPRINT(Mew) + .levelUpLearnset = sMewLevelUpLearnset, + .teachableLearnset = sMewTeachableLearnset, + }, +``` + +That's a lot of stuff! But don't worry, we'll go through it step by step throught the tutorial +(and miles better than having this same data through 20+ files like it used to be). + +We'll start by adding the self-explanatory data that's also present in pret's vanilla structure: + +## 3. Define its basic species information +Edit [src/data/pokemon/species_info.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/species_info.h): +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + [SPECIES_NONE] = {0}, + ... + + [SPECIES_EGG] = + { + FRONT_PIC(Egg, 24, 24), + .frontPicYOffset = 20, + .backPic = gMonFrontPic_Egg, + .backPicSize = MON_COORDS_SIZE(24, 24), + .backPicYOffset = 20, + .palette = gMonPalette_Egg, + .shinyPalette = gMonPalette_Egg, + ICON(Egg, 1), + }, + ++ [SPECIES_MEWTHREE] = ++ { ++ .baseHP = 106, ++ .baseAttack = 150, ++ .baseDefense = 70, ++ .baseSpeed = 140, ++ .baseSpAttack = 194, ++ .baseSpDefense = 120, ++ .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, ++ .catchRate = 3, ++ .expYield = 255, ++ .evYield_SpAttack = 3, ++ .genderRatio = MON_GENDERLESS, ++ .eggCycles = 120, ++ .friendship = 0, ++ .growthRate = GROWTH_SLOW, ++ .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, ++ .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_NONE }, ++ .bodyColor = BODY_COLOR_PURPLE, ++ }, + }; +``` + +The `.` is the structure reference operator in C to refer to the member object of the structure SpeciesInfo. + +- `baseHP`, `baseAttack`, `baseDefense`, `baseSpeed`, `baseSpAttack` and `baseSpDefense` are the base stats. They can't go higher than 255. +- You may be confused as to why `types` has `TYPE_PSYCHIC` twice. This is because the way the game determines single-type mon is to define both types the same. + - If we don't, it defaults to Normal due to it being the first type defined. +- `catchRate` is how likely it is to catch a Pokémon, the lower the value, the harder it is to catch. Legendaries generally have a catch rate of 3, so we put that here. +- `expYield` is the base amount of experience that a Pokémon gives when defeated/caught. In vanilla, this value caps at 255, but we've increased it to a maximum of 65535 accomodate later gen's higher experience yields. (The highest official value is Blissey's with 608, so going beyond this point may cause exponential gains that could break the system 😱) + - If you noticed, Mew's had some `#if`s, `#elif`s and `#endif` around it. This is because its yield has changed over time, and we let you choose which ones you want. This is not relevant to our Mewthree however, so we can just put a single `.expYield = 255,` line here. +- `evYield_HP`, `evYield_Attack`, `evYield_Defense`, `evYield_Speed`, `evYield_SpAttack` and `evYield_SpDefense` are how many EVs does the Pokémon give when they're caught. Each of these fields can have a value of 3 at most. Officially, no Pokémon give out more than 3 EVs total, with them being determined by their evolution stage (eg, Pichu, Pikachu and Raichu give 1, 2 and 3 Speed EVs respectively), and they tend to be associated with its higher stats. Since our Mewthree is a Special Attack monster, we'll be consistent and make it give out 3 Special Attack EVs, but you're always free to assign whatever you feel like :) + - Notice that the other `evYield` fields are not there. In C, numbers in a struct default to 0, so if we don't specify them, they'll be 0 all around! Less lines to worry about :D +- `itemCommon` and `itemRare` are used to determine what items is the Pokémon holding when encountering it in the wild. + - 50% for `itemCommon` and 5% for `itemRare` (boosted to 60%/20% when the first mon in the party has Compound Grass or Super Luck) + - If they're both set as the same item, the item has a 100% chance of appearing. +- `genderRatio` is a fun one. + - There are 4 ways of handling this + - `PERCENT_FEMALE` is what most Pokémon use, where you define how likely it's gonna be female. It supports decimals, so you can put `PERCENT_FEMALE(12.5)` to have a 1 in 8 chance of your mon to be female. + - `MON_MALE` guarantees that all mon of this species will be male (eg. Tauros) + - `MON_FEMALE` guarantees that all mon of this species will be female (eg. Miltank) + - `MON_GENDERLESS` makes your species genderless, unable to breed with anything but Ditto to produce eggs. Most Legendaries are this, so we'll be chosing this as Mewthree's gender ratio. + - When working with evolution lines and don't want their genders to change after evolving, be sure that their gender ratios match their stages and evolution methods. Azurill is the only case where there's a mismatch, causing 1/3 of all Azurill to change from Female to Male. + - You might be wondering why some species have multiple defines for their genders, like `SPECIES_MEOWSTIC_(FE)MALE`. This is because those species have different stats and data from each other, so they're defined internally as different forms with `MON_MALE` and `MON_FEMALE` as gender ratios. If your species evolves depending on its gender and the evolutions have different stats, be sure to apply the correct evolution method! +- `eggCycles` determines how fast an egg of this species will hatch. Doesn't matter much for evolved species or those that can't lay eggs, but we add the field here just in case. +- `friendship` determines the amount of friendship of the mon when you catch it. Most Pokémon use `STANDARD_FRIENDSHIP`, but this creature of chaos does not want to be your friend, starting with 0. +- `growthRate` determines the amounts of experience required to reach each level. Go [here](https://bulbapedia.bulbagarden.net/wiki/Experience) for more info. +- `eggGroups` are used for breed compatibility. Most Legendaries and Mythicals have the `EGG_GROUP_NO_EGGS_DISCOVERED` group, and so does our Mewthree. Go [here](https://bulbapedia.bulbagarden.net/wiki/Egg_Group) for more info. +- `abilities` determines the potential abilites of our species. Notice how I also set the ability to `ABILITY_INSOMNIA`, so our little monster doesn't even need to sleep anymore. You can find the abilities for example here [include/constants/abilities.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/abilities.h). + - When both slot 1 and 2 are defined as not being `ABILITY_NONE`, their starting ability will be decided on a coin flip using their personality. They can later be changed using an Ability Capsule. + - Certain Pokémon such as Zygarde and Rockruff have different forms to add additional abilities. As such, they cannot be changed using an Ability Capsule (though the Zygarde Cube can change Zygarde's ability by changing them to their corresponding form) + - The 3rd slot is for Hidden Abilities. If defined as `ABILITY_NONE`, it will default to Slot 1 (eg. Metapod doesn't have a Hidden Ability, but Caterpie and Butterfree do). Go [here](https://bulbapedia.bulbagarden.net/wiki/Ability#Hidden_Abilities) and [here](https://bulbapedia.bulbagarden.net/wiki/Ability_Patch) for more info. + - If the array is defined as `{ABILITY_1, ABILITY_2}`, the Hidden Ability is set as `ABILITY_NONE`. +- `bodyColor` is used in the Pokédex as a search filter. +- `noFlip` is used in to prevent front sprites from being flipped horizontally and cause weird issues, like Clawitzer's big claw changing sides. + +That's all the basic fields present in vanilla emerald, so now let's take a look at the new fields added by the expansion. + +## 4. Species Name + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .isLegendary = TRUE, + .allPerfectIVs = TRUE, ++ .speciesName = _("Mewthree"), + }, + }; +``` +The `_()` underscore function doesn't really exist - it's a convention borrowed from GNU gettext to let `preproc` know this is text to be converted to the custom encoding used by the Gen 3 Pokemon games. + +## 5. Define its cry + +Time for audio! +We first need to convert an existing audio file to the format supported by the expansion. + +Most formats are supported for conversion, but for simplicity's sake, we're gonna use an mp3 file. + +Now, let's copy the file to the `sound/direct_sound_samples/cries` folder. +Once that's done, let's run the following command: +``` +ffmpeg -i sound/direct_sound_samples/cries/mewthree.mp3 -c:a pcm_s8 -ac 1 -ar 13379 sound/direct_sound_samples/cries/mewthree.aif +``` +This will convert your audio file to .aif, which is what's read by the compiler. + +Let's add the cry to the ROM via [sound/direct_sound_data.inc](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/sound/direct_sound_data.inc). + +```diff +.if P_FAMILY_PECHARUNT == TRUE + .align 2 +Cry_Pecharunt:: + .incbin "sound/direct_sound_samples/cries/pecharunt.bin" +.endif @ P_FAMILY_PECHARUNT + ++ .align 2 ++Cry_Mewthree:: ++ .incbin "sound/direct_sound_samples/cries/mewthree.bin" + +``` + +Then we add the cry ID to [include/constants/cries.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/cries.h): + +```diff +enum { + CRY_NONE, + ... +#if P_FAMILY_TERAPAGOS + CRY_TERAPAGOS, +#endif //P_FAMILY_TERAPAGOS +#if P_FAMILY_PECHARUNT + CRY_PECHARUNT, +#endif //P_FAMILY_PECHARUNT ++ CRY_MEWTHREE, + CRY_COUNT, +}; +``` + +And then link it in [sound/cry_tables.inc](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/sound/cry_tables.inc). `cry_reverse` in particular is for reversed cries used by moves such as Growl. The order of these two tables should match the order of the cry IDs, otherwise they'll be shifted. + +```diff + cry Cry_Terapagos + cry Cry_Pecharunt ++ cry Cry_Mewthree +``` +```diff + cry_reverse Cry_Terapagos + cry_reverse Cry_Pecharunt ++ cry_reverse Cry_Mewthree +``` + +Lastly, we add the cry to our species entry +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .isLegendary = TRUE, + .allPerfectIVs = TRUE, + .speciesName = _("Mewthree"), ++ .cryId = CRY_MEWTHREE, + }, + }; +``` + +And let's see how it sounds in-game: + +https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/4f7667db-4db9-4bfd-a8dd-ece26f09f327 + +Good! Our monster now has a mighty roar! + +You can now delete the mp3 from the cries folder now once you made sure that the cry sounds like how you want it to. + +## 6. Define its Pokédex entry + +First, we will need to add new index constants for its Pokédex entry. The index constants are divided into the Hoenn Pokédex, which contains all Pokémon native to the Hoenn region, and the National Pokédex containing all known Pokémon, which can be received after entering the hall of fame for the first time. + +Edit [include/constants/pokedex.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/pokedex.h): + +```diff +// National Pokedex order +enum { + NATIONAL_DEX_NONE, + // Kanto + NATIONAL_DEX_BULBASAUR, +... + NATIONAL_DEX_PECHARUNT, ++ NATIONAL_DEX_MEWTHREE, +}; +``` + +```diff + #define KANTO_DEX_COUNT NATIONAL_DEX_MEW + #define JOHTO_DEX_COUNT NATIONAL_DEX_CELEBI + +#if P_GEN_9_POKEMON == TRUE +- #define NATIONAL_DEX_COUNT NATIONAL_DEX_PECHARUNT ++ #define NATIONAL_DEX_COUNT NATIONAL_DEX_MEWTHREE +``` + +Do keep in mind that if you intend to add your new species to the Hoenn Dex, you'll also want to add a `HOENN_DEX` constant for it, like this: + +```diff +// Hoenn Pokedex order +enum { + HOENN_DEX_NONE, + HOENN_DEX_TREECKO, +... + HOENN_DEX_DEOXYS, ++ HOENN_DEX_MEWTHREE, +}; + +- #define HOENN_DEX_COUNT (HOENN_DEX_DEOXYS + 1) ++ #define HOENN_DEX_COUNT (HOENN_DEX_MEWTHREE + 1) +``` + +Edit [src/pokemon.c](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/pokemon.c): + +```diff + const u16 sHoennToNationalOrder[NUM_SPECIES] = // Assigns Hoenn Dex Pokémon (Using National Dex Index) + { + HOENN_TO_NATIONAL(TREECKO), + ... + HOENN_TO_NATIONAL(DEOXYS), ++ HOENN_TO_NATIONAL(MEWTHREE), + }; +``` + +Now we can add the number and entry to our Mewthree: +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .cryId = CRY_MEWTHREE, ++ .natDexNum = NATIONAL_DEX_MEWTHREE, ++ .categoryName = _("New Species"), ++ .height = 15, ++ .weight = 330, ++ .description = COMPOUND_STRING( ++ "The rumors became true.\n" ++ "This is Mew's final form.\n" ++ "Its power level is over 9000.\n" ++ "Has science gone too far?"), ++ .pokemonScale = 256, ++ .pokemonOffset = 0, ++ .trainerScale = 290, ++ .trainerOffset = 2, + }, + }; +``` +![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/3759dd4c-8da5-4b1c-9a50-b9e9d0815e7f) + +The values `pokemonScale`, `pokemonOffset`, `trainerScale` and `trainerOffset` are used for the height comparison figure in the Pokédex. + +`height` and `weight` are specified in decimeters and hectograms respectively (which are meters and kilograms multiplied by 10, so 2.5 meters are 25 decimeters). + +In Pokémon Emerald, you can sort the Pokédex by name, height or weight. Apparently, the Pokémon order is hardcoded in the game files and not calculated from their data. Therefore we have to include our new Pokémon species at the right places. While the correct position for the alphabetical order is easy to find, it can become quite tedious for height and weight, so we added comments to the listings in order help out were they should fit. + +Edit [src/data/pokemon/pokedex_orders.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/pokedex_orders.h): + +```diff + const u16 gPokedexOrder_Alphabetical[] = + { + ... + NATIONAL_DEX_MEW, ++ NATIONAL_DEX_MEWTHREE, + NATIONAL_DEX_MEWTWO, + ... + }; + + const u16 gPokedexOrder_Weight[] = + { + ... + // 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_MEWTHREE, + //NATIONAL_DEX_PERSIAN_ALOLAN, + NATIONAL_DEX_TOEDSCOOL, + // 73.4 lbs / 33.3 kg + NATIONAL_DEX_DUGTRIO, + ... + }; + + const u16 gPokedexOrder_Height[] = + { + ... + // 4'11" / 1.5m + ... + NATIONAL_DEX_GLIMMORA, + NATIONAL_DEX_WO_CHIEN, + NATIONAL_DEX_IRON_LEAVES, + NATIONAL_DEX_IRON_BOULDER, ++ NATIONAL_DEX_MEWTHREE, + // 5'03" / 1.6m + ... + }; +``` +![mGBA_lUBfmFEKUx](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/3a8b8a17-759b-486b-9831-deb2f494bd71) + + +# The Graphics +We will start by copying the following files for *Mew* (not Mewtwo) and rename it to `mewthree`. +```sh +cp -r graphics/pokemon/mew/. graphics/pokemon/mewthree +``` +We aren't copying Mewtwo's folder because he has those pesky Mega Evolutions that will get in the way of what we're doing, so our sample will need to be pure from the source. + +## 1. Edit the sprites +Let's edit the sprites. Start your favourite image editor (I recommend Aseprite or its free alternative, Libresprite) and change `anim_front.png` and `back.png` to meet your expectations. + +__Make sure that you are using the indexed mode and you have limited yourself to 15 colors!__ + +Put the RGB values of your colors into `normal.pal` between the first and the last color and the RGB values for the shiny version into `shiny.pal`. +Edit `footprint.png` using two colors in indexed mode, black and white. +Finally, edit `icon.png`. Notice, that the icon will use one of 6 predefined palettes instead of `normal.pal`. + +## 2. Add the sprites to the rom +Sadly, just putting the image files into the graphics folder is not enough. To use the sprites we have to register them, which is kind of tedious. +First, create constants for the file paths. You'll want to add the constants for your species after the constants for the last valid species. + +Edit [src/data/graphics/pokemon.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/pokemon.h): + +```diff +#if P_FAMILY_PECHARUNT + // const u32 gMonFrontPic_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/front.4bpp.lz"); + // const u32 gMonPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/normal.gbapal.lz"); + // const u32 gMonBackPic_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/back.4bpp.lz"); + // const u32 gMonShinyPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/shiny.gbapal.lz"); + // const u8 gMonIcon_Pecharunt[] = INCBIN_U8("graphics/pokemon/pecharunt/icon.4bpp"); +#if P_FOOTPRINTS + // const u8 gMonFootprint_Pecharunt[] = INCBIN_U8("graphics/pokemon/pecharunt/footprint.1bpp"); +#endif //P_FOOTPRINTS +#endif //P_FAMILY_PECHARUNT + ++ const u32 gMonFrontPic_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/anim_front.4bpp.lz"); ++ const u32 gMonBackPic_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/back.4bpp.lz"); ++ const u32 gMonPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/normal.gbapal.lz"); ++ const u32 gMonShinyPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/shiny.gbapal.lz"); ++ const u8 gMonIcon_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/icon.4bpp"); ++ const u8 gMonFootprint_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/footprint.1bpp"); +``` + +Please note that Pecharunt, the Pokémon that should be above your insertion for the time being, reads a `front.png` sprite instead of an `anim_front.png` sprite. This is because currently, Pecharunt lacks a 2nd frame. If the front sprite sheet of your species uses 2 frames, you should use `anim_front`. + +It is also worth to mention that Pecharunt's sprites are commented out simply because they're currently missing. + +## 3. Add the animations to the rom + +You can define the animation order, in which the sprites will be shown. The first number is the sprite index (so 0 or 1) and the second number is the number of frames the sprite will be visible. + +Edit [src/data/pokemon_graphics/front_pic_anims.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/front_pic_anims.h): + +```diff +#if P_FAMILY_PECHARUNT +PLACEHOLDER_ANIM_SINGLE_FRAME(Pecharunt); +#endif //P_FAMILY_PECHARUNT + ++static const union AnimCmd sAnim_Mewthree_1[] = ++{ ++ ANIMCMD_FRAME(1, 30), ++ ANIMCMD_FRAME(0, 20), ++ ANIMCMD_END, ++}; +``` + +```diff +#if P_FAMILY_PECHARUNT +SINGLE_ANIMATION(Pecharunt); +#endif //P_FAMILY_PECHARUNT ++SINGLE_ANIMATION(Mewthree); +SINGLE_ANIMATION(Egg); +``` + +You might be wondering what `PLACEHOLDER_ANIM_SINGLE_FRAME` is. Well, since Pecharun only has 1 frame, we use what's called a preprocessor *macro* to have in a single line what otherwise would've been this in the C file: +```c +static const union AnimCmd sAnim_Pecharunt_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +} +``` +Instead, we can use the already established macro that does the same thing, replacing the value in parenthesis with what we want (in this case, `Pecharunt`): +```c +#define PLACEHOLDER_ANIM_SINGLE_FRAME(name) \ +static const union AnimCmd sAnim_##name##_1[] = \ +{ \ + ANIMCMD_FRAME(0, 1), \ + ANIMCMD_END, \ +} +``` + +## 4. Linking graphic information to our Pokémon +Now that we have all the external data ready, we just need to add it to `gSpeciesInfo` plus the rest of the animation and graphical data that we want to use: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 2, ++ .frontPic = gMonFrontPic_Mewthree, ++ .frontPicSize = MON_COORDS_SIZE(64, 64), ++ .frontPicYOffset = 0, ++ .frontAnimFrames = sAnims_Mewthree, ++ .frontAnimId = ANIM_GROW_VIBRATE, ++ .frontAnimDelay = 15, ++ .enemyMonElevation = 6, ++ .backPic = gMonBackPic_Mewthree, ++ .backPicSize = MON_COORDS_SIZE(64, 64), ++ .backPicYOffset = 0, ++ .backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL, ++ .palette = gMonPalette_Mewthree, ++ .shinyPalette = gMonShinyPalette_Mewthree, + .iconSprite = gMonIcon_Mewthree, + .iconPalIndex = 2, ++ FOOTPRINT(Mewthree) + }, + }; +``` +Let's explain each of these: +- `frontPic`: + - Used to reference the front sprite, so in this case, we call for `gMonFrontPic_Mewthree`. +- `frontPicSize`: + - The two values (`width` and `height`) are used for defining the non-empty size of the front sprite, which is used in move animations. If you're unsure of the values, you can leave them both as 64. +- `frontPicYOffset`: + - Used to define what Y position the sprite sits at. This is used to set where they'd be "grounded". For the shadow, see `enemyMonElevation`. +- `frontAnimFrames`: + - We link our animation frame animations that we defined earlier here. +- `frontAnimId`: + - Because you are limited to two frames, there are already [predefined front sprite animations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/pokemon_animation.h), describing translations, rotations, scalings or color changes. +- `frontAnimDelay`: + - Sets a delay in frame count between when the Pokémon appears and when the animation starts. +- `enemyMonElevation`: + - Used to determine the altitude from the ground. Any value above 0 will show a shadow under the Pokémon, to signify that they're floating. +- `backPic`: + - Used to reference the back sprite, so in this case, we call for `gMonBackPic_Mewthree`. +- `backPicSize`: + - The two values (`width` and `height`) are used for defining the non-empty size of the back sprite, which is used in move animations. If you're unsure of the values, you can leave them both as 64. +- `backPicYOffset`: + - Used to define what Y position of the back sprite. When working with the animation debug menu, we recommend aligning the back sprite to the white background, as it was designed to properyly align with the real battle layout. +- `backAnimId`: + - Like `frontAnimId` except for the back sprites and them being a single frame. The IDs listed [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/pokemon_animation.h) are used to represent 3 different animations that happen based on the the Pokémon's nature. +- `palette`: + - Used to reference the non-shiny palette, so in this case, we call for `gMonPalette_Mewthree`. +- `shinyPalette`: + - Used to reference the shiny palette, so in this case, we call for `gMonShinyPalette_Mewthree`. +- `iconSprite`: + - Used to reference the icon sprite, so in this case, we call for `gMonIcon_Mewthree`. +- `iconPalIndex`: +- `ICON` + - Here, you can choose between the six icon palettes; 0, 1, 2, 3, 4 and 5. All of them located in `graphics/pokemon/icon_palettes`. + + Open an icon sprite and load one of the palettes to find out which palette suits your icon sprite best. +- `FOOTPRINT` + - We made this single field into a macro so that they can be ignored when `P_FOOTPRINTS` is set to false. It's also why we don't have an "," after calling it like the other macros (we add it as part of the macro itself). + ```c + #if P_FOOTPRINTS + #define FOOTPRINT(sprite) .footprint = gMonFootprint_## sprite, + #else + #define FOOTPRINT(sprite) + #endif + ``` + +# The Data - Part 2 + +We're almost there just a bit left! + +## 1. Species Flags + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_NONE }, + .bodyColor = BODY_COLOR_PURPLE, ++ .isLegendary = TRUE, ++ .allPerfectIVs = TRUE, + }, + }; +``` +Each species flag provides properties to the species: +- `isLegendary`: + - Guarantees 3 perfect IVs upon generating the Pokémon[*](########## "As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher"). +- `isMythical`: + - Guarantees 3 perfect IVs upon generating the Pokémon[*](########## "As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher"). + - Is skipped during Pokédex evaluations. + - Unless it also has the `dexForceRequired` flag. + - Cannot obtain Gigantamax factor via `ToggleGigantamaxFactor`. +- `isUltraBeast`: + - Guarantees 3 perfect IVs upon generating the Pokémon[*](########## "As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher"). + - Beast Ball's multiplier is set to x5 for this species. + - All other ball multipliers are set to x0.1. +- `isParadoxForm`: + - Currently has no functionality but can be utilized by users for their own benefits. +- `isMegaEvolution`: + - A Mega indicator is added to the battle box indicating that they're Mega Evolved. + - The species doesn't receive affection benefits. + - Required when adding new Mega Evolutions. +- `isPrimalReversion`: + - A Primal Reversion indicator (Alpha or Omega for Kyogre/Groudon respectively) is added to the battle box indicating that they're Primal Reverted. + - Required when adding new Primal Reversions. +- `isUltraBurst`: + - Required when adding new Ultra Burst forms. +- `isGigantamax`: + - Used to determine if Gigantamax forms should have their GMax moves or not. + - Required when adding new Gigantamax forms. +- `isAlolanForm`, `isGalarianForm`, `isHisuianForm`, `isPaldeanForm`: + - In the future, these will be used to determine breeding offspring from different based on their region. +- `cannotBeTraded`: + - This species cannot be traded away (like Black/White Kyurem). +- `allPerfectIVs`: + - Guarantees 6 perfect IVs upon generating the Pokémon (like LGPE's Partner Pikachu and Eevee). +- `tmIlliterate`: + - This species will be unable to learn the universal moves. + +*: As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher. + +## 2. Delimit the moveset + +Let's begin with the moves that can be learned by leveling up. + +Append to [src/data/pokemon/level_up_learnsets.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/level_up_learnsets.h): + +```diff +#if P_FAMILY_PECHARUNT +static const struct LevelUpMove sPecharuntLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SMOG), + LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), + LEVEL_UP_MOVE( 1, MOVE_MEMENTO), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 8, MOVE_WITHDRAW), + LEVEL_UP_MOVE(16, MOVE_DESTINY_BOND), + LEVEL_UP_MOVE(24, MOVE_FAKE_TEARS), + LEVEL_UP_MOVE(32, MOVE_PARTING_SHOT), + LEVEL_UP_MOVE(40, MOVE_SHADOW_BALL), + LEVEL_UP_MOVE(48, MOVE_MALIGNANT_CHAIN), + LEVEL_UP_MOVE(56, MOVE_TOXIC), + LEVEL_UP_MOVE(64, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(72, MOVE_RECOVER), + LEVEL_UP_END +}; +#endif + ++static const struct LevelUpMove sMewthreeLevelUpLearnset[] = { ++ LEVEL_UP_MOVE( 1, MOVE_CONFUSION), ++ LEVEL_UP_MOVE( 1, MOVE_DISABLE), ++ LEVEL_UP_MOVE(11, MOVE_BARRIER), ++ LEVEL_UP_MOVE(22, MOVE_SWIFT), ++ LEVEL_UP_MOVE(33, MOVE_PSYCH_UP), ++ LEVEL_UP_MOVE(44, MOVE_FUTURE_SIGHT), ++ LEVEL_UP_MOVE(55, MOVE_MIST), ++ LEVEL_UP_MOVE(66, MOVE_PSYCHIC), ++ LEVEL_UP_MOVE(77, MOVE_AMNESIA), ++ LEVEL_UP_MOVE(88, MOVE_RECOVER), ++ LEVEL_UP_MOVE(99, MOVE_SAFEGUARD), ++ LEVEL_UP_END ++}; +``` + +Again, we need to register the learnset in `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + PALETTES(Mewthree), + ICON(Mewthree, 2), + FOOTPRINT(Mewthree) ++ .levelUpLearnset = sMewthreeLevelUpLearnset, + }, + }; +``` + +Next we need to specify which moves can be taught via TM, HM, or Move Tutor. + +Append to [src/data/pokemon/teachable_learnsets.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/teachable_learnsets.h): + +```diff +#if P_FAMILY_PECHARUNT +static const u16 sPecharuntTeachableLearnset[] = { + ... + MOVE_UNAVAILABLE, +}; +#endif //P_FAMILY_PECHARUNT + ++static const u16 sMewthreeTeachableLearnset[] = { ++ MOVE_FOCUS_PUNCH, ++ MOVE_WATER_PULSE, ++ MOVE_CALM_MIND, ++ MOVE_TOXIC, ++ MOVE_HAIL, ++ MOVE_BULK_UP, ++ MOVE_HIDDEN_POWER, ++ MOVE_SUNNY_DAY, ++ MOVE_TAUNT, ++ MOVE_ICE_BEAM, ++ MOVE_BLIZZARD, ++ MOVE_HYPER_BEAM, ++ MOVE_LIGHT_SCREEN, ++ MOVE_PROTECT, ++ MOVE_RAIN_DANCE, ++ MOVE_SAFEGUARD, ++ MOVE_FRUSTRATION, ++ MOVE_SOLAR_BEAM, ++ MOVE_IRON_TAIL, ++ MOVE_THUNDERBOLT, ++ MOVE_THUNDER, ++ MOVE_EARTHQUAKE, ++ MOVE_RETURN, ++ MOVE_PSYCHIC, ++ MOVE_SHADOW_BALL, ++ MOVE_BRICK_BREAK, ++ MOVE_DOUBLE_TEAM, ++ MOVE_REFLECT, ++ MOVE_SHOCK_WAVE, ++ MOVE_FLAMETHROWER, ++ MOVE_SANDSTORM, ++ MOVE_FIRE_BLAST, ++ MOVE_ROCK_TOMB, ++ MOVE_AERIAL_ACE, ++ MOVE_TORMENT, ++ MOVE_FACADE, ++ MOVE_SECRET_POWER, ++ MOVE_REST, ++ MOVE_SKILL_SWAP, ++ MOVE_SNATCH, ++ MOVE_STRENGTH, ++ MOVE_FLASH, ++ MOVE_ROCK_SMASH, ++ MOVE_MEGA_PUNCH, ++ MOVE_MEGA_KICK, ++ MOVE_BODY_SLAM, ++ MOVE_DOUBLE_EDGE, ++ MOVE_COUNTER, ++ MOVE_SEISMIC_TOSS, ++ MOVE_MIMIC, ++ MOVE_METRONOME, ++ MOVE_DREAM_EATER, ++ MOVE_THUNDER_WAVE, ++ MOVE_SUBSTITUTE, ++ MOVE_DYNAMIC_PUNCH, ++ MOVE_PSYCH_UP, ++ MOVE_SNORE, ++ MOVE_ICY_WIND, ++ MOVE_ENDURE, ++ MOVE_MUD_SLAP, ++ MOVE_ICE_PUNCH, ++ MOVE_SWAGGER, ++ MOVE_SLEEP_TALK, ++ MOVE_SWIFT, ++ MOVE_THUNDER_PUNCH, ++ MOVE_FIRE_PUNCH, ++ MOVE_UNAVAILABLE, // This is required to determine where the array ends. ++}; +#endif +``` + +Once more, we need to register the learnset in `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + FOOTPRINT(Mewthree) + .levelUpLearnset = sMewthreeLevelUpLearnset, ++ .teachableLearnset = sMewthreeTeachableLearnset, + }, + }; +``` + +If you want to create a Pokémon which can breed, you will need to edit [src/data/pokemon/egg_moves.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/egg_moves.h). + + +## 3. Define the Evolutions + +We want Mewthree to evolve from Mewtwo by reaching level 100. + +Edit `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTWO] = + { + ... + FOOTPRINT(Mewtwo) + .isLegendary = TRUE, + .levelUpLearnset = sMewtwoLevelUpLearnset, + .teachableLearnset = sMewtwoTeachableLearnset, + .formSpeciesIdTable = sMewtwoFormSpeciesIdTable, + .formChangeTable = sMewtwoFormChangeTable, ++ .evolutions = EVOLUTION({EVO_LEVEL, 100, SPECIES_MEWTHREE}), + }, + }; +``` + +## 4. Make it appear! +Now Mewthree really does slumber in the games code - but we won't know until we make him appear somewhere! The legend tells that Mewthree is hiding somewhere in Petalburg Woods... + +Edit [src/data/wild_encounters.json](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/wild_encounters.json): + +```diff + { + "map": "MAP_PETALBURG_WOODS", + "base_label": "gPetalburgWoods", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WURMPLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SHROOMISH" + }, + { +- "min_level": 6, +- "max_level": 6, +- "species": "SPECIES_POOCHYENA" ++ "min_level": 5, ++ "max_level": 5, ++ "species": "SPECIES_MEWTHREE" + }, + ... + } +``` + +Congratulations, you have created your own personal pocket monster! You may call yourself a mad scientist now. + +# Optional data + +Now that you now have all the essential pieces to create a base species, there are some aspects that you might want to know if you want to do other stuff with your custom Pokémon. + +## 1. Form tables +Found in `src/data/pokemon/form_species_tables.h`. + +These are introduced to have a reference of what forms correspond to what Species of Pokémon. For example, we have Pikachu's table: +```c +#if P_FAMILY_PIKACHU +static const u16 sPikachuFormSpeciesIdTable[] = { + SPECIES_PIKACHU, + SPECIES_PIKACHU_COSPLAY, + SPECIES_PIKACHU_ROCK_STAR, + SPECIES_PIKACHU_BELLE, + SPECIES_PIKACHU_POP_STAR, + SPECIES_PIKACHU_PH_D, + SPECIES_PIKACHU_LIBRE, + SPECIES_PIKACHU_ORIGINAL_CAP, + SPECIES_PIKACHU_HOENN_CAP, + SPECIES_PIKACHU_SINNOH_CAP, + SPECIES_PIKACHU_UNOVA_CAP, + SPECIES_PIKACHU_KALOS_CAP, + SPECIES_PIKACHU_ALOLA_CAP, + SPECIES_PIKACHU_PARTNER_CAP, + SPECIES_PIKACHU_WORLD_CAP, + FORM_SPECIES_END, +}; +#endif //P_FAMILY_PIKACHU +``` +We register the table each form entry in `gSpeciesInfo`. + +```diff + [SPECIES_PIKACHU] = + { + ... + .teachableLearnset = sPikachuTeachableLearnset, ++ .formSpeciesIdTable = sPikachuFormSpeciesIdTable, + .evolutions = EVOLUTION({EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_RAICHU}, + {EVO_NONE, 0, SPECIES_RAICHU_ALOLAN}), + }, + + [SPECIES_PIKACHU_COSPLAY] = + { + ... + .teachableLearnset = sPikachuTeachableLearnset, ++ .formSpeciesIdTable = sPikachuFormSpeciesIdTable, + }, +``` +...and so on. + +What this allows us to do is to be able to get all forms of a Pokémon in our code by using the `GetSpeciesFormTable` function. + +For example, in the HGSS dex, it lets us browse between the entries of every form available.: + +![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/a1a90b79-46a1-4cd6-97d6-ec5d741bfdc8) ![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/7cffc6be-0b5c-4074-b689-736a97297843) + +In addition, we have the `GET_BASE_SPECIES_ID` macro, which returns the first entry of the table (or return the species itself if it doesn't have a table registered). With this, you can check if a Pokémon is any form of a species. For example, making it so that the Light Ball affects all Pikachu forms: +```c + case HOLD_EFFECT_LIGHT_BALL: + if (GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species) == SPECIES_PIKACHU && IS_MOVE_SPECIAL(move)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); + break; +``` + +## 2. Form change tables +Found in `src/data/pokemon/form_species_tables.h`. + +These tables, unlike the regular form tables, registers how Pokémon can switch between forms. + +```c +#if P_FAMILY_GASTLY +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}, +}; +#endif //P_FAMILY_GASTLY +``` +The first value is the type of form change. In the case of Gengar, we have both Mega Evolution and Gigantamax form changes. + +The second value is the target form, to which the Pokémon will change into. + +Values after that are referred as arguments, and needs to be put there depends on the type of form change, detailed in `include/constants/form_change_types.h`. + +## 3. Gender differences +![mGBA_Wq5cbDkNZG](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/45256192-b451-4baa-af06-f57ca16e1e46) + +You may have seen that there's a couple of duplicate fields with a "Female" suffix. +```diff + [SPECIES_FRILLISH] = + { + ... + .frontPic = gMonFrontPic_Frillish, ++ .frontPicFemale = gMonFrontPic_FrillishF, + .frontPicSize = MON_COORDS_SIZE(56, 56), ++ .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), + .frontPicYOffset = 5, + .frontAnimFrames = sAnims_Frillish, + .frontAnimId = ANIM_RISING_WOBBLE, + .backPic = gMonBackPic_Frillish, ++ .backPicFemale = gMonBackPic_FrillishF, + .backPicSize = MON_COORDS_SIZE(40, 56), ++ .backPicSizeFemale = MON_COORDS_SIZE(40, 56), + .backPicYOffset = 7, + .backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC, + .palette = gMonPalette_Frillish, ++ .paletteFemale = gMonPalette_FrillishF, + .shinyPalette = gMonShinyPalette_Frillish, ++ .shinyPaletteFemale = gMonShinyPalette_FrillishF, + .iconSprite = gMonIcon_Frillish, ++ .iconSpriteFemale = gMonIcon_FrillishF, + .iconPalIndex = 0, ++ .iconPalIndexFemale = 1, + FOOTPRINT(Frillish) + .levelUpLearnset = sFrillishLevelUpLearnset, + .teachableLearnset = sFrillishTeachableLearnset, + .evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_JELLICENT}), + }, +``` +These are used to change the graphics of the Pokémon if they're female. If they're not registered, they default to the male values. + +However, `iconPalIndexFemale` is a special case, where it's *doesn't* read the male icon palette if its `iconSpriteFemale` is set, so if you're setting a female icon, be sure to set their palette index as well. diff --git a/docs/how_to_new_pokemon_1_9_0.md b/docs/how_to_new_pokemon_1_9_0.md new file mode 100644 index 0000000000..e64f8e6e66 --- /dev/null +++ b/docs/how_to_new_pokemon_1_9_0.md @@ -0,0 +1,1139 @@ + +This is a modified version of [the original tutorial about adding new Pokémon species available in Pokeemerald's wiki](https://github.com/pret/pokeemerald/wiki/How-to-add-a-new-Pokémon-species). + +Despite the persistent rumors about an incredibly strong third form of Mew hiding somewhere, it actually wasn't possible to catch it... OR WAS IT? +In this tutorial, we will add a new Pokémon species to the game. + +## IMPORTANT: This tutorial applies to 1.9.x versions. +- [Version 1.8.x](how_to_new_pokemon_1_8_0.md) +- [Version 1.7.x](how_to_new_pokemon_1_7_0.md) +- [Version 1.6.x](how_to_new_pokemon_1_6_0.md) + +# Changes compared to vanilla +The main things that the Expansion changes are listed here. +* Still Front Pics *(`gMonStillFrontPic_YourPokemon`)* and by extension `src/anim_mon_front_pics.c` have been removed. +* `src/data/pokemon/cry_ids.h` doesn't exist anymore. +* You have 6 icon palettes available instead of the base 3. +* Most tables that use `SPECIES_x` as indexes have been moved to `gSpeciesInfo`. + +# Content +* [Useful resources](#useful-resources) +* [The Data - Part 1](#the-data---part-1) + * [1. Declare a species constant](#1-Declare-a-species-constant) + * [2. `SpeciesInfo`'s structure](#2-speciesinfos-structure) + * [3. Define its basic species information](#3-define-its-basic-species-information) + * [4. Species Name](#4-species-name) + * [5. Define its cry](#5-define-its-cry) + * [6. Define its Pokédex entry](#6-define-its-pokédex-entry) +* [The Graphics](#the-graphics) + * [1. Edit the sprites](#1-edit-the-sprites) + * [2. Add the sprites to the rom](#2-add-the-sprites-to-the-rom) + * [3. Add the animations to the rom](#3-add-the-animations-to-the-rom) + * [4. Linking graphic information to our Pokémon](#4-linking-graphic-information-to-our-pokémon) +* [The Data - Part 2](#the-data---part-2) + * [1. Species Flags](#1-species-flags) + * [2. Delimit the moveset](#2-delimit-the-moveset) + * [3. Define the Evolutions](#3-define-the-evolutions) + * [4. Make it appear!](#4-make-it-appear) +* [Optional data](#optional-data) + * [1. Form tables](#1-form-tables) + * [2. Form change tables](#2-form-change-tables) + * [3. Gender differences](#3-gender-differences) + * [4. Overworld Data](#4-overworld-data) + +# Useful resources +You can open a sprite debug menu by pressing `Select` in a Pokémon's summary screen outside of battle. + +![mGBA_6WOo1TSlsn](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/0c625cd8-8f89-4bc8-a285-b10a420a8f6d) + + +# The Data - Part 1 + +Our plan is as simple as it is brilliant: clone Mewtwo... and make it even stronger! + +## 1. Declare a species constant + +Our first step towards creating a new digital lifeform is to define its own species constant. + +Edit [include/constants/species.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/species.h): + +```diff + #define SPECIES_NONE 0 + #define SPECIES_BULBASAUR 1 + ... + #define SPECIES_EEVEE_PARTNER PLACEHOLDER_START + 54 ++#define SPECIES_MEWTHREE PLACEHOLDER_START + 55 + +-#define GIGANTAMAX_START SPECIES_EEVEE_PARTNER ++#define GIGANTAMAX_START SPECIES_MEWTHREE + + // Gigantamax Forms + #define SPECIES_VENUSAUR_GIGANTAMAX GIGANTAMAX_START + 1 +``` +This number is stored in a Pokémon's save structure. These should generally never change, otherwise your saved Pokémon species will change as well. + +We add this before Gigantamax forms because they're temporary forms that shouldn't normally be saved into a Pokémon's save structure. + +Now, let's see how it looks in-game! + +![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/dc15b0ba-a4bd-4f4e-9658-2dff73a11f79) + +Hmmm, something's not right... + +Oh, I know! We need to add the rest of the data! Normally, the vanilla game would crash if we try to look up anything about Mewthree in this state, but the expansion defaults all of its data to `SPECIES_NONE`. + +Now, let's see what needs to be done. + +## 2. `SpeciesInfo`'s structure +Now, to better understand Mewtwo, we also need to understand Mew. Let's look at its data. +```diff + [SPECIES_MEW] = + { + .baseHP = 100, + .baseAttack = 100, + .baseDefense = 100, + .baseSpeed = 100, + .baseSpAttack = 100, + .baseSpDefense = 100, + .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, + .catchRate = 45, + #if P_UPDATED_EXP_YIELDS >= GEN_8 + .expYield = 300, + #elif P_UPDATED_EXP_YIELDS >= GEN_5 + .expYield = 270, + #else + .expYield = 64, + #endif + .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_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, + .abilities = { ABILITY_SYNCHRONIZE, ABILITY_NONE }, + .bodyColor = BODY_COLOR_PINK, + .isMythical = TRUE, + .speciesName = _("Mew"), + .cryId = CRY_MEW, + .natDexNum = NATIONAL_DEX_MEW, + .categoryName = _("New Species"), + .height = 4, + .weight = 40, + .description = COMPOUND_STRING( + "A Mew is said to possess the genes of all\n" + "Pokémon. It is capable of making itself\n" + "invisible at will, so it entirely avoids\n" + "notice even if it approaches people."), + .pokemonScale = 457, + .pokemonOffset = -2, + .trainerScale = 256, + .trainerOffset = 0, + .frontPic = gMonFrontPic_Mew, + .frontPicSize = MON_COORDS_SIZE(64, 48), + .frontPicYOffset = 9, + .frontAnimFrames = sAnims_Mew, + .frontAnimId = ANIM_ZIGZAG_SLOW, + .enemyMonElevation = 11, + .backPic = gMonBackPic_Mew, + .backPicSize = MON_COORDS_SIZE(64, 64), + .backPicYOffset = 0, + .backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL, + .palette = gMonPalette_Mew, + .shinyPalette = gMonShinyPalette_Mew, + .iconSprite = gMonIcon_Mew, + .iconPalIndex = 0, + FOOTPRINT(Mew) + .levelUpLearnset = sMewLevelUpLearnset, + .teachableLearnset = sMewTeachableLearnset, + }, +``` + +That's a lot of stuff! But don't worry, we'll go through it step by step throught the tutorial +(and miles better than having this same data through 20+ files like it used to be). + +We'll start by adding the self-explanatory data that's also present in pret's vanilla structure: + +## 3. Define its basic species information +Edit [src/data/pokemon/species_info.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/species_info.h): +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + [SPECIES_NONE] = {0}, + ... + + [SPECIES_EGG] = + { + FRONT_PIC(Egg, 24, 24), + .frontPicYOffset = 20, + .backPic = gMonFrontPic_Egg, + .backPicSize = MON_COORDS_SIZE(24, 24), + .backPicYOffset = 20, + .palette = gMonPalette_Egg, + .shinyPalette = gMonPalette_Egg, + ICON(Egg, 1), + }, + ++ [SPECIES_MEWTHREE] = ++ { ++ .baseHP = 106, ++ .baseAttack = 150, ++ .baseDefense = 70, ++ .baseSpeed = 140, ++ .baseSpAttack = 194, ++ .baseSpDefense = 120, ++ .types = { TYPE_PSYCHIC, TYPE_PSYCHIC }, ++ .catchRate = 3, ++ .expYield = 255, ++ .evYield_SpAttack = 3, ++ .genderRatio = MON_GENDERLESS, ++ .eggCycles = 120, ++ .friendship = 0, ++ .growthRate = GROWTH_SLOW, ++ .eggGroups = { EGG_GROUP_NO_EGGS_DISCOVERED, EGG_GROUP_NO_EGGS_DISCOVERED }, ++ .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_NONE }, ++ .bodyColor = BODY_COLOR_PURPLE, ++ }, + }; +``` + +The `.` is the structure reference operator in C to refer to the member object of the structure SpeciesInfo. + +- `baseHP`, `baseAttack`, `baseDefense`, `baseSpeed`, `baseSpAttack` and `baseSpDefense` are the base stats. They can't go higher than 255. +- You may be confused as to why `types` has `TYPE_PSYCHIC` twice. This is because the way the game determines single-type mon is to define both types the same. + - If we don't, it defaults to Normal due to it being the first type defined. +- `catchRate` is how likely it is to catch a Pokémon, the lower the value, the harder it is to catch. Legendaries generally have a catch rate of 3, so we put that here. +- `expYield` is the base amount of experience that a Pokémon gives when defeated/caught. In vanilla, this value caps at 255, but we've increased it to a maximum of 65535 accomodate later gen's higher experience yields. (The highest official value is Blissey's with 608, so going beyond this point may cause exponential gains that could break the system 😱) + - If you noticed, Mew's had some `#if`s, `#elif`s and `#endif` around it. This is because its yield has changed over time, and we let you choose which ones you want. This is not relevant to our Mewthree however, so we can just put a single `.expYield = 255,` line here. +- `evYield_HP`, `evYield_Attack`, `evYield_Defense`, `evYield_Speed`, `evYield_SpAttack` and `evYield_SpDefense` are how many EVs does the Pokémon give when they're caught. Each of these fields can have a value of 3 at most. Officially, no Pokémon give out more than 3 EVs total, with them being determined by their evolution stage (eg, Pichu, Pikachu and Raichu give 1, 2 and 3 Speed EVs respectively), and they tend to be associated with its higher stats. Since our Mewthree is a Special Attack monster, we'll be consistent and make it give out 3 Special Attack EVs, but you're always free to assign whatever you feel like :) + - Notice that the other `evYield` fields are not there. In C, numbers in a struct default to 0, so if we don't specify them, they'll be 0 all around! Less lines to worry about :D +- `itemCommon` and `itemRare` are used to determine what items is the Pokémon holding when encountering it in the wild. + - 50% for `itemCommon` and 5% for `itemRare` (boosted to 60%/20% when the first mon in the party has Compound Grass or Super Luck) + - If they're both set as the same item, the item has a 100% chance of appearing. +- `genderRatio` is a fun one. + - There are 4 ways of handling this + - `PERCENT_FEMALE` is what most Pokémon use, where you define how likely it's gonna be female. It supports decimals, so you can put `PERCENT_FEMALE(12.5)` to have a 1 in 8 chance of your mon to be female. + - `MON_MALE` guarantees that all mon of this species will be male (eg. Tauros) + - `MON_FEMALE` guarantees that all mon of this species will be female (eg. Miltank) + - `MON_GENDERLESS` makes your species genderless, unable to breed with anything but Ditto to produce eggs. Most Legendaries are this, so we'll be chosing this as Mewthree's gender ratio. + - When working with evolution lines and don't want their genders to change after evolving, be sure that their gender ratios match their stages and evolution methods. Azurill is the only case where there's a mismatch, causing 1/3 of all Azurill to change from Female to Male. + - You might be wondering why some species have multiple defines for their genders, like `SPECIES_MEOWSTIC_(FE)MALE`. This is because those species have different stats and data from each other, so they're defined internally as different forms with `MON_MALE` and `MON_FEMALE` as gender ratios. If your species evolves depending on its gender and the evolutions have different stats, be sure to apply the correct evolution method! +- `eggCycles` determines how fast an egg of this species will hatch. Doesn't matter much for evolved species or those that can't lay eggs, but we add the field here just in case. +- `friendship` determines the amount of friendship of the mon when you catch it. Most Pokémon use `STANDARD_FRIENDSHIP`, but this creature of chaos does not want to be your friend, starting with 0. +- `growthRate` determines the amounts of experience required to reach each level. Go [here](https://bulbapedia.bulbagarden.net/wiki/Experience) for more info. +- `eggGroups` are used for breed compatibility. Most Legendaries and Mythicals have the `EGG_GROUP_NO_EGGS_DISCOVERED` group, and so does our Mewthree. Go [here](https://bulbapedia.bulbagarden.net/wiki/Egg_Group) for more info. +- `abilities` determines the potential abilites of our species. Notice how I also set the ability to `ABILITY_INSOMNIA`, so our little monster doesn't even need to sleep anymore. You can find the abilities for example here [include/constants/abilities.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/abilities.h). + - When both slot 1 and 2 are defined as not being `ABILITY_NONE`, their starting ability will be decided on a coin flip using their personality. They can later be changed using an Ability Capsule. + - Certain Pokémon such as Zygarde and Rockruff have different forms to add additional abilities. As such, they cannot be changed using an Ability Capsule (though the Zygarde Cube can change Zygarde's ability by changing them to their corresponding form) + - The 3rd slot is for Hidden Abilities. If defined as `ABILITY_NONE`, it will default to Slot 1 (eg. Metapod doesn't have a Hidden Ability, but Caterpie and Butterfree do). Go [here](https://bulbapedia.bulbagarden.net/wiki/Ability#Hidden_Abilities) and [here](https://bulbapedia.bulbagarden.net/wiki/Ability_Patch) for more info. + - If the array is defined as `{ABILITY_1, ABILITY_2}`, the Hidden Ability is set as `ABILITY_NONE`. +- `bodyColor` is used in the Pokédex as a search filter. +- `noFlip` is used in to prevent front sprites from being flipped horizontally and cause weird issues, like Clawitzer's big claw changing sides. + +That's all the basic fields present in vanilla emerald, so now let's take a look at the new fields added by the expansion. + +## 4. Species Name + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .isLegendary = TRUE, + .allPerfectIVs = TRUE, ++ .speciesName = _("Mewthree"), + }, + }; +``` +The `_()` underscore function doesn't really exist - it's a convention borrowed from GNU gettext to let `preproc` know this is text to be converted to the custom encoding used by the Gen 3 Pokemon games. + +## 5. Define its cry + +Time for audio! +We first need to convert an existing audio file to the format supported by the expansion. + +Most formats are supported for conversion, but for simplicity's sake, we're gonna use an mp3 file. + +Now, let's copy the file to the `sound/direct_sound_samples/cries` folder. +Once that's done, let's run the following command: +``` +ffmpeg -i sound/direct_sound_samples/cries/mewthree.mp3 -c:a pcm_s8 -ac 1 -ar 13379 sound/direct_sound_samples/cries/mewthree.aif +``` +This will convert your audio file to .aif, which is what's read by the compiler. + +Let's add the cry to the ROM via [sound/direct_sound_data.inc](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/sound/direct_sound_data.inc). + +```diff +.if P_FAMILY_PECHARUNT == TRUE + .align 2 +Cry_Pecharunt:: + .incbin "sound/direct_sound_samples/cries/pecharunt.bin" +.endif @ P_FAMILY_PECHARUNT + ++ .align 2 ++Cry_Mewthree:: ++ .incbin "sound/direct_sound_samples/cries/mewthree.bin" + +``` + +Then we add the cry ID to [include/constants/cries.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/cries.h): + +```diff +enum { + CRY_NONE, + ... +#if P_FAMILY_TERAPAGOS + CRY_TERAPAGOS, +#endif //P_FAMILY_TERAPAGOS +#if P_FAMILY_PECHARUNT + CRY_PECHARUNT, +#endif //P_FAMILY_PECHARUNT ++ CRY_MEWTHREE, + CRY_COUNT, +}; +``` + +And then link it in [sound/cry_tables.inc](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/sound/cry_tables.inc). `cry_reverse` in particular is for reversed cries used by moves such as Growl. The order of these two tables should match the order of the cry IDs, otherwise they'll be shifted. + +```diff + cry Cry_Terapagos + cry Cry_Pecharunt ++ cry Cry_Mewthree +``` +```diff + cry_reverse Cry_Terapagos + cry_reverse Cry_Pecharunt ++ cry_reverse Cry_Mewthree +``` + +Lastly, we add the cry to our species entry +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .isLegendary = TRUE, + .allPerfectIVs = TRUE, + .speciesName = _("Mewthree"), ++ .cryId = CRY_MEWTHREE, + }, + }; +``` + +And let's see how it sounds in-game: + +https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/4f7667db-4db9-4bfd-a8dd-ece26f09f327 + +Good! Our monster now has a mighty roar! + +You can now delete the mp3 from the cries folder now once you made sure that the cry sounds like how you want it to. + +## 6. Define its Pokédex entry + +First, we will need to add new index constants for its Pokédex entry. The index constants are divided into the Hoenn Pokédex, which contains all Pokémon native to the Hoenn region, and the National Pokédex containing all known Pokémon, which can be received after entering the hall of fame for the first time. + +Edit [include/constants/pokedex.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/pokedex.h): + +```diff +// National Pokedex order +enum { + NATIONAL_DEX_NONE, + // Kanto + NATIONAL_DEX_BULBASAUR, +... + NATIONAL_DEX_PECHARUNT, ++ NATIONAL_DEX_MEWTHREE, +}; +``` + +```diff + #define KANTO_DEX_COUNT NATIONAL_DEX_MEW + #define JOHTO_DEX_COUNT NATIONAL_DEX_CELEBI + +#if P_GEN_9_POKEMON == TRUE +- #define NATIONAL_DEX_COUNT NATIONAL_DEX_PECHARUNT ++ #define NATIONAL_DEX_COUNT NATIONAL_DEX_MEWTHREE +``` + +Do keep in mind that if you intend to add your new species to the Hoenn Dex, you'll also want to add a `HOENN_DEX` constant for it, like this: + +```diff +// Hoenn Pokedex order +enum { + HOENN_DEX_NONE, + HOENN_DEX_TREECKO, +... + HOENN_DEX_DEOXYS, ++ HOENN_DEX_MEWTHREE, +}; + +- #define HOENN_DEX_COUNT (HOENN_DEX_DEOXYS + 1) ++ #define HOENN_DEX_COUNT (HOENN_DEX_MEWTHREE + 1) +``` + +Edit [src/pokemon.c](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/pokemon.c): + +```diff + const u16 sHoennToNationalOrder[NUM_SPECIES] = // Assigns Hoenn Dex Pokémon (Using National Dex Index) + { + HOENN_TO_NATIONAL(TREECKO), + ... + HOENN_TO_NATIONAL(DEOXYS), ++ HOENN_TO_NATIONAL(MEWTHREE), + }; +``` + +Now we can add the number and entry to our Mewthree: +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .cryId = CRY_MEWTHREE, ++ .natDexNum = NATIONAL_DEX_MEWTHREE, ++ .categoryName = _("New Species"), ++ .height = 15, ++ .weight = 330, ++ .description = COMPOUND_STRING( ++ "The rumors became true.\n" ++ "This is Mew's final form.\n" ++ "Its power level is over 9000.\n" ++ "Has science gone too far?"), ++ .pokemonScale = 256, ++ .pokemonOffset = 0, ++ .trainerScale = 290, ++ .trainerOffset = 2, + }, + }; +``` +![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/3759dd4c-8da5-4b1c-9a50-b9e9d0815e7f) + +The values `pokemonScale`, `pokemonOffset`, `trainerScale` and `trainerOffset` are used for the height comparison figure in the Pokédex. + +`height` and `weight` are specified in decimeters and hectograms respectively (which are meters and kilograms multiplied by 10, so 2.5 meters are 25 decimeters). + +In Pokémon Emerald, you can sort the Pokédex by name, height or weight. Apparently, the Pokémon order is hardcoded in the game files and not calculated from their data. Therefore we have to include our new Pokémon species at the right places. While the correct position for the alphabetical order is easy to find, it can become quite tedious for height and weight, so we added comments to the listings in order help out were they should fit. + +Edit [src/data/pokemon/pokedex_orders.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/pokedex_orders.h): + +```diff + const u16 gPokedexOrder_Alphabetical[] = + { + ... + NATIONAL_DEX_MEW, ++ NATIONAL_DEX_MEWTHREE, + NATIONAL_DEX_MEWTWO, + ... + }; + + const u16 gPokedexOrder_Weight[] = + { + ... + // 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_MEWTHREE, + //NATIONAL_DEX_PERSIAN_ALOLAN, + NATIONAL_DEX_TOEDSCOOL, + // 73.4 lbs / 33.3 kg + NATIONAL_DEX_DUGTRIO, + ... + }; + + const u16 gPokedexOrder_Height[] = + { + ... + // 4'11" / 1.5m + ... + NATIONAL_DEX_GLIMMORA, + NATIONAL_DEX_WO_CHIEN, + NATIONAL_DEX_IRON_LEAVES, + NATIONAL_DEX_IRON_BOULDER, ++ NATIONAL_DEX_MEWTHREE, + // 5'03" / 1.6m + ... + }; +``` +![mGBA_lUBfmFEKUx](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/3a8b8a17-759b-486b-9831-deb2f494bd71) + + +# The Graphics +We will start by copying the following files for *Mew* (not Mewtwo) and rename it to `mewthree`. +```sh +cp -r graphics/pokemon/mew/. graphics/pokemon/mewthree +``` +We aren't copying Mewtwo's folder because he has those pesky Mega Evolutions that will get in the way of what we're doing, so our sample will need to be pure from the source. + +## 1. Edit the sprites +Let's edit the sprites. Start your favourite image editor (I recommend Aseprite or its free alternative, Libresprite) and change `anim_front.png` and `back.png` to meet your expectations. + +__Make sure that you are using the indexed mode and you have limited yourself to 15 colors!__ + +Put the RGB values of your colors into `normal.pal` between the first and the last color and the RGB values for the shiny version into `shiny.pal`. +Edit `footprint.png` using two colors in indexed mode, black and white. +Finally, edit `icon.png`. Notice, that the icon will use one of 6 predefined palettes instead of `normal.pal`. + +## 2. Add the sprites to the rom +Sadly, just putting the image files into the graphics folder is not enough. To use the sprites we have to register them, which is kind of tedious. +First, create constants for the file paths. You'll want to add the constants for your species after the constants for the last valid species. + +Edit [src/data/graphics/pokemon.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/pokemon.h): + +```diff +#if P_FAMILY_PECHARUNT + // const u32 gMonFrontPic_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/front.4bpp.lz"); + // const u32 gMonPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/normal.gbapal.lz"); + // const u32 gMonBackPic_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/back.4bpp.lz"); + // const u32 gMonShinyPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/shiny.gbapal.lz"); + // const u8 gMonIcon_Pecharunt[] = INCBIN_U8("graphics/pokemon/pecharunt/icon.4bpp"); +#if P_FOOTPRINTS + // const u8 gMonFootprint_Pecharunt[] = INCBIN_U8("graphics/pokemon/pecharunt/footprint.1bpp"); +#endif //P_FOOTPRINTS +#endif //P_FAMILY_PECHARUNT + ++ const u32 gMonFrontPic_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/anim_front.4bpp.lz"); ++ const u32 gMonBackPic_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/back.4bpp.lz"); ++ const u32 gMonPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/normal.gbapal.lz"); ++ const u32 gMonShinyPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/shiny.gbapal.lz"); ++ const u8 gMonIcon_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/icon.4bpp"); ++ const u8 gMonFootprint_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/footprint.1bpp"); +``` + +Please note that Pecharunt, the Pokémon that should be above your insertion for the time being, reads a `front.png` sprite instead of an `anim_front.png` sprite. This is because currently, Pecharunt lacks a 2nd frame. If the front sprite sheet of your species uses 2 frames, you should use `anim_front`. + +It is also worth to mention that Pecharunt's sprites are commented out simply because they're currently missing. + +## 3. Add the animations to the rom + +You can define the animation order, in which the sprites will be shown. The first number is the sprite index (so 0 or 1) and the second number is the number of frames the sprite will be visible. + +Edit [src/data/pokemon_graphics/front_pic_anims.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon_graphics/front_pic_anims.h): + +```diff +#if P_FAMILY_PECHARUNT +PLACEHOLDER_ANIM_SINGLE_FRAME(Pecharunt); +#endif //P_FAMILY_PECHARUNT + ++static const union AnimCmd sAnim_Mewthree_1[] = ++{ ++ ANIMCMD_FRAME(1, 30), ++ ANIMCMD_FRAME(0, 20), ++ ANIMCMD_END, ++}; +``` + +```diff +#if P_FAMILY_PECHARUNT +SINGLE_ANIMATION(Pecharunt); +#endif //P_FAMILY_PECHARUNT ++SINGLE_ANIMATION(Mewthree); +SINGLE_ANIMATION(Egg); +``` + +You might be wondering what `PLACEHOLDER_ANIM_SINGLE_FRAME` is. Well, since Pecharun only has 1 frame, we use what's called a preprocessor *macro* to have in a single line what otherwise would've been this in the C file: +```c +static const union AnimCmd sAnim_Pecharunt_1[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +} +``` +Instead, we can use the already established macro that does the same thing, replacing the value in parenthesis with what we want (in this case, `Pecharunt`): +```c +#define PLACEHOLDER_ANIM_SINGLE_FRAME(name) \ +static const union AnimCmd sAnim_##name##_1[] = \ +{ \ + ANIMCMD_FRAME(0, 1), \ + ANIMCMD_END, \ +} +``` + +## 4. Linking graphic information to our Pokémon +Now that we have all the external data ready, we just need to add it to `gSpeciesInfo` plus the rest of the animation and graphical data that we want to use: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .pokemonScale = 256, + .pokemonOffset = 0, + .trainerScale = 290, + .trainerOffset = 2, ++ .frontPic = gMonFrontPic_Mewthree, ++ .frontPicSize = MON_COORDS_SIZE(64, 64), ++ .frontPicYOffset = 0, ++ .frontAnimFrames = sAnims_Mewthree, ++ .frontAnimId = ANIM_GROW_VIBRATE, ++ .frontAnimDelay = 15, ++ .enemyMonElevation = 6, ++ .backPic = gMonBackPic_Mewthree, ++ .backPicSize = MON_COORDS_SIZE(64, 64), ++ .backPicYOffset = 0, ++ .backAnimId = BACK_ANIM_CONCAVE_ARC_SMALL, ++ .palette = gMonPalette_Mewthree, ++ .shinyPalette = gMonShinyPalette_Mewthree, + .iconSprite = gMonIcon_Mewthree, + .iconPalIndex = 2, ++ FOOTPRINT(Mewthree) + }, + }; +``` +Let's explain each of these: +- `frontPic`: + - Used to reference the front sprite, so in this case, we call for `gMonFrontPic_Mewthree`. +- `frontPicSize`: + - The two values (`width` and `height`) are used for defining the non-empty size of the front sprite, which is used in move animations. If you're unsure of the values, you can leave them both as 64. +- `frontPicYOffset`: + - Used to define what Y position the sprite sits at. This is used to set where they'd be "grounded". For the shadow, see `enemyMonElevation`. +- `frontAnimFrames`: + - We link our animation frame animations that we defined earlier here. +- `frontAnimId`: + - Because you are limited to two frames, there are already [predefined front sprite animations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/pokemon_animation.h), describing translations, rotations, scalings or color changes. +- `frontAnimDelay`: + - Sets a delay in frame count between when the Pokémon appears and when the animation starts. +- `enemyMonElevation`: + - Used to determine the altitude from the ground. Any value above 0 will show a shadow under the Pokémon, to signify that they're floating. +- `backPic`: + - Used to reference the back sprite, so in this case, we call for `gMonBackPic_Mewthree`. +- `backPicSize`: + - The two values (`width` and `height`) are used for defining the non-empty size of the back sprite, which is used in move animations. If you're unsure of the values, you can leave them both as 64. +- `backPicYOffset`: + - Used to define what Y position of the back sprite. When working with the animation debug menu, we recommend aligning the back sprite to the white background, as it was designed to properyly align with the real battle layout. +- `backAnimId`: + - Like `frontAnimId` except for the back sprites and them being a single frame. The IDs listed [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/pokemon_animation.h) are used to represent 3 different animations that happen based on the the Pokémon's nature. +- `palette`: + - Used to reference the non-shiny palette, so in this case, we call for `gMonPalette_Mewthree`. +- `shinyPalette`: + - Used to reference the shiny palette, so in this case, we call for `gMonShinyPalette_Mewthree`. +- `iconSprite`: + - Used to reference the icon sprite, so in this case, we call for `gMonIcon_Mewthree`. +- `iconPalIndex`: +- `ICON` + - Here, you can choose between the six icon palettes; 0, 1, 2, 3, 4 and 5. All of them located in `graphics/pokemon/icon_palettes`. + + Open an icon sprite and load one of the palettes to find out which palette suits your icon sprite best. +- `FOOTPRINT` + - We made this single field into a macro so that they can be ignored when `P_FOOTPRINTS` is set to false. It's also why we don't have an "," after calling it like the other macros (we add it as part of the macro itself). + ```c + #if P_FOOTPRINTS + #define FOOTPRINT(sprite) .footprint = gMonFootprint_## sprite, + #else + #define FOOTPRINT(sprite) + #endif + ``` + +# The Data - Part 2 + +We're almost there just a bit left! + +## 1. Species Flags + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + .abilities = { ABILITY_INSOMNIA, ABILITY_NONE, ABILITY_NONE }, + .bodyColor = BODY_COLOR_PURPLE, ++ .isLegendary = TRUE, ++ .allPerfectIVs = TRUE, + }, + }; +``` +Each species flag provides properties to the species: +- `isLegendary`: + - Guarantees 3 perfect IVs upon generating the Pokémon (As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher). +- `isMythical`: + - Guarantees 3 perfect IVs upon generating the Pokémon (As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher). + - Is skipped during Pokédex evaluations. + - Unless it also has the `dexForceRequired` flag. + - Cannot obtain Gigantamax factor via `ToggleGigantamaxFactor`. +- `isUltraBeast`: + - Guarantees 3 perfect IVs upon generating the Pokémon (As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher). + - Beast Ball's multiplier is set to x5 for this species. + - All other ball multipliers are set to x0.1. +- `isParadox` (previously `isParadoxForm`): + - Currently has no functionality but can be utilized by users for their own benefits. +- `isTotem`: + - Guarantees 3 perfect IVs upon generating the Pokémon (As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher). +- `isMegaEvolution`: + - A Mega indicator is added to the battle box indicating that they're Mega Evolved. + - The species doesn't receive affection benefits. + - Required when adding new Mega Evolutions. +- `isPrimalReversion`: + - A Primal Reversion indicator (Alpha or Omega for Kyogre/Groudon respectively) is added to the battle box indicating that they're Primal Reverted. + - Required when adding new Primal Reversions. +- `isUltraBurst`: + - Required when adding new Ultra Burst forms. +- `isGigantamax`: + - Used to determine if Gigantamax forms should have their GMax moves or not. + - Required when adding new Gigantamax forms. +- `isAlolanForm`, `isGalarianForm`, `isHisuianForm`, `isPaldeanForm`: + - In the future, these will be used to determine breeding offspring from different based on their region. +- `cannotBeTraded`: + - This species cannot be traded away (like Black/White Kyurem). +- `allPerfectIVs`: + - Guarantees 6 perfect IVs upon generating the Pokémon (like LGPE's Partner Pikachu and Eevee). +- `tmIlliterate`: + - This species will be unable to learn the universal moves. +- `isFrontierBanned`: + - This species will be unable to enter Battle Frontier facilities. Replaces `gFrontierBannedSpecies`. + +*: As long as `P_LEGENDARY_PERFECT_IVS` is set to `GEN_6` or higher. + +## 2. Delimit the moveset + +Let's begin with the moves that can be learned by leveling up. + +Append to [src/data/pokemon/level_up_learnsets.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/level_up_learnsets.h): + +```diff +#if P_FAMILY_PECHARUNT +static const struct LevelUpMove sPecharuntLevelUpLearnset[] = { + LEVEL_UP_MOVE( 1, MOVE_SMOG), + LEVEL_UP_MOVE( 1, MOVE_POISON_GAS), + LEVEL_UP_MOVE( 1, MOVE_MEMENTO), + LEVEL_UP_MOVE( 1, MOVE_ASTONISH), + LEVEL_UP_MOVE( 8, MOVE_WITHDRAW), + LEVEL_UP_MOVE(16, MOVE_DESTINY_BOND), + LEVEL_UP_MOVE(24, MOVE_FAKE_TEARS), + LEVEL_UP_MOVE(32, MOVE_PARTING_SHOT), + LEVEL_UP_MOVE(40, MOVE_SHADOW_BALL), + LEVEL_UP_MOVE(48, MOVE_MALIGNANT_CHAIN), + LEVEL_UP_MOVE(56, MOVE_TOXIC), + LEVEL_UP_MOVE(64, MOVE_NASTY_PLOT), + LEVEL_UP_MOVE(72, MOVE_RECOVER), + LEVEL_UP_END +}; +#endif + ++static const struct LevelUpMove sMewthreeLevelUpLearnset[] = { ++ LEVEL_UP_MOVE( 1, MOVE_CONFUSION), ++ LEVEL_UP_MOVE( 1, MOVE_DISABLE), ++ LEVEL_UP_MOVE(11, MOVE_BARRIER), ++ LEVEL_UP_MOVE(22, MOVE_SWIFT), ++ LEVEL_UP_MOVE(33, MOVE_PSYCH_UP), ++ LEVEL_UP_MOVE(44, MOVE_FUTURE_SIGHT), ++ LEVEL_UP_MOVE(55, MOVE_MIST), ++ LEVEL_UP_MOVE(66, MOVE_PSYCHIC), ++ LEVEL_UP_MOVE(77, MOVE_AMNESIA), ++ LEVEL_UP_MOVE(88, MOVE_RECOVER), ++ LEVEL_UP_MOVE(99, MOVE_SAFEGUARD), ++ LEVEL_UP_END ++}; +``` + +Again, we need to register the learnset in `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + PALETTES(Mewthree), + ICON(Mewthree, 2), + FOOTPRINT(Mewthree) ++ .levelUpLearnset = sMewthreeLevelUpLearnset, + }, + }; +``` + +Next we need to specify which moves can be taught via TM, HM, or Move Tutor. + +Append to [src/data/pokemon/teachable_learnsets.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/teachable_learnsets.h): + +```diff +#if P_FAMILY_PECHARUNT +static const u16 sPecharuntTeachableLearnset[] = { + ... + MOVE_UNAVAILABLE, +}; +#endif //P_FAMILY_PECHARUNT + ++static const u16 sMewthreeTeachableLearnset[] = { ++ MOVE_FOCUS_PUNCH, ++ MOVE_WATER_PULSE, ++ MOVE_CALM_MIND, ++ MOVE_TOXIC, ++ MOVE_HAIL, ++ MOVE_BULK_UP, ++ MOVE_HIDDEN_POWER, ++ MOVE_SUNNY_DAY, ++ MOVE_TAUNT, ++ MOVE_ICE_BEAM, ++ MOVE_BLIZZARD, ++ MOVE_HYPER_BEAM, ++ MOVE_LIGHT_SCREEN, ++ MOVE_PROTECT, ++ MOVE_RAIN_DANCE, ++ MOVE_SAFEGUARD, ++ MOVE_FRUSTRATION, ++ MOVE_SOLAR_BEAM, ++ MOVE_IRON_TAIL, ++ MOVE_THUNDERBOLT, ++ MOVE_THUNDER, ++ MOVE_EARTHQUAKE, ++ MOVE_RETURN, ++ MOVE_PSYCHIC, ++ MOVE_SHADOW_BALL, ++ MOVE_BRICK_BREAK, ++ MOVE_DOUBLE_TEAM, ++ MOVE_REFLECT, ++ MOVE_SHOCK_WAVE, ++ MOVE_FLAMETHROWER, ++ MOVE_SANDSTORM, ++ MOVE_FIRE_BLAST, ++ MOVE_ROCK_TOMB, ++ MOVE_AERIAL_ACE, ++ MOVE_TORMENT, ++ MOVE_FACADE, ++ MOVE_SECRET_POWER, ++ MOVE_REST, ++ MOVE_SKILL_SWAP, ++ MOVE_SNATCH, ++ MOVE_STRENGTH, ++ MOVE_FLASH, ++ MOVE_ROCK_SMASH, ++ MOVE_MEGA_PUNCH, ++ MOVE_MEGA_KICK, ++ MOVE_BODY_SLAM, ++ MOVE_DOUBLE_EDGE, ++ MOVE_COUNTER, ++ MOVE_SEISMIC_TOSS, ++ MOVE_MIMIC, ++ MOVE_METRONOME, ++ MOVE_DREAM_EATER, ++ MOVE_THUNDER_WAVE, ++ MOVE_SUBSTITUTE, ++ MOVE_DYNAMIC_PUNCH, ++ MOVE_PSYCH_UP, ++ MOVE_SNORE, ++ MOVE_ICY_WIND, ++ MOVE_ENDURE, ++ MOVE_MUD_SLAP, ++ MOVE_ICE_PUNCH, ++ MOVE_SWAGGER, ++ MOVE_SLEEP_TALK, ++ MOVE_SWIFT, ++ MOVE_THUNDER_PUNCH, ++ MOVE_FIRE_PUNCH, ++ MOVE_UNAVAILABLE, // This is required to determine where the array ends. ++}; +#endif +``` + +Once more, we need to register the learnset in `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + FOOTPRINT(Mewthree) + .levelUpLearnset = sMewthreeLevelUpLearnset, ++ .teachableLearnset = sMewthreeTeachableLearnset, + }, + }; +``` + +If you want to create a Pokémon which can breed, you will need to edit [src/data/pokemon/egg_moves.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/pokemon/egg_moves.h). + + +## 3. Define the Evolutions + +We want Mewthree to evolve from Mewtwo by reaching level 100. + +Edit `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTWO] = + { + ... + FOOTPRINT(Mewtwo) + .isLegendary = TRUE, + .levelUpLearnset = sMewtwoLevelUpLearnset, + .teachableLearnset = sMewtwoTeachableLearnset, + .formSpeciesIdTable = sMewtwoFormSpeciesIdTable, + .formChangeTable = sMewtwoFormChangeTable, ++ .evolutions = EVOLUTION({EVO_LEVEL, 100, SPECIES_MEWTHREE}), + }, + }; +``` + +## 4. Make it appear! +Now Mewthree really does slumber in the games code - but we won't know until we make him appear somewhere! The legend tells that Mewthree is hiding somewhere in Petalburg Woods... + +Edit [src/data/wild_encounters.json](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/wild_encounters.json): + +```diff + { + "map": "MAP_PETALBURG_WOODS", + "base_label": "gPetalburgWoods", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WURMPLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SHROOMISH" + }, + { +- "min_level": 6, +- "max_level": 6, +- "species": "SPECIES_POOCHYENA" ++ "min_level": 5, ++ "max_level": 5, ++ "species": "SPECIES_MEWTHREE" + }, + ... + } +``` + +Congratulations, you have created your own personal pocket monster! You may call yourself a mad scientist now. + +# Optional data + +Now that you now have all the essential pieces to create a base species, there are some aspects that you might want to know if you want to do other stuff with your custom Pokémon. + +## 1. Form tables +Found in `src/data/pokemon/form_species_tables.h`. + +These are introduced to have a reference of what forms correspond to what Species of Pokémon. For example, we have Pikachu's table: +```c +#if P_FAMILY_PIKACHU +static const u16 sPikachuFormSpeciesIdTable[] = { + SPECIES_PIKACHU, + SPECIES_PIKACHU_COSPLAY, + SPECIES_PIKACHU_ROCK_STAR, + SPECIES_PIKACHU_BELLE, + SPECIES_PIKACHU_POP_STAR, + SPECIES_PIKACHU_PH_D, + SPECIES_PIKACHU_LIBRE, + SPECIES_PIKACHU_ORIGINAL_CAP, + SPECIES_PIKACHU_HOENN_CAP, + SPECIES_PIKACHU_SINNOH_CAP, + SPECIES_PIKACHU_UNOVA_CAP, + SPECIES_PIKACHU_KALOS_CAP, + SPECIES_PIKACHU_ALOLA_CAP, + SPECIES_PIKACHU_PARTNER_CAP, + SPECIES_PIKACHU_WORLD_CAP, + FORM_SPECIES_END, +}; +#endif //P_FAMILY_PIKACHU +``` +We register the table each form entry in `gSpeciesInfo`. + +```diff + [SPECIES_PIKACHU] = + { + ... + .teachableLearnset = sPikachuTeachableLearnset, ++ .formSpeciesIdTable = sPikachuFormSpeciesIdTable, + .evolutions = EVOLUTION({EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_RAICHU}, + {EVO_NONE, 0, SPECIES_RAICHU_ALOLAN}), + }, + + [SPECIES_PIKACHU_COSPLAY] = + { + ... + .teachableLearnset = sPikachuTeachableLearnset, ++ .formSpeciesIdTable = sPikachuFormSpeciesIdTable, + }, +``` +...and so on. + +What this allows us to do is to be able to get all forms of a Pokémon in our code by using the `GetSpeciesFormTable` function. + +For example, in the HGSS dex, it lets us browse between the entries of every form available.: + +![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/a1a90b79-46a1-4cd6-97d6-ec5d741bfdc8) ![image](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/7cffc6be-0b5c-4074-b689-736a97297843) + +In addition, we have the `GET_BASE_SPECIES_ID` macro, which returns the first entry of the table (or return the species itself if it doesn't have a table registered). With this, you can check if a Pokémon is any form of a species. For example, making it so that the Light Ball affects all Pikachu forms: +```c + case HOLD_EFFECT_LIGHT_BALL: + if (GET_BASE_SPECIES_ID(gBattleMons[battlerAtk].species) == SPECIES_PIKACHU && IS_MOVE_SPECIAL(move)) + modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); + break; +``` + +## 2. Form change tables +Found in `src/data/pokemon/form_species_tables.h`. + +These tables, unlike the regular form tables, registers how Pokémon can switch between forms. + +```c +#if P_FAMILY_GASTLY +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}, +}; +#endif //P_FAMILY_GASTLY +``` +The first value is the type of form change. In the case of Gengar, we have both Mega Evolution and Gigantamax form changes. + +The second value is the target form, to which the Pokémon will change into. + +Values after that are referred as arguments, and needs to be put there depends on the type of form change, detailed in `include/constants/form_change_types.h`. + +## 3. Gender differences +![mGBA_Wq5cbDkNZG](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/45256192-b451-4baa-af06-f57ca16e1e46) + +You may have seen that there's a couple of duplicate fields with a "Female" suffix. +```diff + [SPECIES_FRILLISH] = + { + ... + .frontPic = gMonFrontPic_Frillish, ++ .frontPicFemale = gMonFrontPic_FrillishF, + .frontPicSize = MON_COORDS_SIZE(56, 56), ++ .frontPicSizeFemale = MON_COORDS_SIZE(56, 56), + .frontPicYOffset = 5, + .frontAnimFrames = sAnims_Frillish, + .frontAnimId = ANIM_RISING_WOBBLE, + .backPic = gMonBackPic_Frillish, ++ .backPicFemale = gMonBackPic_FrillishF, + .backPicSize = MON_COORDS_SIZE(40, 56), ++ .backPicSizeFemale = MON_COORDS_SIZE(40, 56), + .backPicYOffset = 7, + .backAnimId = BACK_ANIM_CONVEX_DOUBLE_ARC, + .palette = gMonPalette_Frillish, ++ .paletteFemale = gMonPalette_FrillishF, + .shinyPalette = gMonShinyPalette_Frillish, ++ .shinyPaletteFemale = gMonShinyPalette_FrillishF, + .iconSprite = gMonIcon_Frillish, ++ .iconSpriteFemale = gMonIcon_FrillishF, + .iconPalIndex = 0, ++ .iconPalIndexFemale = 1, + FOOTPRINT(Frillish) + .levelUpLearnset = sFrillishLevelUpLearnset, + .teachableLearnset = sFrillishTeachableLearnset, + .evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_JELLICENT}), + }, +``` +These are used to change the graphics of the Pokémon if they're female. If they're not registered, they default to the male values. + +However, `iconPalIndexFemale` is a special case, where it's *doesn't* read the male icon palette if its `iconSpriteFemale` is set, so if you're setting a female icon, be sure to set their palette index as well. + +## 4. Overworld Data +![mGBA_4iqvhhSltK](https://github.com/rh-hideout/pokeemerald-expansion/assets/2904965/e59238dc-9779-4f26-a9e7-159a32caa3d9) + +If you have `OW_POKEMON_OBJECT_EVENTS` in your hack, you can add Overworld of your new species by following these steps: + +First, since you copied the contents from Mew's folder previously, you should also have copied its overworld sprites. Edit those to your liking, as we have done before, making sure to update the palettes + +Secondly, in [src/data/graphics/pokemon.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/pokemon.h), add the following: + +```diff + const u8 gMonIcon_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/icon.4bpp"); + const u8 gMonFootprint_Mewthree[] = INCBIN_U8("graphics/pokemon/mewthree/footprint.1bpp"); ++ const u32 gObjectEventPic_Mewthree[] = INCBIN_COMP("graphics/pokemon/mewthree/overworld.4bpp"); ++ const u32 gOverworldPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/overworld_normal.gbapal.lz"); ++ const u32 gShinyOverworldPalette_Mewthree[] = INCBIN_U32("graphics/pokemon/mewthree/overworld_shiny.gbapal.lz"); +``` + +Thirdly, in [spritesheet_rules.mk](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/spritesheet_rules.mk) + +```diff +$(POKEMONGFXDIR)/mewtwo/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + ++$(POKEMONGFXDIR)/mewthree/overworld.4bpp: %.4bpp: %.png ++ $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/mew/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 +``` + +Fourthly, in [src/data/object_events/object_event_pic_tables_followers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/object_events/object_event_pic_tables_followers.h): +```diff +#if P_FAMILY_PECHARUNT +/*static const struct SpriteFrameImage sPicTable_Pecharunt[] = { + overworld_ascending_frames(gObjectEventPic_Pecharunt, 4, 4), +};*/ +#endif //P_FAMILY_PECHARUNT + ++static const struct SpriteFrameImage sPicTable_Mewthree[] = { ++ overworld_ascending_frames(gObjectEventPic_Mewthree, 4, 4), ++}; +``` + +And finally, in `gSpeciesInfo`: + +```diff + const struct SpeciesInfo gSpeciesInfo[] = + { + ... + [SPECIES_MEWTHREE] = + { + ... + FOOTPRINT(Mewthree) ++ OVERWORLD( ++ sPicTable_Mewthree, ++ SIZE_32x32, ++ SHADOW_SIZE_M, ++ TRACKS_FOOT, ++ gOverworldPalette_Mewthree, ++ gShinyOverworldPalette_Mewthree ++ ) + .levelUpLearnset = sMewthreeLevelUpLearnset, + .teachableLearnset = sMewthreeTeachableLearnset, + }, + }; +``` + +### Sprite Size +Depending on your species, you might want to use different sizes for it. For example, certain species known for being big like Steelix use sprites that fit a 64x64 frame instead of 32x32, and as such have `SIZE_64x64` in their data instead of `SIZE_32x32` to accomodate for them. + +Also, in `spritesheet_rules.mk`, `-mwidth` and `-mheight` need to be set to 8 instead of 4 for such cases. + +### Shadows +You have 4 options for their shadow, between Small, Medium, Large and None: + - `SHADOW_SIZE_NONE` + - `SHADOW_SIZE_S` ![shadow_small](https://github.com/user-attachments/assets/c964712e-f5cb-42e8-82fa-db33fc4f4d4c) + - `SHADOW_SIZE_M` ![shadow_medium](https://github.com/user-attachments/assets/b7792624-d65c-425b-9982-cab28ce4248e) + - `SHADOW_SIZE_L` ![shadow_large](https://github.com/user-attachments/assets/ec2dc701-d335-44ad-8ded-f8003114f0ff) + +### Tracks +You have 4 options for the tracks that your species will leave behind on sand. + - `TRACKS_NONE` + - `TRACKS_FOOT` ![sand_footprints](https://github.com/user-attachments/assets/8b8c34d6-72e9-4b9d-839d-0a5cc1ae1a4c) + - `TRACKS_SLITHER` ![slither_tracks](https://github.com/user-attachments/assets/28219c05-61e0-48b3-9aeb-43f48e4ffdd4) + - `TRACKS_SPOT` ![spot_tracks](https://github.com/user-attachments/assets/f7a24887-c5ca-47f2-8825-01f3df61deca) + - `TRACKS_BUG` ![bug_tracks](https://github.com/user-attachments/assets/8cd1dea4-4123-4af8-a558-992874a6d589) + + ...though technically you can also use `TRACKS_BIKE_TIRE` if you wish to. + +![bike_tire_tracks](https://github.com/user-attachments/assets/ac81d211-85e5-443a-ac54-c2976f1f0b82) diff --git a/docs/how_to_testing_system.md b/docs/how_to_testing_system.md new file mode 100644 index 0000000000..56719458ab --- /dev/null +++ b/docs/how_to_testing_system.md @@ -0,0 +1,578 @@ +# How to use the Testing System + +## Running Tests +To run all the tests use: +`make check -j` +To run specific tests, e.g. Spikes ones, use: +`make check TESTS="Spikes"` +To build a ROM (pokemerald-test.elf) that can be opened in mgba to view specific tests, e.g. Spikes ones, use: +`make pokeemerald-test.elf TESTS="Spikes"` + +## How to Write Tests +Manually testing a battle mechanic often follows this pattern: +1. Create a party which can activate the mechanic. +2. Start a battle and play a few turns which activate the mechanic. +3. Look at the UI outputs to decide if the mechanic works. + +Automated testing follows the same pattern: +1. Initialize the party in `GIVEN`. +2. Play the turns in `WHEN`. +3. Check the UI outputs in `SCENE`. + +### Example 1 +As a concrete example, to manually test `EFFECT_PARALYZE`, e.g. the +effect of Stun Spore you might: +1. Put a Wobbuffet that knows Stun Spore in your party. +2. Battle a wild Wobbuffet. +3. Use Stun Spore. +4. Check that the Wobbuffet is paralyzed. + +This can be translated to an automated test as follows: + +``` +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_STUN_SPORE].effect == EFFECT_PARALYZE); +} + +SINGLE_BATTLE_TEST("Stun Spore inflicts paralysis") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); // 1. + OPPONENT(SPECIES_WOBBUFFET); // 2. + } WHEN { + TURN { MOVE(player, MOVE_STUN_SPORE); } // 3. + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); + MESSAGE("Foe Wobbuffet is paralyzed! It may be unable to move!"); // 4 + STATUS_ICON(opponent, paralysis: TRUE); // 4. + } +} +``` + +The `ASSUMPTIONS` block documents that Stun Spore has `EFFECT_PARALYZE`. +If Stun Spore did not have that effect it would cause the tests in the file to be skipped. We write our tests like this so that hackers can change the effects of moves without causing tests to fail. + +`SINGLE_BATTLE_TEST` defines the name of the test. Related tests should start with the same prefix, e.g. Stun Spore tests should start with "Stun Spore", this allows just the Stun Spore-related tests to be run with: +`make check TESTS="Stun Spore"` + +`GIVEN` initializes the parties, `PLAYER` and `OPPONENT` add a Pokémon to their respective parties. They can both accept a block which further customizes the Pokémon's stats, moves, item, ability, etc. + +`WHEN` describes the turns, and `TURN` describes the choices made in a single turn. `MOVE` causes the player to use Stun Spore and adds the move to the Pokémon's moveset if an explicit Moves was not specified. +Pokémon that are not mentioned in a `TURN` use Celebrate. +The test runner rigs the RNG so that unless otherwise specified, moves always hit, never critical hit, always activate their secondary effects, and always roll the same damage modifier. + +`SCENE` describes the player-visible output of the battle. In this case `ANIMATION` checks that the Stun Spore animation played, `MESSAGE` checks the paralysis message was shown, and `STATUS_ICON` checks that the opponent's HP bar shows a PRZ icon. + +### Example 2 +As a second example, to manually test that Stun Spore does not effect Grass-types you might: +1. Put a Wobbuffet that knows Stun Spore in your party. +2. Battle a wild Oddish. +3. Use Stun Spore. +4. Check that the move animation does not play. +5. Check that a "It doesn't affect Foe Oddish…" message is shown. + +This can again be translated as follows: + +``` +SINGLE_BATTLE_TEST("Stun Spore does not affect Grass-types") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_STUN_SPORE].powderMove); + ASSUME(gSpeciesInfo[SPECIES_ODDISH].types[0] == TYPE_GRASS); + PLAYER(SPECIES_ODDISH); // 1. + OPPONENT(SPECIES_ODDISH); // 2. + } WHEN { + TURN { MOVE(player, MOVE_STUN_SPORE); } // 3. + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player); // 4. + MESSAGE("It doesn't affect Foe Oddish…"); // 5. + } +} +``` +The `ASSUME` commands are documenting the reasons why Stun Spore does not affect Oddish, namely that Stun Spore is a powder move, and Oddish is a Grass-type. These `ASSUME` statements function similarly to the ones in `ASSUMPTIONS` but apply only to the one test. +NOT inverts the meaning of a `SCENE` check, so applying it to `ANIMATION` requires that the Stun Spore animation does not play. `MESSAGE` checks that the message was shown. +The checks in `SCENE` are ordered, so together this says "The doesn't affect message is shown, and the Stun Spore animation does not play at any time before that". Normally you would only test one or the other, or even better, just `NOT STATUS_ICON(opponent, paralysis: TRUE);` to say that Oddish was not paralyzed without specifying the exact outputs which led to that. + +### Example 3 +As a final example, to test that Meditate works you might: +1. Put a Wobbuffet that knows Meditate and Tackle in your party. +2. Battle a wild Wobbuffet. +3. Use Tackle and note the amount the HP bar reduced. +4. Battle a wild Wobbuffet. +5. Use Meditate and that the stat change animation and message play. +6. Use Tackle and check that the HP bar reduced by more than in 3. + +This can be translated to an automated test as follows: +``` +SINGLE_BATTLE_TEST("Meditate raises Attack", s16 damage) +{ + bool32 raiseAttack; + PARAMETRIZE { raiseAttack = FALSE; } + PARAMETRIZE { raiseAttack = TRUE; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + if (raiseAttack) TURN { MOVE(player, MOVE_MEDITATE); } // 5. + TURN { MOVE(player, MOVE_TACKLE); } // 3 & 6. + } SCENE { + if (raiseAttack) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_MEDITATE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); // 5. + MESSAGE("Wobbuffet's attack rose!"); // 5. + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + HP_BAR(opponent, captureDamage: &results[i].damage); // 3 & 6. + } FINALLY { + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); // 6. + } +} +``` + +`PARAMETRIZE` causes a test to run multiple times, once per `PARAMETRIZE` block (e.g. once with `raiseAttack = FALSE` and once with `raiseAttack = TRUE`). +The `HP_BAR` command's `captureDamage` causes the change in HP to be stored in a variable, and the variable chosen is `results[i].damage`. +`results[i]` contains all the variables defined at the end of `SINGLE_BATTLE_TEST`, `i` is the current `PARAMETRIZE` index. +`FINALLY` runs after the last parameter has finished, and uses `EXPECT_MUL_EQ` to check that the second battle deals 1.5× the damage of the first battle (with a small tolerance to account for rounding). + +You might notice that all the tests check the outputs the player could see rather than the internal battle state. e.g. the Meditate test could have used `gBattleMons[B_POSITION_OPPONENT_LEFT].hp` instead of using `HP_BAR` to capture the damage. This is a deliberate choice, by checking what the player can observe the tests are more robust to refactoring, e.g. if `gBattleMons` got moved into `gBattleStruct` then any test that used it would need to be updated. + +### Note on Overworld Tests +The overworld is not available, so it is only possible to test commands which don't affect the overworld itself, e.g. `givemon` can be tested because it only alters `gPlayerParty`, but `addobject` cannot because it affects object events (which aren't loaded). + +## REFERENCE + +### `ASSUME` +`ASSUME(cond)` +Causes the test to be skipped if `cond` is false. Used to document any prerequisites of the test, e.g. to test Burn reducing the Attack of a Pokémon we can observe the damage of a physical attack with and without the burn. To document that this test assumes the attack is physical we can use: +`ASSUME(gMovesInfo[MOVE_WHATEVER].category == DAMAGE_CATEGORY_PHYSICAL);` + +### `ASSUMPTIONS` +``` +ASSUMPTIONS +{ + ... +} +``` +Should be placed immediately after any `#includes` and contain any `ASSUME` statements which should apply to the whole file, e.g. to test `EFFECT_POISON_HIT` we need to choose a move with that effect, if we chose to use Poison Sting in every test then the top of `move_effect_poison_hit.c` should be: +``` +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_POISON_STING].effect == EFFECT_POISON_HIT); +} +``` + +### `SINGLE_BATTLE_TEST` +`SINGLE_BATTLE_TEST(name, results...)` and `DOUBLE_BATTLE_TEST(name, results...)` +Define single- and double- battles. The names should start with the name of the mechanic being tested so that it is easier to run all the related tests. `results` contains variable declarations to be placed into the `results` array which is available in tests using `PARAMETRIZE` commands. +The main differences for doubles are: + - Move targets sometimes need to be explicit. + - Instead of `player` and `opponent` there is `playerLeft`, `playerRight`, `opponentLeft`, and `opponentRight`. + +### `AI_SINGLE_BATTLE_TEST` +`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` / `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` +`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 test passes the developer will be notified to remove `KNOWN_FAILING`. +For example: +``` +SINGLE_BATTLE_TEST("Jump Kick has no recoil if no target") +{ + KNOWN_FAILING; // #2596. + ... +} +``` +### `PARAMETRIZE` +`PARAMETERIZE { parameter; }` +Runs a test multiple times. `i` will be set to which parameter is running, and `results` will contain an entry for each parameter, e.g.: +``` +SINGLE_BATTLE_TEST("Blaze boosts Fire-type moves in a pinch", s16 damage) +{ + u16 hp; + PARAMETRIZE { hp = 99; } + PARAMETRIZE { hp = 33; } + GIVEN { + ASSUME(gMovesInfo[MOVE_EMBER].type == TYPE_FIRE); + PLAYER(SPECIES_CHARMANDER) { Ability(ABILITY_BLAZE); MaxHP(99); HP(hp); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_EMBER); } + } SCENE { + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + EXPECT(results[1].damage > results[0].damage); + } +} +``` +### `PASSES_RANDOMLY` +`PASSES_RANDOMLY(successes, trials, [tag])` +Checks that the test passes successes/trials. If `tag` is provided, the test is run for each value that the tag can produce. For example, to check that Paralysis causes the turn to be skipped 25/100 times, we can write the following test that passes only if the Pokémon is fully paralyzed and specify that we expect it to pass 25/100 times when `RNG_PARALYSIS` varies: +``` +SINGLE_BATTLE_TEST("Paralysis has a 25% chance of skipping the turn") +{ + PASSES_RANDOMLY(25, 100, RNG_PARALYSIS); + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_PARALYSIS); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("Wobbuffet is paralyzed! It can't move!"); + } +} +``` +All `BattleRandom` calls involving tag will return the same number, so this cannot be used to have two moves independently hit or miss, for example. + +If the tag is not provided, runs the test 50 times and computes an approximate pass ratio. +`PASSES_RANDOMLY(gMovesInfo[move].accuracy, 100);` +Note that this mode of PASSES_RANDOMLY makes the tests run very slowly and should be avoided where possible. If the mechanic you are testing is missing its tag, you should add it. + +### `GIVEN` +``` +Given { + ... +} +``` +Contains the initial state of the parties before the battle. + +## `RNGSeed` +`RNGSeed(seed)` +Explicitly sets the RNG seed. Try to avoid using this because it is a very fragile tool. +Example: +``` +GIVEN { + RNGSeed(0xC0DEIDEA); + ... +} +``` + +### `FLAG_SET` +`FLAG_SET(flagId)` +Sets the specified flag. Can currently only set one flag at a time. +Cleared between parameters and at the end of the test. +Example: +``` +GIVEN { + FLAG_SET(FLAG_SYS_EXAMPLE_FLAG); + ... +} +``` + +### `PLAYER` and `OPPONENT` +`PLAYER(species)` and `OPPONENT(species` +Adds the species to the player's or opponent's party respectively. +The Pokémon can be further customized with the following functions: + - `Gender(MON_MALE | MON_FEMALE)` + - `Nature(nature)` + - `Ability(ability)` + - `Level(level)` + - `MaxHP(n)`, `HP(n)`, `Attack(n)`, `Defense(n)`, `SpAttack(n)`, `SpDefense(n)`, `Speed(n)` + - `Item(item)` + - `Moves(moves...)` + - `Friendship(friendship)` + - `Status1(status1)` +For example to create a level 42 Wobbuffet that is poisoned: +`PLAYER(SPECIES_WOBBUFFET) { Level(42); Status1(STATUS1_POISON); }` +**Note if Speed is specified for any Pokémon then it must be specified for all Pokémon.** +**Note if Moves is specified then MOVE will not automatically add moves to the moveset.** + +### `AI_FLAGS` +`AI_FLAGS(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` +``` + ... +} WHEN { + ... +} +``` +Contains the choices that battlers make during the battle. + +### `TURN` +`TURN { ... }` +Groups the choices made by the battlers on a single turn. If Speeds have not been explicitly specified then the order of the `MOVE` commands in the `TURN` will be used to infer the Speeds of the Pokémon, e.g.: +``` + // player's speed will be greater than opponent's speed. + TURN { MOVE(player, MOVE_SPLASH); MOVE(opponent, MOVE_SPLASH); } + // opponent's speed will be greater than player's speed. + TURN { MOVE(opponent, MOVE_SPLASH); MOVE(player, MOVE_SPLASH); } +``` +The inference process is naive, if your test contains anything that modifies the speed of a battler you should specify them explicitly. + +### `MOVE` +`MOVE(battler, move | moveSlot:, [megaEvolve:], [hit:], [criticalHit:], [target:], [allowed:], [WITH_RNG(tag, value])` +Used when the battler chooses Fight. Either the move ID (e.g. `MOVE_TACKLE` or move slot must be specified. + - `megaEvolve: TRUE` causes the battler to Mega Evolve if able + - `hit: FALSE` causes the move to miss + - `criticalHit: TRUE` causes the move to land a critical hit + - `target:` is used in double battles to choose the target (when necessary) + - `allowed: FALSE` is used to reject an illegal move e.g. a Disabled one + - `WITH_RNG` allows the move to specify an explicit outcome for an RNG tag +``` + MOVE(playerLeft, MOVE_TACKLE, target: opponentRight); +``` +If the battler does not have an explicit Moves specified the moveset will be populated based on the `MOVE`s it uses. + +### `FORCED_MOVE` +`FORCED_MOVE(battler)` +Used when the battler chooses Fight and then their move is chosen for them, e.g. when affected by Encore. +``` + FORCED_MOVE(player); +``` + +### `SWITCH` +`SWITCH(battler, partyIndex)` +Used when the battler chooses Switch. +``` + SWITCH(player, 1); +``` + +### `SKIP_TURN` +`SKIP_TURN(battler)` +Used when the battler cannot choose an action, e.g. when locked into Thrash. +``` + SKIP_TURN(player); +``` + +### `SEND_OUT` +`SEND_OUT(battler, partyIndex)` +Used when the battler chooses to switch to another Pokémon but not via Switch, e.g. after fainting or due to a U-turn. +``` + SEND_OUT(player, 1); +``` + +### `USE_ITEM` +`USE_ITEM(battler, itemId, [partyIndex:], [move:])` +Used when the battler chooses to use an item from the Bag. The item ID (e.g. ITEM_POTION) must be specified, and party index and move slot if applicable, e.g: +``` + USE_ITEM(player, ITEM_X_ATTACK); + USE_ITEM(player, ITEM_POTION, partyIndex: 0); + USE_ITEM(player, ITEM_LEPPA_BERRY, partyIndex: 0, move: MOVE_TACKLE); +``` + +### `SCENE` +``` + ... +} SCENE { + ... +} +``` +Contains an abridged description of the UI during the `THEN`. The order of the description must match too, e.g. +``` +} SCENE { + // ABILITY_POPUP followed by a MESSAGE + ABILITY_POPUP(player, ABILITY_STURDY); + MESSAGE("Geodude was protected by Sturdy!"); +} +``` + +### `ABILITY_POPUP` +`ABILITY_POPUP(battler, [ability])` +Causes the test to fail if the battler's ability pop-up is not shown. +If specified, ability is the ability shown in the pop-up. +``` + ABILITY_POPUP(opponent, ABILITY_MOLD_BREAKER); +``` + +### `ANIMATION` +`ANIMATION(type, animId, [battler], [target:])` +Causes the test to fail if the animation does not play. A common use of this command is to check if a move was successful, e.g.: +``` + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); +``` +`target` can only be specified for `ANIM_TYPE_MOVE`. + +### `EXPERIENCE_BAR` +`EXPERIENCE_BAR(battler, [exp: | captureGainedExp:])` +If `exp:` is used, causes the test to fail if that amount of experience is not gained, e.g.: +``` + EXPERIENCE_BAR(player, exp: 0); +``` +If `captureGainedExp:` is used, causes the test to fail if the Experience bar does not change, and then writes that change to the pointer, e.g.: +``` + u32 exp; + EXPERIENCE_BAR(player, captureGainedExp: &exp); +``` +If none of the above are used, causes the test to fail if the Exp does not change at all. +**Please note that due to nature of tests, this command is only usable in `WILD_BATTLE_TEST` and will fail elsewhere.** + +### `HP_BAR` +`HP_BAR(battler, [damage: | hp: | captureDamage: | captureHP:])` +If `hp:` or `damage:` are used, causes the test to fail if that amount of damage is not dealt, e.g.: +``` + HP_BAR(player, hp: 0); +``` +If `captureDamage:` or `captureHP:` are used, causes the test to fail if the HP bar does not change, and then writes that change to the + pointer, e.g.: +``` + s16 damage; + HP_BAR(player, captureDamage: &damage); +``` +If none of the above are used, causes the test to fail if the HP does not change at all. + +### MESSAGE +`MESSAGE(pattern)` +Causes the test to fail if the message in pattern is not displayed. +Spaces in pattern match newlines (\n, \l, and \p) in the message. +Often used to check that a battler took its turn but it failed, e.g.: +``` + MESSAGE("Wobbuffet used Dream Eater!"); + MESSAGE("Foe Wobbuffet wasn't affected!"); +``` + +### `STATUS_ICON` +`STATUS_ICON(battler, status1 | none: | sleep: | poison: | burn: | freeze: | paralysis:, badPoison:)` +Causes the test to fail if the battler's status is not changed to the specified status. +``` + STATUS_ICON(player, badPoison: TRUE); +``` +If the expected status icon is parametrized the corresponding `STATUS1` constant can be provided, e.g.: +``` + u32 status1; + PARAMETRIZE { status1 = STATUS1_NONE; } + PARAMETRIZE { status1 = STATUS1_BURN; } + ... + STATUS_ICON(player, status1); +``` + +### `NOT` +`NOT sceneCommand` +Causes the test to fail if the `SCENE` command succeeds before the following command succeeds. +``` + // Our Wobbuffet does not Celebrate before the foe's. + NOT MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Foe Wobbuffet used Celebrate!"); +``` +**NOTE**: If this condition fails, the viewable ROM freezes at the NOT command. +**WARNING: `NOT` is an alias of `NONE_OF`, so it behaves surprisingly when applied to multiple commands wrapped in braces.** + +### `ONE_OF` +``` + ONE_OF { + ... + } +``` +Causes the test to fail unless one of the `SCENE` commands succeeds. +``` + ONE_OF { + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Wobbuffet is paralyzed! It can't move!"); + } +``` + +### `NONE_OF` +``` + NONE_OF { + ... + } +``` +Causes the test to fail if one of the `SCENE` commands succeeds before the command after the `NONE_OF` succeeds. +``` + // Our Wobbuffet does not move before the foe's. + NONE_OF { + MESSAGE("Wobbuffet used Celebrate!"); + MESSAGE("Wobbuffet is paralyzed! It can't move!"); + } + MESSAGE("Foe Wobbuffet used Celebrate!"); +``` + +### `PLAYER_PARTY` +Refer to the party members defined in `GIVEN`, e.g.: +``` + s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP); + HP_BAR(player, damage: maxHP / 2); +``` +### `OPPONENT_PARTY` +Refer to the party members defined in `GIVEN`, e.g.: +``` + s32 maxHP = GetMonData(&OPPONENT_PARTY[0], MON_DATA_MAX_HP); + HP_BAR(opponent, damage: maxHP / 2); +``` + +### `THEN` +``` + ... +} THEN { + ... +} +``` +Contains code to run after the battle has finished. If the test is using `PARAMETRIZE` commands then `EXPECT` commands between the results should go here. Is also occasionally used to check the internal battle state when checking the behavior via a `SCENE` is too difficult, verbose, or error-prone. + +### `FINALLY` +``` + ... +} FINALLY { + ... +} +``` +Contains checks to run after all `PARAMETERIZE` commands have run. Prefer to write your checks in `THEN` where possible, because a failure in `THEN` will be tagged with which parameter it corresponds to. + +### `EXPECT` +`EXPECT(cond)` +Causes the test to fail if `cond` is false. + +### `EXPECT_XX` +`EXPECT_EQ(a, b)` +`a == b` + +`EXPECT_NE(a, b)` +`a != b` + +`EXPECT_LT(a, b)` +`a < b` + +`EXPECT_LE(a, b)` +`a <= b` + +`EXPECT_GT(a, b)` +`a > b` + +`EXPECT_GE(a, b)` +`a >= b` + +Causes the test to fail if a and b compare incorrectly, e.g. +``` + EXPECT_EQ(results[0].damage, results[1].damage); +``` + +### `EXPECT_MUL_EQ` +`EXPECT_MUL_EQ(a, m, b)` + Causes the test to fail if `a*m != b` (within a threshold), e.g. +``` + // Expect results[0].damage * 1.5 == results[1].damage. + EXPECT_EQ(results[0].damage, Q_4_12(1.5), results[1].damage); +``` + +## Overworld Command Reference + +### `OVERWORLD_SCRIPT` +`OVERWORLD_SCRIPT(instructions...)` +Returns a pointer to a compiled overworld script. Cannot be used to initialize global `const` data, although the pointer **IS** to `const` data. +Note that each script command must be followed by a ;, e.g.: +``` +const u8 *myScript = OVERWORLD_SCRIPT( + random 2; + addvar VAR_RESULT, 1; +); +``` + +### `RUN_OVERWORLD_SCRIPT` +`RUN_OVERWORLD_SCRIPT(instructions...)` +Runs an overworld script in the immediate script context, which means that commands like `waitstate` are not supported. +``` + RUN_OVERWORLD_SCRIPT( + setvar VAR_RESULT, 3; + ); + EXPECT_EQ(GetVar(VAR_RESULT), 3); +``` diff --git a/docs/how_to_trainer_class.md b/docs/how_to_trainer_class.md new file mode 100644 index 0000000000..3ce0217c28 --- /dev/null +++ b/docs/how_to_trainer_class.md @@ -0,0 +1,178 @@ +# How to add a new trainer class + +## Content +* [Quick Summary](#quick-summary) +* [The Graphics](#the-graphics) + * [1. Edit the sprites](#2-edit-the-sprites) + * [2. Register the sprites](#2-register-the-sprites) + * [3. The Animation](#2-the-animation) + * [4. Connecting pictures to the data](#2-connecting-pictures-to-the-data) +* [The Data](#the-data) + * [5. Defining the trainer class](#2-defining-the-trainer-class) +* [Usage](#usage) + +## Quick Summary +(Page contains out of date information, [new instructions for Sprites here](https://github.com/rh-hideout/pokeemerald-expansion/pull/3597).) +If you've done this before and just need a quick lookup, here's what files you need: +1. GFX into [graphics/trainers/front_pics](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/graphics/trainers/front_pics) +2. Palette into [graphics/trainers/palettes](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/graphics/trainers/palettes) +3. Register sprites to [include/graphics.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/graphics.h) +4. Point game to where graphic files are found: [src/data/graphics/trainers](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/trainers.h) +5. Add animation to: [src/data/trainer_graphics/front_pic_anims.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainer_graphics/front_pic_anims.h) +6. Add the trainer to all three structs in: [src/data/trainer_graphics/front_pic_table.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainer_graphics/front_pic_table.h) +7. Add trainer to [include/constants/trainers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/trainers.h) + +## The Graphics + +### 1. Edit the sprites +We will start with a graphic that we want to use for our new trainer class. Unlike with adding Pokémon, the trainer sprites aren't sorted in individual folders, but rather in one folder: +[graphics/trainers/front_pics](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/graphics/trainers/front_pics) + +**Remember to limit yourself to 16 colors including transparency in the first slot!** + +Export the pallette and place into the same folder. + +### 2. Register the sprites +Sadly, just putting the image files into the graphics folder is not enough. To use the sprites we have to register them, which is kind of tedious. First, create constants for the file paths. +Edit [include/graphics.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/graphics.h): +```diff +extern const u32 gTrainerFrontPic_RubySapphireMay[]; ++ extern const u32 gTrainerFrontPic_myTrainerClass[]; + +extern const u32 gTrainerPalette_Hiker[]; +... + +... +extern const u32 gTrainerPalette_RubySapphireMay[]; ++ extern const u32 gTrainerPalette_myTrainerClass[]; + +extern const u8 gTrainerBackPic_Brendan[]; +``` + +Now link the graphic files. +[src/data/graphics/trainers](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/graphics/trainers.h): +```diff +const u32 gTrainerPalette_RubySapphireBrendan[] = INCBIN_U32("graphics/trainers/palettes/ruby_sapphire_brendan.gbapal.lz"); + +const u32 gTrainerFrontPic_RubySapphireMay[] = INCBIN_U32("graphics/trainers/front_pics/ruby_sapphire_may_front_pic.4bpp.lz"); +const u32 gTrainerPalette_RubySapphireMay[] = INCBIN_U32("graphics/trainers/palettes/ruby_sapphire_may.gbapal.lz"); + ++ const u32 gTrainerFrontPic_Sheriff[] = INCBIN_U32("graphics/trainers/front_pics/myTrainerClass_front_pic.4bpp.lz"); ++ const u32 gTrainerPalette_Sheriff[] = INCBIN_U32("graphics/trainers/palettes/myTrainerClass.gbapal.lz"); + +const u8 gTrainerBackPic_Brendan[] = INCBIN_U8("graphics/trainers/back_pics/brendan_back_pic.4 +``` + +### 3. The Animation +Add the Animation of the trainer here: +[src/data/trainer_graphics/front_pic_anims.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainer_graphics/front_pic_anims.h) + +The trainers don't really move, but in theory they could, it's just that the animation defined for each trainer just shows one frame: + +```diff +static const union AnimCmd *const sAnims_RubySapphireMay[] ={ + sAnim_GeneralFrame0, +}; + ++ static const union AnimCmd *const sAnims_MyTrainerClass[] ={ ++ sAnim_GeneralFrame0, ++ }; + +const union AnimCmd *const *const gTrainerFrontAnimsPtrTable[] = +{ + [TRAINER_PIC_HIKER] = sAnims_Hiker, + [TRAINER_PIC_AQUA_GRUNT_M] = sAnims_AquaGruntM, + [TRAINER_PIC_POKEMON_BREEDER_F] = sAnims_PokemonBreederF, +... + +... + [TRAINER_PIC_RS_BRENDAN] = sAnims_RubySapphireBrendan, + [TRAINER_PIC_RS_MAY] = sAnims_RubySapphireMay, ++ [TRAINER_PIC_MYTRAINERCLASS] = sAnims_MyTrainerClass, +}; +``` + +### 4. Connecting the Pictures to the Data +The last few things we have to do is prepare the graphics for usage. In [src/data/trainer_graphics/front_pic_table.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainer_graphics/front_pic_table.h) you'll find the structs, we need to add the trainer to all of these. You can just copy the last trainer type defined and edit it, but as far as I understand, these are what they do: + +1. gTrainerFrontPicCoords: Pretty self explanatory. Coordinates like size and offset on the y-axis to position the sprite on screen. +2. gTrainerFrontPicTable: Connects the trainer type with the image we defined earlier. +3. gTrainerFrontPicPaletteTable: Connects the trainer type with the palette we defined earlier. + +So, finally, it needs to look like this: +```diff +const struct MonCoords gTrainerFrontPicCoords[] = +{ + [TRAINER_PIC_HIKER] = {.size = 8, .y_offset = 1}, + [TRAINER_PIC_AQUA_GRUNT_M] = {.size = 8, .y_offset = 1}, +... + +... + [TRAINER_PIC_RS_BRENDAN] = {.size = 8, .y_offset = 1}, + [TRAINER_PIC_RS_MAY] = {.size = 8, .y_offset = 1}, ++ [TRAINER_PIC_MYTRAINERCLASS] = {.size = 8, .y_offset = 1}, +}; + +#define TRAINER_SPRITE(trainerPic, sprite, size) [TRAINER_PIC_##trainerPic] = {sprite, size, TRAINER_PIC_##trainerPic} + +const struct CompressedSpriteSheet gTrainerFrontPicTable[] = +{ + TRAINER_SPRITE(HIKER, gTrainerFrontPic_Hiker, 0x800), + TRAINER_SPRITE(AQUA_GRUNT_M, gTrainerFrontPic_AquaGruntM, 0x800), + TRAINER_SPRITE(POKEMON_BREEDER_F, gTrainerFrontPic_PokemonBreederF, 0x800), + TRAINER_SPRITE(COOLTRAINER_M, gTrainerFrontPic_CoolTrainerM, 0x800), +... + +... + TRAINER_SPRITE(RS_BRENDAN, gTrainerFrontPic_RubySapphireBrendan, 0x800), + TRAINER_SPRITE(RS_MAY, gTrainerFrontPic_RubySapphireMay, 0x800), ++ TRAINER_SPRITE(MYTRAINERCLASS, gTrainerFrontPic_MyTrainerClass, 0x800), +}; + +#define TRAINER_PAL(trainerPic, pal) [TRAINER_PIC_##trainerPic] = {pal, TRAINER_PIC_##trainerPic} + +const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[] = +{ + TRAINER_PAL(HIKER, gTrainerPalette_Hiker), + TRAINER_PAL(AQUA_GRUNT_M, gTrainerPalette_AquaGruntM), + TRAINER_PAL(POKEMON_BREEDER_F, gTrainerPalette_PokemonBreederF), +... + +... + TRAINER_PAL(RS_BRENDAN, gTrainerPalette_RubySapphireBrendan), + TRAINER_PAL(RS_MAY, gTrainerPalette_RubySapphireMay), ++ TRAINER_PAL(MYTRAINERCLASS, gTrainerPalette_MyTrainerClass), +}; + +``` +### The Data +#### 5. Defining the trainer class +Finally, let's bring it all together by defining our new trainer class in [include/constants/trainers.h](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/trainers.h): + +```diff +#define TRAINER_PIC_RS_MAY 92 ++ #define TRAINER_PIC_MYTRAINERCLASS 93 + +#define TRAINER_BACK_PIC_BRENDAN 0 +#define TRAINER_BACK_PIC_MAY 1 +``` +Remember to count the number next to the trainer class up by one! + +## Usage +You can test your trainer type by going to [src/data/trainers](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainers.h) and changing a trainer type. For example: +```diff + [TRAINER_BRENDAN_PLACEHOLDER] = + { + .partyFlags = 0, + .trainerClass = TRAINER_CLASS_RS_PROTAG, + .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, +- .trainerPic = TRAINER_PIC_RS_BRENDAN, ++ .trainerPic = TRAINER_PIC_MYTRAINERCLASS, + .trainerName = _("BRENDAN"), + .items = {}, + .doubleBattle = FALSE, + .aiFlags = 0, + .partySize = ARRAY_COUNT(sParty_BrendanLinkPlaceholder), + .party = {.NoItemDefaultMoves = sParty_BrendanLinkPlaceholder}, + }, +``` diff --git a/docs/local_mdbook/index.md b/docs/local_mdbook/index.md new file mode 100644 index 0000000000..ef362dc45f --- /dev/null +++ b/docs/local_mdbook/index.md @@ -0,0 +1,2 @@ +## Running documentation website locally +- [Ubuntu WSL1/WSL2](/docs/local_mdbook/ubuntu_WSL.md) diff --git a/docs/local_mdbook/ubuntu_WSL.md b/docs/local_mdbook/ubuntu_WSL.md new file mode 100644 index 0000000000..88ee2468e6 --- /dev/null +++ b/docs/local_mdbook/ubuntu_WSL.md @@ -0,0 +1,51 @@ +Note: For further information beyond this very basic guide, please visit mdBook's [official documentation](https://rust-lang.github.io/mdBook/). + +## Running documentation website locally (Ubuntu WSL1/WSL2) +### Previous Requirements: +- Option 1: Install via Rust toolchain + - Install Rust toolchain if you don't have it via the `sudo apt install cargo` command. + - Install mdBook via the `cargo install mdbook` command. Once finished, this message will pop up, with {USER} being your Ubuntu + ``` + warning: be sure to add `/home/{USER}/.cargo/bin` to your PATH to be able to run the installed binaries + ``` + - Add `/home/{USER}/.cargo/bin` to your PATH (with {USER} being the Ubuntu username.) + - Run command `nano ~/.profile` to edit the file. + - Add the following lines, ***replacing {USER} with your Linux username.*** + ```diff + # set PATH so it includes user's private bin if it exists + if [ -d "$HOME/bin" ] ; then + PATH="$HOME/bin:$PATH" + fi + + # set PATH so it includes user's private bin if it exists + if [ -d "$HOME/.local/bin" ] ; then + PATH="$HOME/.local/bin:$PATH" + fi + + +# set PATH so it includes cargo bin if it exists + +if [ -d "/home/{USER}/.cargo/bin" ] ; then + + PATH="/home/{USER}/.cargo/bin:$PATH" + +fi + ``` + - Run the `source ~/.profile` command to refresh the path in the current session. +- Option 2: Install downloaded binaries directly + - TODO: Add documentation of this process. + +### Running the website +- Navigate to the `docs` folder on the repository. +- Run `mdbook serve`. Once started, you may now open the website on your browser by going to `http://127.0.0.1:3000`. +- Every change done to the `docs` folder will be reflected with an automatic refresh. +- To stop the server and go back to the terminal, press `Ctrl + C`. + +### Modifying the website +- The navigation menu on the left is handled by `docs/SUMMARY.md`. Every file added needs to be added somewhere here in order to become visible, otherwise you'll get a 404 error. +- Any Markdown files (.md extension) added to the `docs/` directory will automatically be read by mdBook. +- To add Markdown files that are not in the `docs/` directory, you may create an empty `.md` file and add the following ***without the "----"***: + ```md + {{ ----#include ../INSTALL.md}}` + ``` + This will include the `INSTALL.md` Markdown file from the root directory. + +Once you're set up, you can now check your changes before pushing them to your repo! :D + +We hope that this will make it easier for users to contribute to the documentation :) diff --git a/docs/mmbn_style_names.md b/docs/mmbn_style_names.md new file mode 100644 index 0000000000..f9d5f11fe1 --- /dev/null +++ b/docs/mmbn_style_names.md @@ -0,0 +1,300 @@ +# Megaman Battle Network Style Names + +Prior to 1.10, names in expansion that were too long for the game's UIs were truncated to fit using the naming conventions from the [Megaman Battle Network]() series. + +These were removed as part of https://github.com/rh-hideout/pokeemerald-expansion/pull/5240. They are stored here for users that may want to refer back to them or restore them. + +# Table + +Attribute | MMBN | Official +-- | -- | -- +Item | PewtrCrnches | Pewter Crunchies +Item | RageCandyBar | Rage Candy Bar +Item | LumioseGlete | Lumiose Galette +Item | ShalourSable | Shalour Sable +Item | HealthFeather | Health Feather +Item | MuscleFeather | Muscle Feather +Item | ResistFeather | Resist Feather +Item | GeniusFeather | Genius Feather +Item | CleverFeather | Clever Feather +Item | SwiftFeather | Swift Feather +Item | AbilityCapsle | Ability Capsule +Item | AbilityPatch | Ability Patch +Item | AbilityPatches | Ability Patches +Item | Exp.Candy XS | Exp. Candy XS +Item | Exp.Candies XS | Exp. Candies XS +Item | Exp.Candy S | Exp. Candy S +Item | Exp.Candies S | Exp. Candies S +Item | Exp.Candy M | Exp. Candy M +Item | Exp.Candies M | Exp. Candies M +Item | Exp.Candy L | Exp. Candy L +Item | Exp.Candies L | Exp. Candies L +Item | Exp.Candy XL | Exp. Candy XL +Item | Exp.Candies XL | Exp. Candies XL +Item | DynamaxCandy | Dynamax Candy +Item | DynamaxCandies | Dynamax Candies +Item | MaxMushrooms | Max Mushrooms +Item | GoldBottlCap | Gold Bottle Cap +Item | PrettyFeather | Pretty Feather +Item | StrngeSouvnr | Strange Souvenir +Item | FosslzedBird | Fossilized Bird +Item | FosslzedFish | Fossilized Fish +Item | FosslzedFishes | Fossilized Fishes +Item | FosslzedDrke | Fossilized Drake +Item | FosslzedDino | Fossilized Dino +Item | SurprseMulch | Surprise Mulch +Item | YellwApricorn | Yellow Apricorn +Item | GreenApricorn | Green Apricorn +Item | WhiteApricorn | White Apricorn +Item | BlackApricorn | Black Apricorn +Item | WishingPiece | Wishing Piece +Item | GalaricaTwig | Galarica Twig +Item | GalaricaCuff | Galarica Cuff +Item | GalrcaWreath | Galarica Wreath +Item | GalrcaWreathes | Galarica Wreathes +Item | StrwbrySweet | Strawberry Sweet +Item | ElectrcMemory | Electric Memory +Item | ElectrcMemories | Electric Memories +Item | FightngMemory | Fighting Memory +Item | FightngMemories | Fighting Memories +Item | PsychicMemory | Psychic Memory +Item | PsychicMemories | Psychic Memories +Item | RustedSword | Rusted Sword +Item | RustedShield | Rusted Shield +Item | CharizarditeX | Charizardite X +Item | CharizarditeY | Charizardite Y +Item | U-Necrozium Z | Ultranecrozium Z +Item | DeepSeaScale | Deep Sea Scale +Item | DeepSeaTooth | Deep Sea Tooth +Item | Never-MeltIce | Never-Melt Ice +Item | WeaknssPolicy | Weakness Policy +Item | WeaknssPolicies | Weakness Policies +Item | SafetyGoggles | Safety Goggles +Item | AdrenalineOrb | Adrenaline Orb +Item | TerainExtendr | Terrain Extender +Item | ProtectvePads | Protective Pads +Item | Heavy-DtyBts | Heavy-Duty Boots +Item | BlundrPolicy | Blunder Policy +Item | BlundrPolicies | Blunder Policies +Item | UtltyUmbrlla | Utility Umbrella +Item | CatchngCharm | Catching Charm +Item | RotomCatalog | Rotom Catalog +Item | ReinsOfUnity | Reins of Unity +Item | Dowsing MCHN | Dowsing Machine +Item | AbilityShield | Ability Shield +Item | PunchingGlove | Punching Glove +Item | AuspciousArmr | Auspicious Armor +Item | BoosterEnergy | Booster Energy +Item | BoosterEnergies | Booster Energies +Item | BigBmbooShoot | Big Bamboo Shoot +Item | GimighoulCoin | Gimmighoul Coin +Item | Leader'sCrest | Leader's Crest +Item | MaliciousArmr | Malicious Armor +Item | ScrllOfDrknss | Scroll of Darkness +Item | ScrllsOfDrknss | Scrolls of Darkness +Item | ScrollOfWatrs | Scroll of Waters +Item | ScrollsOfWatrs | Scrolls of Waters +Item | TinyBmbooShot | Tiny Bamboo Shoot +Item | Bug TeraShard | Bug Tera Shard +Item | DarkTeraShard | Dark Tera Shard +Item | DragnTeraShrd | Dragon Tera Shard +Item | EltrcTeraShrd | Electric Tera Shard +Item | FairyTeraShrd | Fairy Tera Shard +Item | FghtngTerShrd | Fighting Tera Shard +Item | FireTeraShard | Fire Tera Shard +Item | FlyngTeraShrd | Flying Tera Shard +Item | GhostTeraShrd | Ghost Tera Shard +Item | GrassTeraShrd | Grass Tera Shard +Item | GrondTeraShrd | Ground Tera Shard +Item | Ice TeraShard | Ice Tera Shard +Item | NormlTeraShrd | Normal Tera Shard +Item | PoisnTeraShrd | Poison Tera Shard +Item | PschcTeraShrd | Psychic Tera Shard +Item | RockTeraShard | Rock Tera Shard +Item | SteelTeraShrd | Steel Tera Shard +Item | WaterTeraShrd | Water Tera Shard +Item | AdamantCrystl | Adamant Crystal +Item | LustrousGlobe | Lustrous Globe +Item | BlackAugurite | Black Augurite +Item | UnrmkblTeacup | Unremarkable Teacup +Item | MstrpceTeacup | Masterpiece Teacup +Item | CornrstneMask | Cornerstone Mask +Item | WellsprngMask | Wellspring Mask +Item | HrthflameMask | Hearthflame Mask +Item | FrshStrtMochi | Fresh Start Mochi +Item | GlmmringCharm | Glimmering Charm +Item | StllrTeraShrd | Stellar Tera Shard +Item | JublifeMuffin | Jubilife Muffin +Item | AuxPowerguard | Aux Powerguard +Item | ChoiceDumplng | Choice Dumpling +Item | 2xSpicedRadsh | Twice-Spiced Radish +Move | ThunderPunch | Thunder Punch +Move | PoisonPowder | Poison Powder +Move | ThunderShock | Thunder Shock +Move | SelfDestruct | Self-Destruct +Move | HighJumpKick | High Jump Kick +Move | DynamicPunch | Dynamic Punch +Move | DragonBreath | Dragon Breath +Move | ExtremeSpeed | Extreme Speed +Move | AncientPower | Ancient Power +Move | SmellngSalts | Smelling Salts +Move | FeatherDance | Feather Dance +Move | GrassWhistle | Grass Whistle +Move | PhantomForce | Phantom Force +Move | TrickOrTreat | Trick-or-Treat +Move | ParabolcChrg | Parabolic Charge +Move | Forest'sCurs | Forest's Curse +Move | PetalBlizzrd | Petal Blizzard +Move | DisrmngVoice | Disarming Voice +Move | DrainingKiss | Draining Kiss +Move | CraftyShield | Crafty Shield +Move | FlowerShield | Flower Shield +Move | GrssyTerrain | Grassy Terrain +Move | MistyTerrain | Misty Terrain +Move | King'sShield | King's Shield +Move | DiamondStorm | Diamond Storm +Move | SteamErption | Steam Eruption +Move | HyprspceHole | Hyperspace Hole +Move | WatrShuriken | Water Shuriken +Move | MysticalFire | Mystical Fire +Move | AromaticMist | Aromatic Mist +Move | EerieImpulse | Eerie Impulse +Move | MagneticFlux | Magnetic Flux +Move | ElctrcTrrain | Electric Terrain +Move | DazzlngGleam | Dazzling Gleam +Move | BabyDollEyes | Baby-Doll Eyes +Move | PowerUpPunch | Power-Up Punch +Move | OblivionWing | Oblivion Wing +Move | ThousndArrws | Thousand Arrows +Move | ThousndWaves | Thousand Waves +Move | LightOfRuin | Light Of Ruin +Move | PrcipceBldes | Precipice Blades +Move | DragonAscent | Dragon Ascent +Move | HyprspceFury | Hyperspace Fury +Move | FrstImpressn | First Impression +Move | BanefulBunkr | Baneful Bunker +Move | SpiritShackl | Spirit Shackle +Move | DarkstLariat | Darkest Lariat +Move | SparklngAria | Sparkling Aria +Move | FloralHealng | Floral Healing +Move | HighHorsepwr | High Horsepower +Move | PsychcTrrain | Psychic Terrain +Move | RvlationDnce | Revelation Dance +Move | CoreEnforcer | Core Enforcer +Move | ClngngScales | Clanging Scales +Move | DragonHammer | Dragon Hammer +Move | PsychicFangs | Psychic Fangs +Move | StmpngTantrm | Stomping Tantrum +Move | PrsmaticLasr | Prismatic Laser +Move | SpectrlThief | Spectral Thief +Move | SnsteelStrke | Sunsteel Strike +Move | MoongestBeam | Moongeist Beam +Move | Natur'sMadns | Nature's Madness +Move | PhotonGeyser | Photon Geyser +Move | SplishySplsh | Splishy Splash +Move | BouncyBubble | Bouncy Bubble +Move | SparklySwirl | Sparkly Swirl +Move | VeeveeVolley | Veevee Volley +Move | DublIronBash | Double Iron Bash +Move | DynamxCannon | Dynamax Cannon +Move | FishiousRend | Fishious Rend +Move | ClngrousSoul | Clangorous Soul +Move | BehemthBlade | Behemoth Blade +Move | BehemothBash | Behemoth Bash +Move | BreakngSwipe | Breaking Swipe +Move | StrangeSteam | Strange Steam +Move | FalsSurrendr | False Surrender +Move | MeteorAssalt | Meteor Assault +Move | ExpandngForc | Expanding Force +Move | ShellSideArm | Shell Side Arm +Move | MstyExplsion | Misty Explosion +Move | RisngVoltage | Rising Voltage +Move | TerrainPulse | Terrain Pulse +Move | SkitterSmack | Skitter Smack +Move | BrningJelosy | Burning Jealousy +Move | CorrosiveGas | Corrosive Gas +Move | DualWingbeat | Dual Wingbeat +Move | ScorchngSnds | Scorching Sands +Move | JungleHealng | Jungle Healing +Move | SurgngStrkes | Surging Strikes +Move | DragonEnergy | Dragon Energy +Move | FreezngGlare | Freezing Glare +Move | ThnderusKick | Thunderous Kick +Move | GlacialLance | Glacial Lance +Move | AstrlBarrage | Astral Barrage +Move | PsyshieldBsh | Psyshield Bash +Move | SprngtdeStrm | Springtide Storm +Move | MystcalPower | Mystical Power +Move | MountainGale | Mountain Gale +Move | VictoryDance | Victory Dance +Move | HeadlongRush | Headlong Rush +Move | BitterMalice | Bitter Malice +Move | TripleArrows | Triple Arrows +Move | InfrnlParade | Infernal Parade +Move | CeaslessEdge | Ceaseless Edge +Move | BlekwndStorm | Bleakwind Storm +Move | WildbltStorm | Wildbolt Storm +Move | SndsearStorm | Sandsear Storm +Move | LunarBlessng | Lunar Blessing +Move | LastRespects | Last Respects +Move | SpicyExtract | Spicy Extract +Move | PoplatinBomb | Population Bomb +Move | RevivlBlesng | Revival Blessing +Move | KowtowCleave | Kowtow Cleave +Move | ColisinCours | Collision Course +Move | ElectroDrift | Electro Drift +Move | ChilReceptin | Chilly Reception +Move | ChillingWatr | Chilling Water +Move | GigatonHammr | Gigaton Hammer +Move | BlazngTorque | Blazing Torque +Move | WickedTorque | Wicked Torque +Move | NoxiusTorque | Noxious Torque +Move | CombatTorque | Combat Torque +Move | MagiclTorque | Magical Torque +Move | MatchaGotcha | Matcha Gotcha +Move | TeraStarstrm | Tera Starstorm +Move | BurnngBulwrk | Burning Bulwark +Move | MightyCleave | Mighty Cleave +Move | TachyonCuttr | Tachyon Cutter +Move | AllurngVoice | Alluring Voice +Move | SuprcellSlam | Supercell Slam +Move | PsychicNoise | Psychic Noise +Move | MalignntChan | Malignant Chain +Species | Dudunsprce | Dudunsparce +Species | Corvisquir | Corvisquire +Species | Corviknigh | Corviknight +Species | Barraskewd | Barraskewda +Species | Centiskorc | Centiskorch +Species | Polteageis | Polteageist +Species | Stonjourne | Stonjourner +Species | Meowscarad | Meowscarada +Species | Sqawkabily | Squawkabilly +Species | Kilowatrel | Kilowattrel +Species | Brmblghast | Brambleghast +Species | ScreamTail | Scream Tail +Species | BruteBonet | Brute Bonnet +Species | FluttrMane | Flutter Mane +Species | SlithrWing | Slither Wing +Species | SndyShocks | Sandy Shocks +Species | IronTreads | Iron Treads +Species | IronBundle | Iron Bundle +Species | IronJuguls | Iron Jugulis +Species | IronThorns | Iron Thorns +Species | RoarngMoon | Roaring Moon +Species | IronVliant | Iron Valiant +Species | WalkngWake | Walking Wake +Species | IronLeaves | Iron Leaves +Species | Ptchageist | Poltchageist +Species | Fezndipiti | Fezandipiti +Species | GouginFire | Gouging Fire +Species | RagingBolt | Raging Bolt +Species | IronBouldr | Iron Boulder +Species | Crabminabl | Crabominable +Species | Blacephaln | Blacephalon +Species | Bsculegion | Basculegion +Species | Flechinder | Fletchinder +Type | Fight | Fighting +Type | Electr | Electric +Type | Psychc | Psychic +Type | Stellr | Stellar + diff --git a/gflib/characters.h b/gflib/characters.h index 8ed440e63a..3725cecce0 100644 --- a/gflib/characters.h +++ b/gflib/characters.h @@ -53,6 +53,7 @@ #define CHAR_EQUALS 0x35 #define CHAR_SEMICOLON 0x36 #define CHAR_BARD_WORD_DELIMIT 0x37 // Empty space to separate words in Bard's song +#define CHAR_V_D_ARROW 0x38 #define CHAR_INV_QUESTION_MARK 0x51 #define CHAR_INV_EXCL_MARK 0x52 #define CHAR_PK 0x53 diff --git a/gflib/sprite.c b/gflib/sprite.c index 7823888cb5..9ba1662c9d 100644 --- a/gflib/sprite.c +++ b/gflib/sprite.c @@ -52,7 +52,6 @@ static void SortSprites(u32 *spritePriorities, s32 n); static u32 CreateSpriteAt(u32 index, const struct SpriteTemplate *template, s16 x, s16 y, u32 subpriority); static void ResetOamMatrices(void); static void ResetSprite(struct Sprite *sprite); -static void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct SpriteFrameImage *images); static void ResetAllSprites(void); static void BeginAnim(struct Sprite *sprite); static void ContinueAnim(struct Sprite *sprite); @@ -75,7 +74,6 @@ static void AffineAnimCmd_end(u8 matrixNum, struct Sprite *sprite); static void AffineAnimCmd_frame(u8 matrixNum, struct Sprite *sprite); static void CopyOamMatrix(u8 destMatrixIndex, struct OamMatrix *srcMatrix); static u8 GetSpriteMatrixNum(struct Sprite *sprite); -static void SetSpriteOamFlipBits(struct Sprite *sprite, u8 hFlip, u8 vFlip); static void AffineAnimStateRestartAnim(u8 matrixNum); static void AffineAnimStateStartAnim(u8 matrixNum, u8 animNum); static void AffineAnimStateReset(u8 matrixNum); diff --git a/gflib/sprite.h b/gflib/sprite.h index 6a3084add2..937ed42ced 100644 --- a/gflib/sprite.h +++ b/gflib/sprite.h @@ -331,5 +331,7 @@ u8 SpriteTileAllocBitmapOp(u16 bit, u8 op); void ClearSpriteCopyRequests(void); void ResetAffineAnimData(void); u32 GetSpanPerImage(u32 shape, u32 size); +void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct SpriteFrameImage *images); +void SetSpriteOamFlipBits(struct Sprite *sprite, u8 hFlip, u8 vFlip); #endif //GUARD_SPRITE_H diff --git a/gflib/text.c b/gflib/text.c index 59c6e3f4e8..e2adba1cdb 100644 --- a/gflib/text.c +++ b/gflib/text.c @@ -932,8 +932,9 @@ bool32 TextPrinterWaitAutoMode(struct TextPrinter *textPrinter) { struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields); - if (subStruct->autoScrollDelay == 49) + if (subStruct->autoScrollDelay == NUM_FRAMES_AUTO_SCROLL_DELAY) { + subStruct->autoScrollDelay = 0; return TRUE; } else @@ -943,21 +944,29 @@ bool32 TextPrinterWaitAutoMode(struct TextPrinter *textPrinter) } } +void SetResultWithButtonPress(bool32 *result) +{ + if (JOY_NEW(A_BUTTON | B_BUTTON)) + { + *result = TRUE; + PlaySE(SE_SELECT); + } +} + bool32 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter) { bool32 result = FALSE; - if (gTextFlags.autoScroll != 0) + if (gTextFlags.autoScroll != 0 || AUTO_SCROLL_TEXT) { result = TextPrinterWaitAutoMode(textPrinter); + + if (AUTO_SCROLL_TEXT) + SetResultWithButtonPress(&result); } else { TextPrinterDrawDownArrow(textPrinter); - if (JOY_NEW(A_BUTTON | B_BUTTON)) - { - result = TRUE; - PlaySE(SE_SELECT); - } + SetResultWithButtonPress(&result); } return result; } @@ -965,17 +974,16 @@ bool32 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter) bool32 TextPrinterWait(struct TextPrinter *textPrinter) { bool32 result = FALSE; - if (gTextFlags.autoScroll != 0) + if (gTextFlags.autoScroll != 0 || AUTO_SCROLL_TEXT) { result = TextPrinterWaitAutoMode(textPrinter); + + if (AUTO_SCROLL_TEXT) + SetResultWithButtonPress(&result); } else { - if (JOY_NEW(A_BUTTON | B_BUTTON)) - { - result = TRUE; - PlaySE(SE_SELECT); - } + SetResultWithButtonPress(&result); } return result; } diff --git a/graphics/battle_anims/backgrounds/new_electric_terrain.bin b/graphics/battle_anims/backgrounds/new_electric_terrain.bin new file mode 100644 index 0000000000..581c331ea0 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new_electric_terrain.bin differ diff --git a/graphics/battle_anims/backgrounds/new_electric_terrain.pal b/graphics/battle_anims/backgrounds/new_electric_terrain.pal new file mode 100644 index 0000000000..8741f4c6fa --- /dev/null +++ b/graphics/battle_anims/backgrounds/new_electric_terrain.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +237 28 36 +251 239 143 +247 228 69 +234 209 76 +222 186 48 +160 113 22 +255 255 16 +213 222 32 +255 255 255 +222 153 4 +222 171 55 +230 188 67 +247 210 69 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new_electric_terrain.png b/graphics/battle_anims/backgrounds/new_electric_terrain.png new file mode 100644 index 0000000000..5ad234b1d3 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new_electric_terrain.png differ diff --git a/graphics/battle_anims/backgrounds/new_grassy_terrain.bin b/graphics/battle_anims/backgrounds/new_grassy_terrain.bin new file mode 100644 index 0000000000..581c331ea0 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new_grassy_terrain.bin differ diff --git a/graphics/battle_anims/backgrounds/new_grassy_terrain.pal b/graphics/battle_anims/backgrounds/new_grassy_terrain.pal new file mode 100644 index 0000000000..8f90ee6e27 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new_grassy_terrain.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +237 28 36 +185 255 175 +142 243 140 +56 177 78 +78 214 109 +48 126 26 +44 177 68 +65 206 48 +8 248 0 +24 189 2 +90 189 77 +97 210 101 +137 226 120 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new_grassy_terrain.png b/graphics/battle_anims/backgrounds/new_grassy_terrain.png new file mode 100644 index 0000000000..ecc78fbaeb Binary files /dev/null and b/graphics/battle_anims/backgrounds/new_grassy_terrain.png differ diff --git a/graphics/battle_anims/backgrounds/new_misty_terrain.bin b/graphics/battle_anims/backgrounds/new_misty_terrain.bin new file mode 100644 index 0000000000..581c331ea0 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new_misty_terrain.bin differ diff --git a/graphics/battle_anims/backgrounds/new_misty_terrain.pal b/graphics/battle_anims/backgrounds/new_misty_terrain.pal new file mode 100644 index 0000000000..a47ed5a7e7 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new_misty_terrain.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +237 28 36 +253 242 242 +251 225 225 +255 210 226 +255 198 218 +255 181 206 +244 159 183 +247 187 187 +249 210 210 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new_misty_terrain.png b/graphics/battle_anims/backgrounds/new_misty_terrain.png new file mode 100644 index 0000000000..5e46aa138e Binary files /dev/null and b/graphics/battle_anims/backgrounds/new_misty_terrain.png differ diff --git a/graphics/battle_anims/backgrounds/new_psychic_terrain.bin b/graphics/battle_anims/backgrounds/new_psychic_terrain.bin new file mode 100644 index 0000000000..581c331ea0 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new_psychic_terrain.bin differ diff --git a/graphics/battle_anims/backgrounds/new_psychic_terrain.pal b/graphics/battle_anims/backgrounds/new_psychic_terrain.pal new file mode 100644 index 0000000000..dd492dc203 --- /dev/null +++ b/graphics/battle_anims/backgrounds/new_psychic_terrain.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +237 28 36 +213 206 232 +206 186 224 +203 168 232 +204 145 230 +192 87 219 +156 51 183 +111 36 130 +210 51 171 +247 4 107 +67 21 79 +203 113 225 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/battle_anims/backgrounds/new_psychic_terrain.png b/graphics/battle_anims/backgrounds/new_psychic_terrain.png new file mode 100644 index 0000000000..93b54a5e94 Binary files /dev/null and b/graphics/battle_anims/backgrounds/new_psychic_terrain.png differ diff --git a/graphics/battle_anims/backgrounds/swampswizzle.bin b/graphics/battle_anims/backgrounds/swampswizzle.bin new file mode 100644 index 0000000000..54864dd530 Binary files /dev/null and b/graphics/battle_anims/backgrounds/swampswizzle.bin differ diff --git a/graphics/battle_anims/backgrounds/swampswizzle.pal b/graphics/battle_anims/backgrounds/swampswizzle.pal new file mode 100644 index 0000000000..b739a386e7 --- /dev/null +++ b/graphics/battle_anims/backgrounds/swampswizzle.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 0 0 +140 214 132 +115 181 132 +115 181 99 +90 148 90 +90 148 74 +74 115 41 +74 107 57 +57 82 24 +49 82 41 +66 74 33 +33 57 16 +41 49 16 +49 41 8 +16 24 0 +140 222 173 diff --git a/graphics/battle_anims/backgrounds/swampswizzle.png b/graphics/battle_anims/backgrounds/swampswizzle.png new file mode 100644 index 0000000000..9b4a88cf0a Binary files /dev/null and b/graphics/battle_anims/backgrounds/swampswizzle.png differ diff --git a/graphics/battle_anims/sprites/beam.png b/graphics/battle_anims/sprites/beam.png new file mode 100644 index 0000000000..cce0a23a4c Binary files /dev/null and b/graphics/battle_anims/sprites/beam.png differ diff --git a/graphics/battle_anims/sprites/blood_moon.png b/graphics/battle_anims/sprites/blood_moon.png new file mode 100644 index 0000000000..014c7bd445 Binary files /dev/null and b/graphics/battle_anims/sprites/blood_moon.png differ diff --git a/graphics/battle_anims/sprites/purple_chain.png b/graphics/battle_anims/sprites/purple_chain.png new file mode 100644 index 0000000000..8c46b34aeb Binary files /dev/null and b/graphics/battle_anims/sprites/purple_chain.png differ diff --git a/graphics/battle_anims/sprites/red_explosion.png b/graphics/battle_anims/sprites/red_explosion.png new file mode 100644 index 0000000000..2c974db5c9 Binary files /dev/null and b/graphics/battle_anims/sprites/red_explosion.png differ diff --git a/graphics/battle_anims/sprites/spirit_shackle_arrow.png b/graphics/battle_anims/sprites/spirit_shackle_arrow.png index ff86f33d21..cc520e6b5d 100644 Binary files a/graphics/battle_anims/sprites/spirit_shackle_arrow.png and b/graphics/battle_anims/sprites/spirit_shackle_arrow.png differ diff --git a/graphics/battle_interface/enemy_mon_shadows_sized.png b/graphics/battle_interface/enemy_mon_shadows_sized.png new file mode 100644 index 0000000000..8d0e968852 Binary files /dev/null and b/graphics/battle_interface/enemy_mon_shadows_sized.png differ diff --git a/graphics/fonts/latin_normal.png b/graphics/fonts/latin_normal.png index ade914858f..d1de69d136 100644 Binary files a/graphics/fonts/latin_normal.png and b/graphics/fonts/latin_normal.png differ diff --git a/graphics/interface/category_icons.png b/graphics/interface/category_icons.png index 1c7d63c9eb..4e4a3cc2d9 100644 Binary files a/graphics/interface/category_icons.png and b/graphics/interface/category_icons.png differ diff --git a/graphics/pokemon/abomasnow/overworld.png b/graphics/pokemon/abomasnow/overworld.png index 8683a92d6b..f21cb467ab 100644 Binary files a/graphics/pokemon/abomasnow/overworld.png and b/graphics/pokemon/abomasnow/overworld.png differ diff --git a/graphics/pokemon/absol/mega/front.png b/graphics/pokemon/absol/mega/front.png index e7656154da..bc89ac2de0 100644 Binary files a/graphics/pokemon/absol/mega/front.png and b/graphics/pokemon/absol/mega/front.png differ diff --git a/graphics/pokemon/aerodactyl/mega/front.png b/graphics/pokemon/aerodactyl/mega/front.png index 86d51181f0..c581404a89 100644 Binary files a/graphics/pokemon/aerodactyl/mega/front.png and b/graphics/pokemon/aerodactyl/mega/front.png differ diff --git a/graphics/pokemon/aggron/overworld.png b/graphics/pokemon/aggron/overworld.png index a4f6770946..b24a1d9e4f 100644 Binary files a/graphics/pokemon/aggron/overworld.png and b/graphics/pokemon/aggron/overworld.png differ diff --git a/graphics/pokemon/alakazam/overworld.png b/graphics/pokemon/alakazam/overworld.png index 31b59e0fb5..67505a4079 100644 Binary files a/graphics/pokemon/alakazam/overworld.png and b/graphics/pokemon/alakazam/overworld.png differ diff --git a/graphics/pokemon/ambipom/overworld.png b/graphics/pokemon/ambipom/overworld.png index f8bcd74890..1f47b4d3e1 100644 Binary files a/graphics/pokemon/ambipom/overworld.png and b/graphics/pokemon/ambipom/overworld.png differ diff --git a/graphics/pokemon/annihilape/overworld.png b/graphics/pokemon/annihilape/overworld.png new file mode 100644 index 0000000000..22fad9680e Binary files /dev/null and b/graphics/pokemon/annihilape/overworld.png differ diff --git a/graphics/pokemon/annihilape/overworld_normal.pal b/graphics/pokemon/annihilape/overworld_normal.pal new file mode 100644 index 0000000000..73d9ee2e4e --- /dev/null +++ b/graphics/pokemon/annihilape/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +78 82 106 +252 252 253 +0 0 0 +196 199 216 +118 120 134 +163 165 177 +52 55 73 +129 45 84 +255 144 196 +140 20 41 +196 85 137 +215 27 60 +113 113 118 +78 82 106 +27 33 45 diff --git a/graphics/pokemon/annihilape/overworld_shiny.pal b/graphics/pokemon/annihilape/overworld_shiny.pal new file mode 100644 index 0000000000..1458a2779c --- /dev/null +++ b/graphics/pokemon/annihilape/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +78 82 106 +238 235 242 +0 0 0 +170 175 201 +93 108 175 +131 145 176 +36 79 29 +129 45 84 +255 144 196 +140 20 41 +196 85 137 +215 27 60 +78 82 106 +49 74 117 +25 18 61 diff --git a/graphics/pokemon/arboliva/overworld.png b/graphics/pokemon/arboliva/overworld.png new file mode 100644 index 0000000000..80f5ca4352 Binary files /dev/null and b/graphics/pokemon/arboliva/overworld.png differ diff --git a/graphics/pokemon/arboliva/overworld_normal.pal b/graphics/pokemon/arboliva/overworld_normal.pal new file mode 100644 index 0000000000..e8420d615a --- /dev/null +++ b/graphics/pokemon/arboliva/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +101 201 58 +61 130 49 +34 62 30 +190 194 173 +253 255 244 +83 97 78 +153 224 73 +55 19 30 +206 131 81 +95 37 58 +140 60 80 +169 79 52 +83 44 34 +0 0 0 diff --git a/graphics/pokemon/arboliva/overworld_shiny.pal b/graphics/pokemon/arboliva/overworld_shiny.pal new file mode 100644 index 0000000000..38ecac52f4 --- /dev/null +++ b/graphics/pokemon/arboliva/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +44 141 56 +45 103 45 +22 49 17 +198 201 130 +251 255 178 +116 114 76 +184 230 77 +21 22 32 +195 157 84 +43 36 53 +67 56 84 +155 117 55 +95 71 33 +0 0 0 diff --git a/graphics/pokemon/archaludon/overworld.png b/graphics/pokemon/archaludon/overworld.png new file mode 100644 index 0000000000..d3409dae4d Binary files /dev/null and b/graphics/pokemon/archaludon/overworld.png differ diff --git a/graphics/pokemon/archaludon/overworld_normal.pal b/graphics/pokemon/archaludon/overworld_normal.pal new file mode 100644 index 0000000000..ed77ca1798 --- /dev/null +++ b/graphics/pokemon/archaludon/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +149 49 49 +228 76 77 +181 59 59 +80 76 78 +243 242 244 +239 239 134 +78 75 174 +30 29 70 +189 188 186 +193 178 99 +52 50 114 +99 108 39 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/archaludon/overworld_shiny.pal b/graphics/pokemon/archaludon/overworld_shiny.pal new file mode 100644 index 0000000000..4983eea061 --- /dev/null +++ b/graphics/pokemon/archaludon/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +147 146 142 +222 219 225 +243 242 244 +43 51 60 +140 155 166 +255 193 125 +37 184 233 +26 99 136 +103 121 140 +255 153 40 +30 152 187 +104 54 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/archen/overworld.png b/graphics/pokemon/archen/overworld.png index e25f19ba7f..6dce497d6d 100644 Binary files a/graphics/pokemon/archen/overworld.png and b/graphics/pokemon/archen/overworld.png differ diff --git a/graphics/pokemon/archeops/overworld.png b/graphics/pokemon/archeops/overworld.png index 8a8a23a4ed..6d8faa6597 100644 Binary files a/graphics/pokemon/archeops/overworld.png and b/graphics/pokemon/archeops/overworld.png differ diff --git a/graphics/pokemon/arctibax/overworld.png b/graphics/pokemon/arctibax/overworld.png new file mode 100644 index 0000000000..f1f466e6af Binary files /dev/null and b/graphics/pokemon/arctibax/overworld.png differ diff --git a/graphics/pokemon/arctibax/overworld_normal.pal b/graphics/pokemon/arctibax/overworld_normal.pal new file mode 100644 index 0000000000..5ebb6d4058 --- /dev/null +++ b/graphics/pokemon/arctibax/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +65 69 90 +102 149 227 +75 122 154 +0 0 0 +188 239 248 +91 111 138 +218 145 35 +125 166 166 +125 166 166 +255 209 74 +92 131 133 +255 194 11 +182 120 29 +144 144 144 +0 0 0 diff --git a/graphics/pokemon/arctibax/overworld_shiny.pal b/graphics/pokemon/arctibax/overworld_shiny.pal new file mode 100644 index 0000000000..ffaa78ff3f --- /dev/null +++ b/graphics/pokemon/arctibax/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +68 95 116 +134 249 249 +67 194 175 +0 0 0 +188 239 248 +91 111 138 +218 145 35 +125 166 166 +188 239 248 +255 209 74 +92 131 133 +252 142 179 +201 100 144 +144 144 144 +0 0 0 diff --git a/graphics/pokemon/ariados/overworld.png b/graphics/pokemon/ariados/overworld.png index 4508799e71..293c50b623 100644 Binary files a/graphics/pokemon/ariados/overworld.png and b/graphics/pokemon/ariados/overworld.png differ diff --git a/graphics/pokemon/armaldo/overworld.png b/graphics/pokemon/armaldo/overworld.png index e270df81be..c7ed96fe1a 100644 Binary files a/graphics/pokemon/armaldo/overworld.png and b/graphics/pokemon/armaldo/overworld.png differ diff --git a/graphics/pokemon/armarouge/overworld.png b/graphics/pokemon/armarouge/overworld.png new file mode 100644 index 0000000000..6b39af4e83 Binary files /dev/null and b/graphics/pokemon/armarouge/overworld.png differ diff --git a/graphics/pokemon/armarouge/overworld_normal.pal b/graphics/pokemon/armarouge/overworld_normal.pal new file mode 100644 index 0000000000..181cf1e217 --- /dev/null +++ b/graphics/pokemon/armarouge/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +124 42 41 +228 34 18 +232 83 44 +239 228 48 +230 140 184 +221 183 7 +0 0 0 +52 51 50 +95 86 83 +221 183 7 +27 33 34 +189 28 15 +232 232 248 +239 228 48 +117 97 4 diff --git a/graphics/pokemon/armarouge/overworld_shiny.pal b/graphics/pokemon/armarouge/overworld_shiny.pal new file mode 100644 index 0000000000..4f93fc5250 --- /dev/null +++ b/graphics/pokemon/armarouge/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +124 42 41 +228 34 18 +232 83 44 +239 228 48 +230 140 184 +221 183 7 +0 0 0 +52 51 50 +95 86 83 +146 173 218 +27 33 34 +189 28 15 +232 232 248 +177 196 229 +117 97 4 diff --git a/graphics/pokemon/articuno/galarian/overworld.png b/graphics/pokemon/articuno/galarian/overworld.png index 734f4802d9..51e46babdb 100644 Binary files a/graphics/pokemon/articuno/galarian/overworld.png and b/graphics/pokemon/articuno/galarian/overworld.png differ diff --git a/graphics/pokemon/articuno/galarian/overworld_normal.pal b/graphics/pokemon/articuno/galarian/overworld_normal.pal index 4bf32062c4..a341d1c098 100644 --- a/graphics/pokemon/articuno/galarian/overworld_normal.pal +++ b/graphics/pokemon/articuno/galarian/overworld_normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 60 184 151 0 0 0 -21 12 31 -0 0 0 +120 200 248 +160 224 248 102 69 138 212 190 233 149 111 190 41 28 44 -233 232 233 +232 204 232 190 163 198 162 126 172 -120 200 248 -160 224 248 +203 181 209 +255 255 255 56 56 56 24 24 24 -15 15 15 +0 0 0 diff --git a/graphics/pokemon/articuno/galarian/overworld_shiny.pal b/graphics/pokemon/articuno/galarian/overworld_shiny.pal index 4bf32062c4..590f0cc88a 100644 --- a/graphics/pokemon/articuno/galarian/overworld_shiny.pal +++ b/graphics/pokemon/articuno/galarian/overworld_shiny.pal @@ -3,17 +3,17 @@ JASC-PAL 16 60 184 151 0 0 0 -21 12 31 -0 0 0 -102 69 138 -212 190 233 -149 111 190 +79 185 255 +110 216 255 +40 64 128 +96 144 216 +40 96 184 41 28 44 -233 232 233 -190 163 198 -162 126 172 -120 200 248 -160 224 248 -56 56 56 -24 24 24 -15 15 15 +153 211 247 +104 192 248 +83 156 230 +179 226 255 +227 248 255 +224 240 255 +181 209 230 +255 255 255 diff --git a/graphics/pokemon/articuno/overworld.png b/graphics/pokemon/articuno/overworld.png index e5e101e259..6bf38e18a1 100644 Binary files a/graphics/pokemon/articuno/overworld.png and b/graphics/pokemon/articuno/overworld.png differ diff --git a/graphics/pokemon/azumarill/overworld.png b/graphics/pokemon/azumarill/overworld.png index b2aa9487e5..90af0b3239 100644 Binary files a/graphics/pokemon/azumarill/overworld.png and b/graphics/pokemon/azumarill/overworld.png differ diff --git a/graphics/pokemon/barboach/overworld.png b/graphics/pokemon/barboach/overworld.png index 2cc66dfe63..7a5b6e1653 100644 Binary files a/graphics/pokemon/barboach/overworld.png and b/graphics/pokemon/barboach/overworld.png differ diff --git a/graphics/pokemon/basculin/blue_striped/overworld.png b/graphics/pokemon/basculin/blue_striped/overworld.png index b8f0a34583..b900662eaf 100644 Binary files a/graphics/pokemon/basculin/blue_striped/overworld.png and b/graphics/pokemon/basculin/blue_striped/overworld.png differ diff --git a/graphics/pokemon/baxcalibur/overworld.png b/graphics/pokemon/baxcalibur/overworld.png new file mode 100644 index 0000000000..48791f9f08 Binary files /dev/null and b/graphics/pokemon/baxcalibur/overworld.png differ diff --git a/graphics/pokemon/baxcalibur/overworld_normal.pal b/graphics/pokemon/baxcalibur/overworld_normal.pal new file mode 100644 index 0000000000..c031cec49d --- /dev/null +++ b/graphics/pokemon/baxcalibur/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +29 36 44 +85 185 157 +67 91 92 +57 115 90 +163 225 231 +110 140 166 +0 0 0 +247 198 0 +126 108 37 +60 56 57 +101 20 32 +101 20 32 +249 57 57 +160 184 200 +232 232 248 diff --git a/graphics/pokemon/baxcalibur/overworld_shiny.pal b/graphics/pokemon/baxcalibur/overworld_shiny.pal new file mode 100644 index 0000000000..fc9345f2a6 --- /dev/null +++ b/graphics/pokemon/baxcalibur/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +12 17 16 +187 230 226 +64 109 121 +46 95 110 +100 192 198 +87 128 130 +0 0 0 +247 198 0 +126 108 37 +46 48 48 +200 28 139 +231 82 179 +231 82 179 +152 183 185 +232 232 248 diff --git a/graphics/pokemon/bayleef/overworld.png b/graphics/pokemon/bayleef/overworld.png index f34c8ba5ea..da3fe423b3 100644 Binary files a/graphics/pokemon/bayleef/overworld.png and b/graphics/pokemon/bayleef/overworld.png differ diff --git a/graphics/pokemon/bellibolt/overworld.png b/graphics/pokemon/bellibolt/overworld.png new file mode 100644 index 0000000000..eeae01c050 Binary files /dev/null and b/graphics/pokemon/bellibolt/overworld.png differ diff --git a/graphics/pokemon/bellibolt/overworld_normal.pal b/graphics/pokemon/bellibolt/overworld_normal.pal new file mode 100644 index 0000000000..a7125b80db --- /dev/null +++ b/graphics/pokemon/bellibolt/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +6 84 64 +150 150 192 +164 110 65 +228 167 83 +242 229 85 +232 232 248 +176 176 208 +27 171 141 +0 0 0 +242 229 85 +33 115 101 +91 83 77 +128 119 106 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/bellibolt/overworld_shiny.pal b/graphics/pokemon/bellibolt/overworld_shiny.pal new file mode 100644 index 0000000000..97f5f3c3cd --- /dev/null +++ b/graphics/pokemon/bellibolt/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +105 91 35 +150 150 192 +171 75 73 +255 127 109 +242 229 85 +232 232 248 +176 176 208 +251 253 78 +0 0 0 +255 127 109 +170 155 51 +91 83 77 +128 119 106 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/bibarel/overworld.png b/graphics/pokemon/bibarel/overworld.png index 99e3de968e..f5751466a9 100644 Binary files a/graphics/pokemon/bibarel/overworld.png and b/graphics/pokemon/bibarel/overworld.png differ diff --git a/graphics/pokemon/blastoise/overworld.png b/graphics/pokemon/blastoise/overworld.png index 80d48304a6..2729e8bcfb 100644 Binary files a/graphics/pokemon/blastoise/overworld.png and b/graphics/pokemon/blastoise/overworld.png differ diff --git a/graphics/pokemon/blitzle/overworld.png b/graphics/pokemon/blitzle/overworld.png index 09a594f17b..67c7ae568e 100644 Binary files a/graphics/pokemon/blitzle/overworld.png and b/graphics/pokemon/blitzle/overworld.png differ diff --git a/graphics/pokemon/blitzle/overworld_normal.pal b/graphics/pokemon/blitzle/overworld_normal.pal index cd08b136eb..1dfabc67aa 100644 --- a/graphics/pokemon/blitzle/overworld_normal.pal +++ b/graphics/pokemon/blitzle/overworld_normal.pal @@ -10,7 +10,7 @@ JASC-PAL 0 0 0 200 200 200 0 168 216 -0 0 0 +248 224 88 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/blitzle/overworld_shiny.pal b/graphics/pokemon/blitzle/overworld_shiny.pal index 422cd57da4..56c8507e85 100644 --- a/graphics/pokemon/blitzle/overworld_shiny.pal +++ b/graphics/pokemon/blitzle/overworld_shiny.pal @@ -10,7 +10,7 @@ JASC-PAL 0 0 0 200 200 200 24 232 104 -0 0 0 +248 224 88 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/bombirdier/front.png b/graphics/pokemon/bombirdier/front.png index 97159715f2..b8aa83644b 100644 Binary files a/graphics/pokemon/bombirdier/front.png and b/graphics/pokemon/bombirdier/front.png differ diff --git a/graphics/pokemon/bombirdier/overworld.png b/graphics/pokemon/bombirdier/overworld.png new file mode 100644 index 0000000000..ca655b7a95 Binary files /dev/null and b/graphics/pokemon/bombirdier/overworld.png differ diff --git a/graphics/pokemon/bombirdier/overworld_normal.pal b/graphics/pokemon/bombirdier/overworld_normal.pal new file mode 100644 index 0000000000..fa558344ee --- /dev/null +++ b/graphics/pokemon/bombirdier/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +15 15 15 +69 60 65 +80 29 37 +102 91 96 +239 227 225 +185 170 175 +147 125 133 +123 130 123 +255 251 255 +198 198 204 +77 74 75 +80 29 37 +153 62 73 +232 232 248 +230 76 98 diff --git a/graphics/pokemon/bombirdier/overworld_shiny.pal b/graphics/pokemon/bombirdier/overworld_shiny.pal new file mode 100644 index 0000000000..d20304edc0 --- /dev/null +++ b/graphics/pokemon/bombirdier/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +15 15 15 +74 57 66 +52 41 48 +102 91 96 +239 227 225 +185 170 175 +147 125 133 +123 130 123 +255 251 255 +198 198 204 +160 74 85 +84 81 81 +136 134 133 +232 232 248 +171 167 168 diff --git a/graphics/pokemon/bounsweet/back.png b/graphics/pokemon/bounsweet/back.png index cd2a5401b5..c6ddb69f5d 100644 Binary files a/graphics/pokemon/bounsweet/back.png and b/graphics/pokemon/bounsweet/back.png differ diff --git a/graphics/pokemon/bounsweet/overworld.png b/graphics/pokemon/bounsweet/overworld.png index b3920bd8f2..c64dd42ad1 100644 Binary files a/graphics/pokemon/bounsweet/overworld.png and b/graphics/pokemon/bounsweet/overworld.png differ diff --git a/graphics/pokemon/bounsweet/overworld_shiny.pal b/graphics/pokemon/bounsweet/overworld_shiny.pal index c97f75961d..769d9abd9e 100644 --- a/graphics/pokemon/bounsweet/overworld_shiny.pal +++ b/graphics/pokemon/bounsweet/overworld_shiny.pal @@ -2,11 +2,11 @@ JASC-PAL 0100 16 255 255 255 -225 232 232 +247 240 184 216 192 248 232 200 0 160 128 240 -136 153 149 +200 192 128 224 104 128 200 112 152 176 64 104 diff --git a/graphics/pokemon/brambleghast/overworld.png b/graphics/pokemon/brambleghast/overworld.png new file mode 100644 index 0000000000..652f7523f4 Binary files /dev/null and b/graphics/pokemon/brambleghast/overworld.png differ diff --git a/graphics/pokemon/brambleghast/overworld_normal.pal b/graphics/pokemon/brambleghast/overworld_normal.pal new file mode 100644 index 0000000000..a2f87081e7 --- /dev/null +++ b/graphics/pokemon/brambleghast/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +91 79 91 +134 108 134 +192 159 186 +0 0 0 +66 43 32 +203 178 107 +156 125 85 +103 44 48 +173 105 66 +132 73 55 +21 21 21 +255 79 34 +156 125 85 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/brambleghast/overworld_shiny.pal b/graphics/pokemon/brambleghast/overworld_shiny.pal new file mode 100644 index 0000000000..8250de6ec1 --- /dev/null +++ b/graphics/pokemon/brambleghast/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +91 79 91 +134 108 134 +192 159 186 +0 0 0 +91 88 68 +219 216 181 +160 155 126 +71 58 39 +186 160 105 +129 111 73 +21 21 21 +243 179 139 +0 0 0 +71 58 39 +0 0 0 diff --git a/graphics/pokemon/bramblin/overworld.png b/graphics/pokemon/bramblin/overworld.png new file mode 100644 index 0000000000..92a340427a Binary files /dev/null and b/graphics/pokemon/bramblin/overworld.png differ diff --git a/graphics/pokemon/bramblin/overworld_normal.pal b/graphics/pokemon/bramblin/overworld_normal.pal new file mode 100644 index 0000000000..7e830e339e --- /dev/null +++ b/graphics/pokemon/bramblin/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +97 68 39 +204 164 102 +176 140 85 +21 21 21 +210 117 83 +191 89 60 +126 58 39 +75 58 52 +107 83 75 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/bramblin/overworld_shiny.pal b/graphics/pokemon/bramblin/overworld_shiny.pal new file mode 100644 index 0000000000..c37c547ffb --- /dev/null +++ b/graphics/pokemon/bramblin/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +121 118 77 +214 209 157 +159 155 104 +21 21 21 +210 117 83 +191 89 60 +126 58 39 +87 96 60 +113 125 76 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/brute_bonnet/overworld.png b/graphics/pokemon/brute_bonnet/overworld.png new file mode 100644 index 0000000000..14fe5e2f3c Binary files /dev/null and b/graphics/pokemon/brute_bonnet/overworld.png differ diff --git a/graphics/pokemon/brute_bonnet/overworld_normal.pal b/graphics/pokemon/brute_bonnet/overworld_normal.pal new file mode 100644 index 0000000000..64d07618a9 --- /dev/null +++ b/graphics/pokemon/brute_bonnet/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +107 70 62 +218 225 208 +94 98 87 +132 41 42 +227 63 70 +190 197 184 +178 49 55 +95 134 103 +130 212 128 +219 217 113 +255 172 205 +178 49 55 +222 139 164 +136 149 125 diff --git a/graphics/pokemon/brute_bonnet/overworld_shiny.pal b/graphics/pokemon/brute_bonnet/overworld_shiny.pal new file mode 100644 index 0000000000..1e229eb10b --- /dev/null +++ b/graphics/pokemon/brute_bonnet/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +64 60 56 +208 200 168 +136 112 88 +56 48 104 +112 80 216 +160 152 120 +80 64 160 +95 134 103 +130 212 128 +219 217 113 +216 80 136 +178 49 55 +178 49 55 +136 149 125 diff --git a/graphics/pokemon/bruxish/overworld.png b/graphics/pokemon/bruxish/overworld.png index 18b2325a80..04757426e6 100644 Binary files a/graphics/pokemon/bruxish/overworld.png and b/graphics/pokemon/bruxish/overworld.png differ diff --git a/graphics/pokemon/bruxish/overworld_shiny.pal b/graphics/pokemon/bruxish/overworld_shiny.pal index 624b47c64a..7de5796528 100644 --- a/graphics/pokemon/bruxish/overworld_shiny.pal +++ b/graphics/pokemon/bruxish/overworld_shiny.pal @@ -5,13 +5,13 @@ JASC-PAL 248 244 244 232 208 136 225 220 64 -224 216 208 +248 248 248 196 203 194 200 160 80 232 56 40 104 208 152 59 105 101 -140 82 158 +56 160 104 75 74 26 56 160 104 105 44 76 diff --git a/graphics/pokemon/capsakid/overworld.png b/graphics/pokemon/capsakid/overworld.png new file mode 100644 index 0000000000..9cf563f6a0 Binary files /dev/null and b/graphics/pokemon/capsakid/overworld.png differ diff --git a/graphics/pokemon/capsakid/overworld_normal.pal b/graphics/pokemon/capsakid/overworld_normal.pal new file mode 100644 index 0000000000..90f5ea334d --- /dev/null +++ b/graphics/pokemon/capsakid/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +36 72 40 +15 15 15 +240 251 227 +0 0 0 +166 180 150 +113 131 92 +77 145 79 +121 185 123 +62 117 63 +46 48 47 +255 145 21 +63 154 95 +47 104 60 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/capsakid/overworld_shiny.pal b/graphics/pokemon/capsakid/overworld_shiny.pal new file mode 100644 index 0000000000..aeaff8b7ff --- /dev/null +++ b/graphics/pokemon/capsakid/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +49 58 89 +15 15 15 +240 251 227 +0 0 0 +166 180 150 +113 131 92 +166 152 70 +236 240 79 +85 71 21 +46 48 47 +255 145 21 +99 161 158 +73 107 134 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/celebi/overworld.png b/graphics/pokemon/celebi/overworld.png index 95d372831a..cea230c8e2 100644 Binary files a/graphics/pokemon/celebi/overworld.png and b/graphics/pokemon/celebi/overworld.png differ diff --git a/graphics/pokemon/ceruledge/overworld.png b/graphics/pokemon/ceruledge/overworld.png new file mode 100644 index 0000000000..831b380fcc Binary files /dev/null and b/graphics/pokemon/ceruledge/overworld.png differ diff --git a/graphics/pokemon/ceruledge/overworld_normal.pal b/graphics/pokemon/ceruledge/overworld_normal.pal new file mode 100644 index 0000000000..afec9a2dd4 --- /dev/null +++ b/graphics/pokemon/ceruledge/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +19 59 113 +146 173 218 +177 196 229 +100 137 198 +0 0 0 +104 111 176 +37 37 75 +14 23 39 +81 73 133 +177 119 176 +27 33 34 +177 196 229 +232 232 248 +52 51 50 +0 0 0 diff --git a/graphics/pokemon/ceruledge/overworld_shiny.pal b/graphics/pokemon/ceruledge/overworld_shiny.pal new file mode 100644 index 0000000000..86d05c4e5b --- /dev/null +++ b/graphics/pokemon/ceruledge/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +19 59 113 +146 173 218 +177 196 229 +100 137 198 +0 0 0 +104 111 176 +37 37 75 +14 23 39 +81 73 133 +177 119 176 +27 33 34 +239 228 48 +232 232 248 +52 51 50 +0 0 0 diff --git a/graphics/pokemon/cetitan/overworld.png b/graphics/pokemon/cetitan/overworld.png new file mode 100644 index 0000000000..c2b72bdc4c Binary files /dev/null and b/graphics/pokemon/cetitan/overworld.png differ diff --git a/graphics/pokemon/cetitan/overworld_normal.pal b/graphics/pokemon/cetitan/overworld_normal.pal new file mode 100644 index 0000000000..7d95a89e39 --- /dev/null +++ b/graphics/pokemon/cetitan/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +16 16 16 +250 250 250 +216 215 211 +168 115 143 +223 160 187 +0 0 0 +139 139 141 +187 196 196 +96 95 94 +96 95 94 +139 139 141 +64 64 64 +215 215 215 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/cetitan/overworld_shiny.pal b/graphics/pokemon/cetitan/overworld_shiny.pal new file mode 100644 index 0000000000..36b65af2b3 --- /dev/null +++ b/graphics/pokemon/cetitan/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +16 16 16 +81 81 98 +62 62 74 +234 73 55 +249 141 115 +0 0 0 +43 43 51 +170 170 170 +43 43 51 +139 139 141 +216 215 211 +23 23 28 +250 250 250 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/cetoddle/overworld.png b/graphics/pokemon/cetoddle/overworld.png new file mode 100644 index 0000000000..7f00f80008 Binary files /dev/null and b/graphics/pokemon/cetoddle/overworld.png differ diff --git a/graphics/pokemon/cetoddle/overworld_normal.pal b/graphics/pokemon/cetoddle/overworld_normal.pal new file mode 100644 index 0000000000..01c44975a9 --- /dev/null +++ b/graphics/pokemon/cetoddle/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +139 139 141 +216 215 211 +0 0 0 +250 250 250 +223 160 187 +168 115 143 +250 250 250 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/cetoddle/overworld_shiny.pal b/graphics/pokemon/cetoddle/overworld_shiny.pal new file mode 100644 index 0000000000..f9d80543eb --- /dev/null +++ b/graphics/pokemon/cetoddle/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +53 53 60 +132 141 147 +0 0 0 +183 188 191 +234 73 55 +192 53 37 +250 250 250 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/charcadet/overworld.png b/graphics/pokemon/charcadet/overworld.png new file mode 100644 index 0000000000..11b455ae58 Binary files /dev/null and b/graphics/pokemon/charcadet/overworld.png differ diff --git a/graphics/pokemon/charcadet/overworld_normal.pal b/graphics/pokemon/charcadet/overworld_normal.pal new file mode 100644 index 0000000000..22b7585a72 --- /dev/null +++ b/graphics/pokemon/charcadet/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +169 26 14 +71 11 5 +45 124 235 +232 83 44 +220 86 182 +228 34 18 +0 0 0 +134 55 55 +39 42 42 +179 74 75 +95 86 83 +230 136 11 +169 26 14 +232 232 248 +228 34 18 diff --git a/graphics/pokemon/charcadet/overworld_shiny.pal b/graphics/pokemon/charcadet/overworld_shiny.pal new file mode 100644 index 0000000000..b0cd695305 --- /dev/null +++ b/graphics/pokemon/charcadet/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +169 26 14 +71 11 5 +45 124 235 +232 83 44 +220 86 182 +228 34 18 +0 0 0 +134 55 55 +39 42 42 +179 74 75 +95 86 83 +230 136 11 +45 124 235 +232 232 248 +220 86 182 diff --git a/graphics/pokemon/charmeleon/overworld.png b/graphics/pokemon/charmeleon/overworld.png index 810d668356..4b7950d076 100644 Binary files a/graphics/pokemon/charmeleon/overworld.png and b/graphics/pokemon/charmeleon/overworld.png differ diff --git a/graphics/pokemon/cherrim/overworld.png b/graphics/pokemon/cherrim/overworld.png index 86585b240e..79ada542c2 100644 Binary files a/graphics/pokemon/cherrim/overworld.png and b/graphics/pokemon/cherrim/overworld.png differ diff --git a/graphics/pokemon/chi_yu/overworld.png b/graphics/pokemon/chi_yu/overworld.png new file mode 100644 index 0000000000..4a658f8c33 Binary files /dev/null and b/graphics/pokemon/chi_yu/overworld.png differ diff --git a/graphics/pokemon/chi_yu/overworld_normal.pal b/graphics/pokemon/chi_yu/overworld_normal.pal new file mode 100644 index 0000000000..6f4491d0c6 --- /dev/null +++ b/graphics/pokemon/chi_yu/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +160 32 16 +0 0 0 +244 52 47 +243 94 56 +240 167 85 +121 23 13 +252 245 155 +28 64 33 +108 19 6 +91 152 90 +131 184 132 +215 232 215 +232 232 248 +241 248 241 +72 116 71 diff --git a/graphics/pokemon/chi_yu/overworld_shiny.pal b/graphics/pokemon/chi_yu/overworld_shiny.pal new file mode 100644 index 0000000000..659d3fd812 --- /dev/null +++ b/graphics/pokemon/chi_yu/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +69 67 68 +0 0 0 +94 94 94 +0 192 249 +119 236 233 +48 46 47 +186 254 253 +28 64 33 +27 24 26 +91 152 90 +131 184 132 +215 232 215 +232 232 248 +241 248 241 +72 116 71 diff --git a/graphics/pokemon/chien_pao/overworld.png b/graphics/pokemon/chien_pao/overworld.png new file mode 100644 index 0000000000..4cead4f9bc Binary files /dev/null and b/graphics/pokemon/chien_pao/overworld.png differ diff --git a/graphics/pokemon/chien_pao/overworld_normal.pal b/graphics/pokemon/chien_pao/overworld_normal.pal new file mode 100644 index 0000000000..0a2a27289d --- /dev/null +++ b/graphics/pokemon/chien_pao/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +80 78 80 +247 247 247 +173 210 228 +125 155 178 +147 140 155 +0 0 0 +190 186 190 +83 120 138 +74 142 239 +232 232 248 +33 41 50 +71 83 97 +60 108 107 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/chien_pao/overworld_shiny.pal b/graphics/pokemon/chien_pao/overworld_shiny.pal new file mode 100644 index 0000000000..b688f15b6d --- /dev/null +++ b/graphics/pokemon/chien_pao/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +72 60 49 +162 143 126 +247 247 247 +190 186 190 +115 96 79 +0 0 0 +133 116 96 +147 140 155 +74 142 239 +232 232 248 +33 41 50 +71 83 97 +60 108 107 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/chinchou/overworld.png b/graphics/pokemon/chinchou/overworld.png index b552e544b7..65632b4528 100644 Binary files a/graphics/pokemon/chinchou/overworld.png and b/graphics/pokemon/chinchou/overworld.png differ diff --git a/graphics/pokemon/cinderace/gigantamax/back.png b/graphics/pokemon/cinderace/gigantamax/back.png index b9e6b813de..d07be68143 100644 Binary files a/graphics/pokemon/cinderace/gigantamax/back.png and b/graphics/pokemon/cinderace/gigantamax/back.png differ diff --git a/graphics/pokemon/clodsire/overworld.png b/graphics/pokemon/clodsire/overworld.png new file mode 100644 index 0000000000..7ffdd7a21e Binary files /dev/null and b/graphics/pokemon/clodsire/overworld.png differ diff --git a/graphics/pokemon/clodsire/overworld_normal.pal b/graphics/pokemon/clodsire/overworld_normal.pal new file mode 100644 index 0000000000..c7d36df32c --- /dev/null +++ b/graphics/pokemon/clodsire/overworld_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/overworld_shiny.pal b/graphics/pokemon/clodsire/overworld_shiny.pal new file mode 100644 index 0000000000..6b37341aaf --- /dev/null +++ b/graphics/pokemon/clodsire/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +152 208 160 +74 67 90 +127 116 143 +96 87 115 +46 40 44 +16 16 16 +160 158 197 +205 180 170 +40 36 32 +117 117 158 +77 63 72 +104 52 56 +176 88 104 +248 140 160 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/cloyster/overworld.png b/graphics/pokemon/cloyster/overworld.png index e01669bf69..6b17b2aedd 100644 Binary files a/graphics/pokemon/cloyster/overworld.png and b/graphics/pokemon/cloyster/overworld.png differ diff --git a/graphics/pokemon/combusken/back.png b/graphics/pokemon/combusken/back.png index 1385881535..3c966e68c4 100644 Binary files a/graphics/pokemon/combusken/back.png and b/graphics/pokemon/combusken/back.png differ diff --git a/graphics/pokemon/combusken/backf.png b/graphics/pokemon/combusken/backf.png index 06330c5300..87e46ef146 100644 Binary files a/graphics/pokemon/combusken/backf.png and b/graphics/pokemon/combusken/backf.png differ diff --git a/graphics/pokemon/combusken/shiny.pal b/graphics/pokemon/combusken/shiny.pal index 1395bd8536..cb95e50ccb 100644 --- a/graphics/pokemon/combusken/shiny.pal +++ b/graphics/pokemon/combusken/shiny.pal @@ -2,14 +2,14 @@ JASC-PAL 0100 16 152 208 160 -160 104 72 +120 37 17 24 24 24 -248 136 64 +165 39 59 80 48 32 168 112 8 248 192 88 248 240 144 -128 72 32 +79 12 12 248 248 248 104 104 112 216 216 200 diff --git a/graphics/pokemon/corphish/overworld.png b/graphics/pokemon/corphish/overworld.png index a930c891bd..c134bd7350 100644 Binary files a/graphics/pokemon/corphish/overworld.png and b/graphics/pokemon/corphish/overworld.png differ diff --git a/graphics/pokemon/corsola/overworld.png b/graphics/pokemon/corsola/overworld.png index 4b7131a846..ba7c1f0333 100644 Binary files a/graphics/pokemon/corsola/overworld.png and b/graphics/pokemon/corsola/overworld.png differ diff --git a/graphics/pokemon/crawdaunt/overworld.png b/graphics/pokemon/crawdaunt/overworld.png index 4f9acced44..a5b11f3485 100644 Binary files a/graphics/pokemon/crawdaunt/overworld.png and b/graphics/pokemon/crawdaunt/overworld.png differ diff --git a/graphics/pokemon/crobat/overworld.png b/graphics/pokemon/crobat/overworld.png index 28add5ba23..9fbaaf7e42 100644 Binary files a/graphics/pokemon/crobat/overworld.png and b/graphics/pokemon/crobat/overworld.png differ diff --git a/graphics/pokemon/crocalor/overworld.png b/graphics/pokemon/crocalor/overworld.png new file mode 100644 index 0000000000..7019b964b3 Binary files /dev/null and b/graphics/pokemon/crocalor/overworld.png differ diff --git a/graphics/pokemon/crocalor/overworld_normal.pal b/graphics/pokemon/crocalor/overworld_normal.pal new file mode 100644 index 0000000000..5a2611f996 --- /dev/null +++ b/graphics/pokemon/crocalor/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +234 139 11 +234 202 72 +255 0 16 +245 239 220 +247 85 49 +0 0 0 +162 61 49 +66 23 19 +184 180 166 +222 85 66 +124 119 99 +99 36 29 +41 40 41 +74 73 74 +41 40 41 diff --git a/graphics/pokemon/crocalor/overworld_shiny.pal b/graphics/pokemon/crocalor/overworld_shiny.pal new file mode 100644 index 0000000000..851a2e0687 --- /dev/null +++ b/graphics/pokemon/crocalor/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +234 139 11 +236 208 91 +255 0 16 +251 247 226 +247 85 49 +0 0 0 +197 20 121 +106 21 70 +185 175 164 +236 66 164 +100 81 60 +106 21 70 +106 21 70 +130 64 74 +62 26 33 diff --git a/graphics/pokemon/crustle/overworld_normal.pal b/graphics/pokemon/crustle/overworld_normal.pal index fe051f639a..8d988e808a 100644 --- a/graphics/pokemon/crustle/overworld_normal.pal +++ b/graphics/pokemon/crustle/overworld_normal.pal @@ -8,10 +8,10 @@ JASC-PAL 128 96 64 224 192 64 192 128 0 -229 229 247 96 32 0 -224 128 64 +229 229 247 192 96 64 +224 128 64 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/crustle/overworld_shiny.pal b/graphics/pokemon/crustle/overworld_shiny.pal index 3104d02aba..c1030a0ad3 100644 --- a/graphics/pokemon/crustle/overworld_shiny.pal +++ b/graphics/pokemon/crustle/overworld_shiny.pal @@ -8,10 +8,10 @@ JASC-PAL 96 88 80 176 192 72 48 40 24 -229 229 247 48 40 24 -136 152 72 -96 104 48 +229 229 247 +137 153 67 +179 206 83 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/cubone/overworld.png b/graphics/pokemon/cubone/overworld.png index 26802dc5ae..4de810c027 100644 Binary files a/graphics/pokemon/cubone/overworld.png and b/graphics/pokemon/cubone/overworld.png differ diff --git a/graphics/pokemon/cursola/front.png b/graphics/pokemon/cursola/front.png index 2e40363812..5dd4cea7de 100644 Binary files a/graphics/pokemon/cursola/front.png and b/graphics/pokemon/cursola/front.png differ diff --git a/graphics/pokemon/cursola/shiny.pal b/graphics/pokemon/cursola/shiny.pal index 552b1077fc..9259843950 100644 --- a/graphics/pokemon/cursola/shiny.pal +++ b/graphics/pokemon/cursola/shiny.pal @@ -2,16 +2,16 @@ JASC-PAL 0100 16 152 208 160 -184 184 184 +145 145 145 248 240 248 120 120 120 224 216 224 208 200 208 -144 136 144 +92 92 92 184 176 184 -224 96 144 +192 96 224 248 248 248 -248 160 192 +221 173 237 16 16 16 72 72 72 56 56 56 diff --git a/graphics/pokemon/cyclizar/overworld.png b/graphics/pokemon/cyclizar/overworld.png new file mode 100644 index 0000000000..8367387e8b Binary files /dev/null and b/graphics/pokemon/cyclizar/overworld.png differ diff --git a/graphics/pokemon/cyclizar/overworld_normal.pal b/graphics/pokemon/cyclizar/overworld_normal.pal new file mode 100644 index 0000000000..1724cd1ae0 --- /dev/null +++ b/graphics/pokemon/cyclizar/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +69 82 72 +52 64 60 +16 16 16 +227 234 218 +129 171 133 +1 6 12 +81 111 89 +200 124 100 +217 104 64 +95 127 106 +70 70 78 +51 52 57 +40 43 47 +0 0 0 diff --git a/graphics/pokemon/cyclizar/overworld_shiny.pal b/graphics/pokemon/cyclizar/overworld_shiny.pal new file mode 100644 index 0000000000..5bdb2b6c8d --- /dev/null +++ b/graphics/pokemon/cyclizar/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +248 238 187 +167 163 122 +16 16 16 +227 234 218 +138 138 112 +1 6 12 +97 95 71 +85 215 253 +3 177 228 +84 83 63 +70 70 78 +51 52 57 +40 43 47 +0 0 0 diff --git a/graphics/pokemon/dachsbun/overworld.png b/graphics/pokemon/dachsbun/overworld.png new file mode 100644 index 0000000000..6c045409ac Binary files /dev/null and b/graphics/pokemon/dachsbun/overworld.png differ diff --git a/graphics/pokemon/dachsbun/overworld_normal.pal b/graphics/pokemon/dachsbun/overworld_normal.pal new file mode 100644 index 0000000000..c81c373140 --- /dev/null +++ b/graphics/pokemon/dachsbun/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +164 107 45 +255 219 99 +247 177 74 +209 162 90 +203 140 69 +0 0 0 +62 41 36 +110 53 33 +203 140 69 +140 65 33 +203 93 47 +247 177 74 +176 72 47 +176 72 47 +232 232 248 diff --git a/graphics/pokemon/dachsbun/overworld_shiny.pal b/graphics/pokemon/dachsbun/overworld_shiny.pal new file mode 100644 index 0000000000..dc615d8801 --- /dev/null +++ b/graphics/pokemon/dachsbun/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +85 58 45 +219 198 187 +219 198 187 +197 164 146 +197 164 146 +0 0 0 +62 41 36 +132 71 53 +226 187 154 +162 87 66 +223 151 125 +199 154 118 +175 119 100 +223 151 125 +232 232 248 diff --git a/graphics/pokemon/darmanitan/galarian/overworld.png b/graphics/pokemon/darmanitan/galarian/overworld.png index dda43e6e07..f6d78555e5 100644 Binary files a/graphics/pokemon/darmanitan/galarian/overworld.png and b/graphics/pokemon/darmanitan/galarian/overworld.png differ diff --git a/graphics/pokemon/darmanitan/galarian/overworld_normal.pal b/graphics/pokemon/darmanitan/galarian/overworld_normal.pal index f573721897..2036748fc6 100644 --- a/graphics/pokemon/darmanitan/galarian/overworld_normal.pal +++ b/graphics/pokemon/darmanitan/galarian/overworld_normal.pal @@ -6,14 +6,14 @@ JASC-PAL 167 167 167 215 215 215 10 34 40 -93 188 210 +40 192 168 0 0 0 120 155 209 79 111 160 255 255 255 -10 10 10 -11 11 11 -12 12 12 -13 13 13 -14 14 14 -15 15 15 +255 255 255 +255 255 255 +255 255 255 +255 255 255 +255 255 255 +255 255 255 diff --git a/graphics/pokemon/darmanitan/galarian/overworld_shiny.pal b/graphics/pokemon/darmanitan/galarian/overworld_shiny.pal index f573721897..e61043b14e 100644 --- a/graphics/pokemon/darmanitan/galarian/overworld_shiny.pal +++ b/graphics/pokemon/darmanitan/galarian/overworld_shiny.pal @@ -6,14 +6,14 @@ JASC-PAL 167 167 167 215 215 215 10 34 40 -93 188 210 +72 160 216 0 0 0 -120 155 209 -79 111 160 +190 224 117 +74 105 37 +255 255 255 +255 255 255 +255 255 255 +255 255 255 +255 255 255 +255 255 255 255 255 255 -10 10 10 -11 11 11 -12 12 12 -13 13 13 -14 14 14 -15 15 15 diff --git a/graphics/pokemon/darumaka/galarian/back.png b/graphics/pokemon/darumaka/galarian/back.png index 94115f536a..8aef0d7756 100644 Binary files a/graphics/pokemon/darumaka/galarian/back.png and b/graphics/pokemon/darumaka/galarian/back.png differ diff --git a/graphics/pokemon/darumaka/galarian/overworld_shiny.pal b/graphics/pokemon/darumaka/galarian/overworld_shiny.pal index 44a066b5bc..409dc17fba 100644 --- a/graphics/pokemon/darumaka/galarian/overworld_shiny.pal +++ b/graphics/pokemon/darumaka/galarian/overworld_shiny.pal @@ -5,15 +5,15 @@ JASC-PAL 10 34 40 36 36 36 0 0 0 -93 188 210 +120 203 214 215 215 215 -56 134 152 -29 45 70 +32 146 160 +31 51 8 128 128 128 -120 155 209 -79 111 160 +182 212 119 +120 184 40 167 167 167 -55 72 127 +64 104 16 +255 255 255 +40 93 104 255 255 255 -80 108 152 -15 15 15 diff --git a/graphics/pokemon/darumaka/galarian/shiny.pal b/graphics/pokemon/darumaka/galarian/shiny.pal index 21bd015c8a..f7748fd8d4 100644 --- a/graphics/pokemon/darumaka/galarian/shiny.pal +++ b/graphics/pokemon/darumaka/galarian/shiny.pal @@ -2,11 +2,11 @@ JASC-PAL 0100 16 152 208 160 -40 104 96 +40 93 104 16 16 16 -40 192 168 -104 232 208 -32 160 136 +40 170 192 +104 218 232 +32 146 160 184 184 192 232 232 224 64 104 16 diff --git a/graphics/pokemon/dewott/overworld.png b/graphics/pokemon/dewott/overworld.png index 7f28592c77..a9c6cff302 100644 Binary files a/graphics/pokemon/dewott/overworld.png and b/graphics/pokemon/dewott/overworld.png differ diff --git a/graphics/pokemon/dewott/overworld_normal.pal b/graphics/pokemon/dewott/overworld_normal.pal index 3ef7077292..7b8a1ef4cb 100644 --- a/graphics/pokemon/dewott/overworld_normal.pal +++ b/graphics/pokemon/dewott/overworld_normal.pal @@ -5,15 +5,15 @@ JASC-PAL 41 88 105 0 0 0 32 139 148 -32 139 148 +112 112 112 82 189 189 49 49 49 74 74 74 -115 57 57 +197 148 41 250 247 240 82 189 189 46 56 92 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +177 113 132 +115 57 57 +36 43 71 +112 81 13 diff --git a/graphics/pokemon/dewott/overworld_shiny.pal b/graphics/pokemon/dewott/overworld_shiny.pal index 8c28ea7eda..2e3814fe22 100644 --- a/graphics/pokemon/dewott/overworld_shiny.pal +++ b/graphics/pokemon/dewott/overworld_shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -51 76 90 +32 88 72 0 0 0 64 176 152 -32 139 148 +92 92 92 80 208 184 49 49 49 74 74 74 -197 82 90 +204 163 173 250 247 240 82 189 189 -128 56 120 -0 0 0 -0 0 0 -0 0 0 -0 0 0 +79 61 97 +200 72 80 +120 24 24 +59 37 82 +120 64 80 diff --git a/graphics/pokemon/dialga/origin/overworld_shiny.pal b/graphics/pokemon/dialga/origin/overworld_shiny.pal new file mode 100644 index 0000000000..e6bfc48201 --- /dev/null +++ b/graphics/pokemon/dialga/origin/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +98 182 49 +0 0 0 +65 129 255 +189 32 16 +246 80 65 +57 121 180 +98 121 139 +32 64 106 +16 56 90 +24 64 106 +189 202 222 +32 89 148 +139 161 180 +156 210 246 +16 16 16 +24 40 49 diff --git a/graphics/pokemon/diancie/mega/back.png b/graphics/pokemon/diancie/mega/back.png index cb9a177a0d..3816c40d78 100644 Binary files a/graphics/pokemon/diancie/mega/back.png and b/graphics/pokemon/diancie/mega/back.png differ diff --git a/graphics/pokemon/diancie/mega/front.png b/graphics/pokemon/diancie/mega/front.png index ef48adeebd..73f34c79c9 100644 Binary files a/graphics/pokemon/diancie/mega/front.png and b/graphics/pokemon/diancie/mega/front.png differ diff --git a/graphics/pokemon/diancie/mega/normal.pal b/graphics/pokemon/diancie/mega/normal.pal index 0d9dd14457..d7bca64866 100644 --- a/graphics/pokemon/diancie/mega/normal.pal +++ b/graphics/pokemon/diancie/mega/normal.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -144 80 120 -16 16 16 -216 96 160 -248 200 216 -248 248 248 -232 160 176 -72 64 104 -168 160 208 -120 112 152 -224 40 72 -240 208 104 -224 216 224 -192 208 208 -112 136 136 -248 248 248 +89 80 89 +115 115 115 +166 58 112 +217 85 69 +255 229 102 +128 115 128 +217 87 152 +179 161 179 +242 242 242 +242 145 178 +24 24 24 +255 204 217 +227 219 224 +191 191 191 +255 249 251 diff --git a/graphics/pokemon/diancie/mega/shiny.pal b/graphics/pokemon/diancie/mega/shiny.pal index f221fb1d59..d69f1886bc 100644 --- a/graphics/pokemon/diancie/mega/shiny.pal +++ b/graphics/pokemon/diancie/mega/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -144 80 120 -16 16 16 -216 96 160 -248 200 216 -248 248 248 -232 160 176 -48 48 48 -136 136 136 -88 88 88 -224 40 72 -240 208 104 -224 216 224 -168 48 104 -112 40 72 -224 112 160 +62 60 64 +140 45 99 +166 58 112 +230 85 121 +255 229 102 +99 90 99 +217 87 152 +140 125 140 +254 92 155 +242 145 178 +24 24 24 +255 204 217 +194 174 189 +194 72 133 +232 220 228 diff --git a/graphics/pokemon/dipplin/overworld.png b/graphics/pokemon/dipplin/overworld.png new file mode 100644 index 0000000000..c9979bd06b Binary files /dev/null and b/graphics/pokemon/dipplin/overworld.png differ diff --git a/graphics/pokemon/dipplin/overworld_normal.pal b/graphics/pokemon/dipplin/overworld_normal.pal new file mode 100644 index 0000000000..7b2aec274b --- /dev/null +++ b/graphics/pokemon/dipplin/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +48 87 26 +144 205 109 +95 145 66 +94 80 2 +251 230 121 +217 185 6 +0 0 0 +17 17 17 +96 16 16 +149 32 32 +184 40 40 +224 72 64 +248 128 80 +30 54 16 +190 165 128 diff --git a/graphics/pokemon/dipplin/overworld_shiny.pal b/graphics/pokemon/dipplin/overworld_shiny.pal new file mode 100644 index 0000000000..9bbb434349 --- /dev/null +++ b/graphics/pokemon/dipplin/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +48 87 26 +144 205 109 +95 145 66 +94 80 2 +251 230 121 +217 185 6 +0 0 0 +17 17 17 +133 71 3 +213 137 2 +214 168 12 +253 204 23 +255 234 81 +172 44 21 +190 165 128 diff --git a/graphics/pokemon/doduo/overworld.png b/graphics/pokemon/doduo/overworld.png index 5877cb1e7b..17b5b68306 100644 Binary files a/graphics/pokemon/doduo/overworld.png and b/graphics/pokemon/doduo/overworld.png differ diff --git a/graphics/pokemon/dolliv/overworld.png b/graphics/pokemon/dolliv/overworld.png new file mode 100644 index 0000000000..a59c4f3757 Binary files /dev/null and b/graphics/pokemon/dolliv/overworld.png differ diff --git a/graphics/pokemon/dolliv/overworld_normal.pal b/graphics/pokemon/dolliv/overworld_normal.pal new file mode 100644 index 0000000000..617ee34e0e --- /dev/null +++ b/graphics/pokemon/dolliv/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +34 62 30 +101 201 58 +84 111 45 +69 147 55 +191 209 63 +143 150 65 +153 224 73 +182 202 151 +83 97 78 +253 255 244 +15 15 15 +232 232 248 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/dolliv/overworld_shiny.pal b/graphics/pokemon/dolliv/overworld_shiny.pal new file mode 100644 index 0000000000..7a07119831 --- /dev/null +++ b/graphics/pokemon/dolliv/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +17 33 12 +47 83 39 +30 17 27 +32 65 23 +97 54 67 +56 33 50 +71 109 62 +177 182 86 +66 68 30 +198 201 130 +15 15 15 +232 232 248 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/dondozo/overworld.png b/graphics/pokemon/dondozo/overworld.png new file mode 100644 index 0000000000..e2a80f514a Binary files /dev/null and b/graphics/pokemon/dondozo/overworld.png differ diff --git a/graphics/pokemon/dondozo/overworld_normal.pal b/graphics/pokemon/dondozo/overworld_normal.pal new file mode 100644 index 0000000000..c29e5725ce --- /dev/null +++ b/graphics/pokemon/dondozo/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +16 125 189 +132 218 255 +83 92 106 +224 224 224 +192 181 189 +7 20 41 +19 177 250 +90 206 255 +0 0 0 +21 55 113 +224 224 224 +14 38 78 +28 73 149 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/dondozo/overworld_shiny.pal b/graphics/pokemon/dondozo/overworld_shiny.pal new file mode 100644 index 0000000000..a0d5a789c8 --- /dev/null +++ b/graphics/pokemon/dondozo/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +181 175 72 +255 253 115 +83 92 106 +224 224 224 +192 181 189 +7 20 41 +253 241 108 +255 247 138 +0 0 0 +172 172 172 +255 255 255 +109 109 109 +230 230 230 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/donphan/overworld.png b/graphics/pokemon/donphan/overworld.png index e6afdd6f2f..b0b62b3b39 100644 Binary files a/graphics/pokemon/donphan/overworld.png and b/graphics/pokemon/donphan/overworld.png differ diff --git a/graphics/pokemon/dudunsparce/overworld.png b/graphics/pokemon/dudunsparce/overworld.png new file mode 100644 index 0000000000..98e582a527 Binary files /dev/null and b/graphics/pokemon/dudunsparce/overworld.png differ diff --git a/graphics/pokemon/dudunsparce/overworld_normal.pal b/graphics/pokemon/dudunsparce/overworld_normal.pal new file mode 100644 index 0000000000..6fed29243e --- /dev/null +++ b/graphics/pokemon/dudunsparce/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +24 56 72 +89 205 219 +49 143 157 +206 184 71 +84 61 31 +242 229 113 +192 168 0 +173 143 56 +90 98 115 +253 242 194 +246 255 255 +161 194 221 +202 216 236 +0 0 0 +229 185 119 diff --git a/graphics/pokemon/dudunsparce/overworld_shiny.pal b/graphics/pokemon/dudunsparce/overworld_shiny.pal new file mode 100644 index 0000000000..ff0163cbdf --- /dev/null +++ b/graphics/pokemon/dudunsparce/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +73 28 61 +229 153 194 +215 78 164 +206 184 71 +84 61 31 +242 229 113 +192 168 0 +173 143 56 +90 98 115 +253 242 194 +246 255 255 +161 194 221 +202 216 236 +0 0 0 +229 185 119 diff --git a/graphics/pokemon/dudunsparce/three_segment/overworld.png b/graphics/pokemon/dudunsparce/three_segment/overworld.png new file mode 100644 index 0000000000..9d84e7f338 Binary files /dev/null and b/graphics/pokemon/dudunsparce/three_segment/overworld.png differ diff --git a/graphics/pokemon/dudunsparce/three_segment/overworld_normal.pal b/graphics/pokemon/dudunsparce/three_segment/overworld_normal.pal new file mode 100644 index 0000000000..00ea281c13 --- /dev/null +++ b/graphics/pokemon/dudunsparce/three_segment/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +24 56 72 +89 205 219 +49 143 157 +206 184 71 +84 61 31 +242 229 113 +192 168 0 +173 143 56 +253 242 194 +90 98 115 +246 255 255 +161 194 221 +202 216 236 +0 0 0 +229 185 119 diff --git a/graphics/pokemon/dudunsparce/three_segment/overworld_shiny.pal b/graphics/pokemon/dudunsparce/three_segment/overworld_shiny.pal new file mode 100644 index 0000000000..201d38a15d --- /dev/null +++ b/graphics/pokemon/dudunsparce/three_segment/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +73 28 61 +229 153 194 +215 78 164 +206 184 71 +84 61 31 +242 229 113 +192 168 0 +173 143 56 +253 242 194 +90 98 115 +246 255 255 +161 194 221 +202 216 236 +0 0 0 +229 185 119 diff --git a/graphics/pokemon/dusknoir/overworld.png b/graphics/pokemon/dusknoir/overworld.png index 6026e02e5b..38d00694cb 100644 Binary files a/graphics/pokemon/dusknoir/overworld.png and b/graphics/pokemon/dusknoir/overworld.png differ diff --git a/graphics/pokemon/dwebble/overworld.png b/graphics/pokemon/dwebble/overworld.png index fe33f3a71b..41e57f9a16 100644 Binary files a/graphics/pokemon/dwebble/overworld.png and b/graphics/pokemon/dwebble/overworld.png differ diff --git a/graphics/pokemon/electabuzz/overworld.png b/graphics/pokemon/electabuzz/overworld.png index 8eabb6c8ff..ce6a5a7883 100644 Binary files a/graphics/pokemon/electabuzz/overworld.png and b/graphics/pokemon/electabuzz/overworld.png differ diff --git a/graphics/pokemon/enamorus/overworld_shiny.pal b/graphics/pokemon/enamorus/overworld_shiny.pal new file mode 100644 index 0000000000..88fa42851f --- /dev/null +++ b/graphics/pokemon/enamorus/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +41 165 49 +0 0 0 +164 133 41 +230 117 156 +189 60 90 +172 72 82 +238 234 255 +32 36 32 +57 60 57 +205 202 222 +148 32 24 +255 198 57 +16 16 16 +246 85 139 +82 80 90 +115 48 57 diff --git a/graphics/pokemon/enamorus/therian/overworld_shiny.pal b/graphics/pokemon/enamorus/therian/overworld_shiny.pal new file mode 100644 index 0000000000..c799ddfb89 --- /dev/null +++ b/graphics/pokemon/enamorus/therian/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +0 0 0 +80 80 88 +118 50 58 +232 232 248 +200 200 216 +224 116 156 +174 74 87 +16 16 16 +243 46 46 +199 46 41 +147 33 30 +243 84 143 +187 62 94 +247 238 76 +255 197 60 +0 0 0 diff --git a/graphics/pokemon/escavalier/overworld.png b/graphics/pokemon/escavalier/overworld.png index 340131a534..deb3cb0738 100644 Binary files a/graphics/pokemon/escavalier/overworld.png and b/graphics/pokemon/escavalier/overworld.png differ diff --git a/graphics/pokemon/espathra/overworld.png b/graphics/pokemon/espathra/overworld.png new file mode 100644 index 0000000000..cd5feabf2a Binary files /dev/null and b/graphics/pokemon/espathra/overworld.png differ diff --git a/graphics/pokemon/espathra/overworld_normal.pal b/graphics/pokemon/espathra/overworld_normal.pal new file mode 100644 index 0000000000..6607d0ee9a --- /dev/null +++ b/graphics/pokemon/espathra/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +74 69 79 +64 48 48 +249 249 249 +0 0 0 +227 227 227 +190 164 225 +82 233 187 +147 116 171 +197 138 82 +121 82 30 +207 174 150 +241 219 197 +196 183 21 +255 252 96 +196 183 21 diff --git a/graphics/pokemon/espathra/overworld_shiny.pal b/graphics/pokemon/espathra/overworld_shiny.pal new file mode 100644 index 0000000000..5747724c55 --- /dev/null +++ b/graphics/pokemon/espathra/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +76 73 79 +80 64 58 +249 249 249 +0 0 0 +227 227 227 +190 164 225 +82 233 187 +147 116 171 +106 86 81 +80 64 58 +137 120 106 +131 124 122 +143 116 90 +193 159 140 +192 181 118 diff --git a/graphics/pokemon/espeon/overworld.png b/graphics/pokemon/espeon/overworld.png index 158ba055c9..91d6a4675c 100644 Binary files a/graphics/pokemon/espeon/overworld.png and b/graphics/pokemon/espeon/overworld.png differ diff --git a/graphics/pokemon/excadrill/overworld_shiny.pal b/graphics/pokemon/excadrill/overworld_shiny.pal index 4879340ef8..49918df388 100644 --- a/graphics/pokemon/excadrill/overworld_shiny.pal +++ b/graphics/pokemon/excadrill/overworld_shiny.pal @@ -8,7 +8,7 @@ JASC-PAL 176 64 96 152 152 192 75 81 113 -78 140 154 +60 91 97 78 140 154 5 5 5 201 206 220 diff --git a/graphics/pokemon/exeggcute/overworld.png b/graphics/pokemon/exeggcute/overworld.png index 002ffd5822..a6354272cb 100644 Binary files a/graphics/pokemon/exeggcute/overworld.png and b/graphics/pokemon/exeggcute/overworld.png differ diff --git a/graphics/pokemon/farfetchd/galarian/overworld.png b/graphics/pokemon/farfetchd/galarian/overworld.png index 343ece6bd6..bde1b5b7ec 100644 Binary files a/graphics/pokemon/farfetchd/galarian/overworld.png and b/graphics/pokemon/farfetchd/galarian/overworld.png differ diff --git a/graphics/pokemon/farfetchd/galarian/overworld_normal.pal b/graphics/pokemon/farfetchd/galarian/overworld_normal.pal index 0a555549b1..3df22685d9 100644 --- a/graphics/pokemon/farfetchd/galarian/overworld_normal.pal +++ b/graphics/pokemon/farfetchd/galarian/overworld_normal.pal @@ -10,7 +10,7 @@ JASC-PAL 238 234 255 49 89 41 255 202 49 -0 0 0 +213 210 197 65 117 57 57 48 49 82 68 65 diff --git a/graphics/pokemon/farfetchd/galarian/overworld_shiny.pal b/graphics/pokemon/farfetchd/galarian/overworld_shiny.pal index 0a555549b1..2d02e605e7 100644 --- a/graphics/pokemon/farfetchd/galarian/overworld_shiny.pal +++ b/graphics/pokemon/farfetchd/galarian/overworld_shiny.pal @@ -4,16 +4,16 @@ JASC-PAL 57 153 197 0 0 0 156 161 115 -180 174 156 +200 176 112 180 145 41 -115 93 90 +128 96 96 238 234 255 49 89 41 255 202 49 -0 0 0 -65 117 57 -57 48 49 -82 68 65 213 210 197 +65 117 57 +72 56 64 +96 72 80 +240 216 176 24 20 16 41 44 41 diff --git a/graphics/pokemon/farfetchd/overworld.png b/graphics/pokemon/farfetchd/overworld.png index 530741a873..46aec09764 100644 Binary files a/graphics/pokemon/farfetchd/overworld.png and b/graphics/pokemon/farfetchd/overworld.png differ diff --git a/graphics/pokemon/farigiraf/overworld.png b/graphics/pokemon/farigiraf/overworld.png new file mode 100644 index 0000000000..4713be6488 Binary files /dev/null and b/graphics/pokemon/farigiraf/overworld.png differ diff --git a/graphics/pokemon/farigiraf/overworld_normal.pal b/graphics/pokemon/farigiraf/overworld_normal.pal new file mode 100644 index 0000000000..383f2d1641 --- /dev/null +++ b/graphics/pokemon/farigiraf/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +44 44 43 +28 21 13 +0 0 0 +74 74 81 +76 68 75 +160 176 200 +243 239 154 +232 232 248 +203 196 123 +224 138 131 +243 239 154 +203 196 123 +145 85 90 +167 98 52 +244 142 81 diff --git a/graphics/pokemon/farigiraf/overworld_shiny.pal b/graphics/pokemon/farigiraf/overworld_shiny.pal new file mode 100644 index 0000000000..1dff28acb1 --- /dev/null +++ b/graphics/pokemon/farigiraf/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +40 43 46 +9 7 4 +0 0 0 +74 74 81 +40 38 36 +160 176 200 +243 239 154 +232 232 248 +203 196 123 +85 160 224 +186 243 240 +138 196 167 +34 119 189 +236 101 77 +236 101 77 diff --git a/graphics/pokemon/feraligatr/overworld.png b/graphics/pokemon/feraligatr/overworld.png index dc2f26ebe0..acb5cf02ce 100644 Binary files a/graphics/pokemon/feraligatr/overworld.png and b/graphics/pokemon/feraligatr/overworld.png differ diff --git a/graphics/pokemon/fezandipiti/overworld.png b/graphics/pokemon/fezandipiti/overworld.png new file mode 100644 index 0000000000..7648eca4d8 Binary files /dev/null and b/graphics/pokemon/fezandipiti/overworld.png differ diff --git a/graphics/pokemon/fezandipiti/overworld_normal.pal b/graphics/pokemon/fezandipiti/overworld_normal.pal new file mode 100644 index 0000000000..dabbbc6f21 --- /dev/null +++ b/graphics/pokemon/fezandipiti/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +203 170 16 +238 204 45 +0 0 0 +167 135 48 +61 59 58 +90 33 73 +146 57 119 +202 103 162 +118 61 41 +210 210 210 +192 78 22 +26 29 28 +254 254 254 +45 45 45 +69 37 29 diff --git a/graphics/pokemon/fezandipiti/overworld_shiny.pal b/graphics/pokemon/fezandipiti/overworld_shiny.pal new file mode 100644 index 0000000000..9d018f0c61 --- /dev/null +++ b/graphics/pokemon/fezandipiti/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +203 170 16 +238 204 45 +0 0 0 +167 135 48 +51 51 164 +90 33 73 +146 57 119 +202 103 162 +118 61 41 +210 210 210 +167 135 48 +23 24 47 +254 254 254 +56 56 56 +69 37 29 diff --git a/graphics/pokemon/fidough/overworld.png b/graphics/pokemon/fidough/overworld.png new file mode 100644 index 0000000000..c9ee80352b Binary files /dev/null and b/graphics/pokemon/fidough/overworld.png differ diff --git a/graphics/pokemon/fidough/overworld_normal.pal b/graphics/pokemon/fidough/overworld_normal.pal new file mode 100644 index 0000000000..cba45d45be --- /dev/null +++ b/graphics/pokemon/fidough/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +107 100 92 +247 226 117 +0 0 0 +205 182 70 +250 244 218 +225 219 171 +107 100 92 +232 232 248 +133 125 104 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/fidough/overworld_shiny.pal b/graphics/pokemon/fidough/overworld_shiny.pal new file mode 100644 index 0000000000..f2998a4028 --- /dev/null +++ b/graphics/pokemon/fidough/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +108 68 62 +243 210 54 +0 0 0 +202 176 53 +222 189 143 +167 130 101 +107 100 92 +232 232 248 +133 102 80 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/finizen/overworld.png b/graphics/pokemon/finizen/overworld.png new file mode 100644 index 0000000000..97507c58a5 Binary files /dev/null and b/graphics/pokemon/finizen/overworld.png differ diff --git a/graphics/pokemon/finizen/overworld_normal.pal b/graphics/pokemon/finizen/overworld_normal.pal new file mode 100644 index 0000000000..86eb8f57e1 --- /dev/null +++ b/graphics/pokemon/finizen/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +32 57 62 +82 202 219 +55 155 173 +0 0 0 +221 241 247 +33 97 107 +137 219 230 +163 179 182 +238 248 251 +66 178 255 +140 223 255 +65 132 146 +247 174 181 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/finizen/overworld_shiny.pal b/graphics/pokemon/finizen/overworld_shiny.pal new file mode 100644 index 0000000000..fb37b68476 --- /dev/null +++ b/graphics/pokemon/finizen/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +52 50 99 +169 171 239 +133 135 233 +0 0 0 +221 241 247 +91 93 155 +187 190 227 +163 179 182 +238 248 251 +66 178 255 +140 223 255 +65 132 146 +130 246 158 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/flaaffy/overworld.png b/graphics/pokemon/flaaffy/overworld.png index e13f4b7300..52218bb2fe 100644 Binary files a/graphics/pokemon/flaaffy/overworld.png and b/graphics/pokemon/flaaffy/overworld.png differ diff --git a/graphics/pokemon/flamigo/overworld.png b/graphics/pokemon/flamigo/overworld.png new file mode 100644 index 0000000000..6da6fc865b Binary files /dev/null and b/graphics/pokemon/flamigo/overworld.png differ diff --git a/graphics/pokemon/flamigo/overworld_normal.pal b/graphics/pokemon/flamigo/overworld_normal.pal new file mode 100644 index 0000000000..7280ddcfb7 --- /dev/null +++ b/graphics/pokemon/flamigo/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +142 68 92 +250 120 154 +252 144 173 +255 219 99 +251 242 244 +151 143 151 +98 40 52 +15 15 15 +77 66 69 +189 84 112 +146 125 65 +41 40 41 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/flamigo/overworld_shiny.pal b/graphics/pokemon/flamigo/overworld_shiny.pal new file mode 100644 index 0000000000..84abb07a88 --- /dev/null +++ b/graphics/pokemon/flamigo/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +119 95 98 +221 189 192 +240 206 211 +255 182 100 +251 242 244 +151 143 151 +102 66 87 +15 15 15 +77 66 69 +170 138 141 +147 99 64 +41 40 41 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/flareon/overworld.png b/graphics/pokemon/flareon/overworld.png index c32cab6f9d..df7ff81da9 100644 Binary files a/graphics/pokemon/flareon/overworld.png and b/graphics/pokemon/flareon/overworld.png differ diff --git a/graphics/pokemon/flittle/overworld.png b/graphics/pokemon/flittle/overworld.png new file mode 100644 index 0000000000..43195e6437 Binary files /dev/null and b/graphics/pokemon/flittle/overworld.png differ diff --git a/graphics/pokemon/flittle/overworld_normal.pal b/graphics/pokemon/flittle/overworld_normal.pal new file mode 100644 index 0000000000..bc988d7a6c --- /dev/null +++ b/graphics/pokemon/flittle/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +166 181 187 +81 92 106 +71 51 10 +231 235 237 +15 15 15 +255 209 28 +180 162 37 +132 119 28 +126 110 198 +86 68 157 +64 121 179 +204 72 165 +236 100 202 +175 90 5 +217 112 6 diff --git a/graphics/pokemon/flittle/overworld_shiny.pal b/graphics/pokemon/flittle/overworld_shiny.pal new file mode 100644 index 0000000000..bbc6af057a --- /dev/null +++ b/graphics/pokemon/flittle/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +166 181 187 +81 92 106 +71 51 10 +231 235 237 +15 15 15 +255 209 28 +180 162 37 +132 119 28 +126 110 198 +86 68 157 +64 121 179 +65 185 51 +130 245 90 +63 39 24 +109 67 41 diff --git a/graphics/pokemon/floatzel/overworld.png b/graphics/pokemon/floatzel/overworld.png index cd7c20372c..7c9cdc3f6e 100644 Binary files a/graphics/pokemon/floatzel/overworld.png and b/graphics/pokemon/floatzel/overworld.png differ diff --git a/graphics/pokemon/floragato/overworld.png b/graphics/pokemon/floragato/overworld.png new file mode 100644 index 0000000000..9eb6c1dc0b Binary files /dev/null and b/graphics/pokemon/floragato/overworld.png differ diff --git a/graphics/pokemon/floragato/overworld_normal.pal b/graphics/pokemon/floragato/overworld_normal.pal new file mode 100644 index 0000000000..c527ee749f --- /dev/null +++ b/graphics/pokemon/floragato/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +33 65 20 +79 151 57 +63 120 46 +214 239 192 +91 95 75 +167 171 148 +49 53 43 +41 97 47 +29 67 33 +232 232 248 +149 21 53 +211 56 103 +93 181 69 +16 37 18 diff --git a/graphics/pokemon/floragato/overworld_shiny.pal b/graphics/pokemon/floragato/overworld_shiny.pal new file mode 100644 index 0000000000..95ca72f2d6 --- /dev/null +++ b/graphics/pokemon/floragato/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +43 90 37 +93 181 69 +57 120 50 +221 245 146 +81 92 46 +154 191 85 +52 58 37 +52 85 74 +32 55 52 +232 232 248 +79 40 130 +125 85 193 +154 191 85 +27 39 36 diff --git a/graphics/pokemon/flutter_mane/overworld.png b/graphics/pokemon/flutter_mane/overworld.png new file mode 100644 index 0000000000..41690f8600 Binary files /dev/null and b/graphics/pokemon/flutter_mane/overworld.png differ diff --git a/graphics/pokemon/flutter_mane/overworld_normal.pal b/graphics/pokemon/flutter_mane/overworld_normal.pal new file mode 100644 index 0000000000..a950f0bf67 --- /dev/null +++ b/graphics/pokemon/flutter_mane/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +50 87 97 +79 138 153 +243 173 243 +0 0 0 +132 51 132 +79 138 153 +129 20 33 +115 185 175 +35 62 69 +197 62 82 +92 14 23 +31 30 31 +176 120 0 +224 176 40 +232 232 248 diff --git a/graphics/pokemon/flutter_mane/overworld_shiny.pal b/graphics/pokemon/flutter_mane/overworld_shiny.pal new file mode 100644 index 0000000000..f3b7812423 --- /dev/null +++ b/graphics/pokemon/flutter_mane/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +64 88 24 +156 176 84 +232 160 0 +0 0 0 +96 0 32 +159 159 159 +129 20 33 +191 191 191 +32 48 8 +197 62 82 +96 0 32 +31 30 31 +134 90 0 +224 176 40 +232 232 248 diff --git a/graphics/pokemon/flygon/overworld.png b/graphics/pokemon/flygon/overworld.png index eac77815f6..5232107f72 100644 Binary files a/graphics/pokemon/flygon/overworld.png and b/graphics/pokemon/flygon/overworld.png differ diff --git a/graphics/pokemon/frigibax/overworld.png b/graphics/pokemon/frigibax/overworld.png new file mode 100644 index 0000000000..c35ca5d73b Binary files /dev/null and b/graphics/pokemon/frigibax/overworld.png differ diff --git a/graphics/pokemon/frigibax/overworld_normal.pal b/graphics/pokemon/frigibax/overworld_normal.pal new file mode 100644 index 0000000000..98d280ca88 --- /dev/null +++ b/graphics/pokemon/frigibax/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +56 75 75 +0 0 0 +150 185 190 +98 150 157 +170 177 183 +249 216 0 +34 49 60 +222 223 222 +65 93 113 +175 155 10 +114 118 114 +194 231 233 +249 216 0 +175 155 10 +118 152 148 diff --git a/graphics/pokemon/frigibax/overworld_shiny.pal b/graphics/pokemon/frigibax/overworld_shiny.pal new file mode 100644 index 0000000000..4e67f23de1 --- /dev/null +++ b/graphics/pokemon/frigibax/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +52 74 64 +0 0 0 +150 185 190 +98 150 157 +170 177 183 +249 216 0 +34 49 60 +222 223 222 +75 114 106 +175 155 10 +114 118 114 +194 231 233 +255 179 230 +143 103 130 +118 152 148 diff --git a/graphics/pokemon/fuecoco/overworld.png b/graphics/pokemon/fuecoco/overworld.png new file mode 100644 index 0000000000..d478e0317f Binary files /dev/null and b/graphics/pokemon/fuecoco/overworld.png differ diff --git a/graphics/pokemon/fuecoco/overworld_normal.pal b/graphics/pokemon/fuecoco/overworld_normal.pal new file mode 100644 index 0000000000..9136a16bb8 --- /dev/null +++ b/graphics/pokemon/fuecoco/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +234 139 11 +236 230 100 +232 196 53 +0 0 0 +106 41 26 +239 79 61 +255 248 223 +137 55 31 +170 164 147 +0 0 0 +104 45 34 +81 88 103 +236 208 91 +55 60 70 +0 0 0 diff --git a/graphics/pokemon/fuecoco/overworld_shiny.pal b/graphics/pokemon/fuecoco/overworld_shiny.pal new file mode 100644 index 0000000000..430dd10f26 --- /dev/null +++ b/graphics/pokemon/fuecoco/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +234 139 11 +236 230 100 +232 196 53 +0 0 0 +142 28 94 +222 105 140 +255 248 223 +171 65 95 +170 164 147 +91 38 48 +106 21 70 +116 94 69 +236 208 91 +91 38 48 +0 0 0 diff --git a/graphics/pokemon/furret/overworld.png b/graphics/pokemon/furret/overworld.png index de8beb8516..aa3a72cb4e 100644 Binary files a/graphics/pokemon/furret/overworld.png and b/graphics/pokemon/furret/overworld.png differ diff --git a/graphics/pokemon/garganacl/back.png b/graphics/pokemon/garganacl/back.png index d8590c6ce0..09b120f72f 100644 Binary files a/graphics/pokemon/garganacl/back.png and b/graphics/pokemon/garganacl/back.png differ diff --git a/graphics/pokemon/garganacl/front.png b/graphics/pokemon/garganacl/front.png index 416f535b35..d983a91346 100644 Binary files a/graphics/pokemon/garganacl/front.png and b/graphics/pokemon/garganacl/front.png differ diff --git a/graphics/pokemon/garganacl/normal.pal b/graphics/pokemon/garganacl/normal.pal index 2acd11e3b9..da3c63de41 100644 --- a/graphics/pokemon/garganacl/normal.pal +++ b/graphics/pokemon/garganacl/normal.pal @@ -1,19 +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 +156 213 164 +123 123 123 +197 180 189 +255 255 255 +82 82 82 +148 98 90 +139 115 98 +197 148 123 +8 8 8 +65 49 41 +98 82 74 +238 139 24 +246 230 24 +90 74 57 +230 213 205 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/overworld.png b/graphics/pokemon/garganacl/overworld.png new file mode 100644 index 0000000000..4762150724 Binary files /dev/null and b/graphics/pokemon/garganacl/overworld.png differ diff --git a/graphics/pokemon/garganacl/overworld_normal.pal b/graphics/pokemon/garganacl/overworld_normal.pal new file mode 100644 index 0000000000..08dff16f42 --- /dev/null +++ b/graphics/pokemon/garganacl/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +86 77 87 +191 180 186 +252 252 252 +153 134 148 +0 0 0 +195 146 123 +68 51 46 +150 103 90 +234 136 28 +246 226 26 +100 81 77 +138 115 103 +228 209 200 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/garganacl/overworld_shiny.pal b/graphics/pokemon/garganacl/overworld_shiny.pal new file mode 100644 index 0000000000..1ddcf0c22e --- /dev/null +++ b/graphics/pokemon/garganacl/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +81 64 45 +190 149 109 +230 175 136 +123 96 67 +0 0 0 +195 146 123 +68 51 46 +150 103 90 +234 136 28 +246 226 26 +100 81 77 +138 115 103 +228 209 200 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/garganacl/shiny.pal b/graphics/pokemon/garganacl/shiny.pal index 0b0979dd27..ea99f676a1 100644 --- a/graphics/pokemon/garganacl/shiny.pal +++ b/graphics/pokemon/garganacl/shiny.pal @@ -1,19 +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 +156 213 164 +123 98 65 +189 148 106 +230 172 139 +90 57 49 +148 98 90 +139 115 98 +197 148 123 +8 8 8 +65 49 41 +98 82 74 +238 139 24 +246 230 24 +90 74 57 +230 213 205 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/gastly/overworld.png b/graphics/pokemon/gastly/overworld.png index 4df5a7740c..19708c5563 100644 Binary files a/graphics/pokemon/gastly/overworld.png and b/graphics/pokemon/gastly/overworld.png differ diff --git a/graphics/pokemon/gholdengo/overworld.png b/graphics/pokemon/gholdengo/overworld.png new file mode 100644 index 0000000000..68d32e136a Binary files /dev/null and b/graphics/pokemon/gholdengo/overworld.png differ diff --git a/graphics/pokemon/gholdengo/overworld_normal.pal b/graphics/pokemon/gholdengo/overworld_normal.pal new file mode 100644 index 0000000000..723bc75ea0 --- /dev/null +++ b/graphics/pokemon/gholdengo/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +79 62 21 +0 0 0 +255 219 166 +213 164 49 +213 164 49 +217 136 15 +255 213 45 +145 122 54 +50 52 55 +84 91 107 +180 164 94 +156 62 67 +118 37 52 +185 190 205 +138 143 159 diff --git a/graphics/pokemon/gholdengo/overworld_shiny.pal b/graphics/pokemon/gholdengo/overworld_shiny.pal new file mode 100644 index 0000000000..6e2d0516cd --- /dev/null +++ b/graphics/pokemon/gholdengo/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +79 62 21 +0 0 0 +255 219 166 +213 164 49 +134 156 157 +107 121 126 +255 213 45 +145 122 54 +50 52 55 +107 121 126 +180 164 94 +156 62 67 +118 37 52 +185 190 205 +138 143 159 diff --git a/graphics/pokemon/gimmighoul/overworld.png b/graphics/pokemon/gimmighoul/overworld.png new file mode 100644 index 0000000000..35c2bceddf Binary files /dev/null and b/graphics/pokemon/gimmighoul/overworld.png differ diff --git a/graphics/pokemon/gimmighoul/overworld_normal.pal b/graphics/pokemon/gimmighoul/overworld_normal.pal new file mode 100644 index 0000000000..9c170b6fff --- /dev/null +++ b/graphics/pokemon/gimmighoul/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +145 131 68 +0 0 0 +35 38 44 +180 164 94 +118 37 52 +194 182 124 +156 62 67 +184 78 83 +94 111 143 +153 164 192 +94 111 143 +153 164 192 +228 191 0 +154 125 42 +0 0 0 diff --git a/graphics/pokemon/gimmighoul/overworld_shiny.pal b/graphics/pokemon/gimmighoul/overworld_shiny.pal new file mode 100644 index 0000000000..f4865b061b --- /dev/null +++ b/graphics/pokemon/gimmighoul/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +145 131 68 +0 0 0 +35 38 44 +180 164 94 +118 37 52 +194 182 124 +156 62 67 +184 78 83 +94 111 143 +153 164 192 +138 149 166 +209 219 227 +228 191 0 +154 125 42 +0 0 0 diff --git a/graphics/pokemon/girafarig/overworld.png b/graphics/pokemon/girafarig/overworld.png index 8c9402494e..d20cebdf13 100644 Binary files a/graphics/pokemon/girafarig/overworld.png and b/graphics/pokemon/girafarig/overworld.png differ diff --git a/graphics/pokemon/giratina/origin/overworld.png b/graphics/pokemon/giratina/origin/overworld.png index cf022c4858..a4de07e1cf 100644 Binary files a/graphics/pokemon/giratina/origin/overworld.png and b/graphics/pokemon/giratina/origin/overworld.png differ diff --git a/graphics/pokemon/giratina/overworld.png b/graphics/pokemon/giratina/overworld.png index 8caa512dc1..32608f1212 100644 Binary files a/graphics/pokemon/giratina/overworld.png and b/graphics/pokemon/giratina/overworld.png differ diff --git a/graphics/pokemon/gligar/overworld.png b/graphics/pokemon/gligar/overworld.png index 50f94601f1..a3f2369f2a 100644 Binary files a/graphics/pokemon/gligar/overworld.png and b/graphics/pokemon/gligar/overworld.png differ diff --git a/graphics/pokemon/glimmet/overworld.png b/graphics/pokemon/glimmet/overworld.png new file mode 100644 index 0000000000..5cf3260caa Binary files /dev/null and b/graphics/pokemon/glimmet/overworld.png differ diff --git a/graphics/pokemon/glimmet/overworld_normal.pal b/graphics/pokemon/glimmet/overworld_normal.pal new file mode 100644 index 0000000000..47f6b38dfb --- /dev/null +++ b/graphics/pokemon/glimmet/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +8 48 144 +3 21 65 +52 168 225 +99 120 165 +212 226 235 +31 46 66 +255 255 49 +42 52 82 +153 167 196 +127 127 187 +153 153 203 +99 120 165 +201 196 226 +69 59 77 diff --git a/graphics/pokemon/glimmet/overworld_shiny.pal b/graphics/pokemon/glimmet/overworld_shiny.pal new file mode 100644 index 0000000000..ffeb7a9376 --- /dev/null +++ b/graphics/pokemon/glimmet/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +45 244 215 +23 104 96 +204 224 225 +99 120 165 +212 226 235 +24 36 52 +255 255 49 +39 49 88 +153 167 196 +85 115 184 +104 140 209 +60 83 143 +138 173 242 +69 59 77 diff --git a/graphics/pokemon/glimmora/overworld.png b/graphics/pokemon/glimmora/overworld.png new file mode 100644 index 0000000000..e3a05b066f Binary files /dev/null and b/graphics/pokemon/glimmora/overworld.png differ diff --git a/graphics/pokemon/glimmora/overworld_normal.pal b/graphics/pokemon/glimmora/overworld_normal.pal new file mode 100644 index 0000000000..e01a7da62f --- /dev/null +++ b/graphics/pokemon/glimmora/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +54 105 86 +0 0 0 +65 150 139 +93 224 170 +44 54 154 +50 83 214 +27 30 75 +48 48 99 +91 78 149 +141 123 206 +61 70 75 +90 134 156 +255 255 49 +77 96 118 +0 0 0 diff --git a/graphics/pokemon/glimmora/overworld_shiny.pal b/graphics/pokemon/glimmora/overworld_shiny.pal new file mode 100644 index 0000000000..b2310cdcef --- /dev/null +++ b/graphics/pokemon/glimmora/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +61 152 182 +0 0 0 +132 209 223 +171 237 239 +27 190 170 +45 244 215 +16 69 53 +31 39 120 +40 52 153 +47 79 187 +61 70 75 +90 134 156 +255 255 49 +77 96 118 +0 0 0 diff --git a/graphics/pokemon/gloom/overworld.png b/graphics/pokemon/gloom/overworld.png index 349429731a..fd0735837b 100644 Binary files a/graphics/pokemon/gloom/overworld.png and b/graphics/pokemon/gloom/overworld.png differ diff --git a/graphics/pokemon/golbat/overworld.png b/graphics/pokemon/golbat/overworld.png index 9ec0ecc2d8..658023601d 100644 Binary files a/graphics/pokemon/golbat/overworld.png and b/graphics/pokemon/golbat/overworld.png differ diff --git a/graphics/pokemon/gouging_fire/overworld.png b/graphics/pokemon/gouging_fire/overworld.png new file mode 100644 index 0000000000..b6b232b9d0 Binary files /dev/null and b/graphics/pokemon/gouging_fire/overworld.png differ diff --git a/graphics/pokemon/gouging_fire/overworld_normal.pal b/graphics/pokemon/gouging_fire/overworld_normal.pal new file mode 100644 index 0000000000..cc60ced1ee --- /dev/null +++ b/graphics/pokemon/gouging_fire/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +202 156 15 +120 97 44 +255 236 125 +192 25 22 +0 0 0 +136 17 14 +57 205 20 +192 136 24 +67 59 54 +123 129 133 +107 113 100 +198 204 191 +230 235 235 +198 204 191 +0 112 249 diff --git a/graphics/pokemon/gouging_fire/overworld_shiny.pal b/graphics/pokemon/gouging_fire/overworld_shiny.pal new file mode 100644 index 0000000000..2d1a121559 --- /dev/null +++ b/graphics/pokemon/gouging_fire/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +235 148 37 +199 100 36 +249 189 116 +93 92 92 +0 0 0 +51 50 50 +70 220 210 +152 96 57 +67 59 54 +123 129 133 +107 113 100 +198 204 191 +230 235 235 +93 92 92 +0 112 249 diff --git a/graphics/pokemon/grafaiai/overworld.png b/graphics/pokemon/grafaiai/overworld.png new file mode 100644 index 0000000000..773a3b7989 Binary files /dev/null and b/graphics/pokemon/grafaiai/overworld.png differ diff --git a/graphics/pokemon/grafaiai/overworld_normal.pal b/graphics/pokemon/grafaiai/overworld_normal.pal new file mode 100644 index 0000000000..ad40b14cbc --- /dev/null +++ b/graphics/pokemon/grafaiai/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +112 101 101 +169 157 149 +112 101 101 +0 0 0 +63 63 76 +40 40 40 +70 66 84 +171 165 172 +230 227 227 +87 69 150 +138 194 162 +162 203 166 +48 148 179 +177 44 100 +215 56 118 diff --git a/graphics/pokemon/grafaiai/overworld_shiny.pal b/graphics/pokemon/grafaiai/overworld_shiny.pal new file mode 100644 index 0000000000..16c8ac6f0f --- /dev/null +++ b/graphics/pokemon/grafaiai/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +112 101 101 +220 220 195 +172 166 153 +0 0 0 +101 112 102 +40 40 40 +64 34 100 +177 168 168 +230 227 227 +182 74 96 +169 169 226 +213 204 255 +255 234 86 +64 34 100 +148 97 222 diff --git a/graphics/pokemon/great_tusk/overworld.png b/graphics/pokemon/great_tusk/overworld.png new file mode 100644 index 0000000000..eb3ee7abdf Binary files /dev/null and b/graphics/pokemon/great_tusk/overworld.png differ diff --git a/graphics/pokemon/great_tusk/overworld_normal.pal b/graphics/pokemon/great_tusk/overworld_normal.pal new file mode 100644 index 0000000000..8ca822ba78 --- /dev/null +++ b/graphics/pokemon/great_tusk/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +124 25 37 +113 27 51 +20 28 36 +69 66 104 +148 35 52 +72 64 72 +160 47 81 +103 99 156 +69 66 104 +120 120 128 +248 248 248 +152 152 160 +184 184 192 +88 8 8 +228 189 108 diff --git a/graphics/pokemon/great_tusk/overworld_shiny.pal b/graphics/pokemon/great_tusk/overworld_shiny.pal new file mode 100644 index 0000000000..1848a8836d --- /dev/null +++ b/graphics/pokemon/great_tusk/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +116 37 41 +89 92 33 +16 16 16 +120 48 32 +220 169 104 +72 51 38 +144 158 35 +184 136 96 +128 136 96 +72 176 144 +248 248 248 +176 240 200 +184 184 192 +88 8 8 +220 169 104 diff --git a/graphics/pokemon/greavard/overworld.png b/graphics/pokemon/greavard/overworld.png new file mode 100644 index 0000000000..491f91fbc4 Binary files /dev/null and b/graphics/pokemon/greavard/overworld.png differ diff --git a/graphics/pokemon/greavard/overworld_normal.pal b/graphics/pokemon/greavard/overworld_normal.pal new file mode 100644 index 0000000000..20de308b20 --- /dev/null +++ b/graphics/pokemon/greavard/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +152 74 189 +183 129 209 +247 208 108 +201 160 220 +0 0 0 +232 235 239 +184 181 191 +85 96 113 +137 148 166 +180 196 211 +43 47 54 +48 48 64 +62 66 69 +48 48 64 +48 48 64 diff --git a/graphics/pokemon/greavard/overworld_shiny.pal b/graphics/pokemon/greavard/overworld_shiny.pal new file mode 100644 index 0000000000..3a5079edd9 --- /dev/null +++ b/graphics/pokemon/greavard/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +152 74 189 +183 129 209 +247 208 108 +201 160 220 +0 0 0 +232 235 239 +184 181 191 +126 95 48 +222 177 86 +255 233 104 +78 60 39 +92 70 46 +62 66 69 +48 48 64 +78 60 39 diff --git a/graphics/pokemon/groudon/overworld.png b/graphics/pokemon/groudon/overworld.png index 0520115d2d..8af130aff1 100644 Binary files a/graphics/pokemon/groudon/overworld.png and b/graphics/pokemon/groudon/overworld.png differ diff --git a/graphics/pokemon/grovyle/overworld.png b/graphics/pokemon/grovyle/overworld.png index 3b25fd5c5b..96dc7812fa 100644 Binary files a/graphics/pokemon/grovyle/overworld.png and b/graphics/pokemon/grovyle/overworld.png differ diff --git a/graphics/pokemon/grumpig/overworld.png b/graphics/pokemon/grumpig/overworld.png index 6507928711..8d0ae3e472 100644 Binary files a/graphics/pokemon/grumpig/overworld.png and b/graphics/pokemon/grumpig/overworld.png differ diff --git a/graphics/pokemon/guzzlord/overworld.png b/graphics/pokemon/guzzlord/overworld.png index f9e52bd083..f8e2dd5fe5 100644 Binary files a/graphics/pokemon/guzzlord/overworld.png and b/graphics/pokemon/guzzlord/overworld.png differ diff --git a/graphics/pokemon/guzzlord/overworld_shiny.pal b/graphics/pokemon/guzzlord/overworld_shiny.pal index bc1316f82d..9e0be85bef 100644 --- a/graphics/pokemon/guzzlord/overworld_shiny.pal +++ b/graphics/pokemon/guzzlord/overworld_shiny.pal @@ -8,9 +8,9 @@ JASC-PAL 168 64 16 232 232 232 30 91 114 -69 73 85 +227 227 227 176 168 168 -42 45 50 +62 65 70 43 37 30 29 31 37 18 20 23 diff --git a/graphics/pokemon/hariyama/overworld.png b/graphics/pokemon/hariyama/overworld.png index 52622056a8..8e1cfac955 100644 Binary files a/graphics/pokemon/hariyama/overworld.png and b/graphics/pokemon/hariyama/overworld.png differ diff --git a/graphics/pokemon/heatran/overworld.png b/graphics/pokemon/heatran/overworld.png index 4939e6fbc9..dc6d20550f 100644 Binary files a/graphics/pokemon/heatran/overworld.png and b/graphics/pokemon/heatran/overworld.png differ diff --git a/graphics/pokemon/hoppip/overworld.png b/graphics/pokemon/hoppip/overworld.png index 77e1ea5bde..b297762d64 100644 Binary files a/graphics/pokemon/hoppip/overworld.png and b/graphics/pokemon/hoppip/overworld.png differ diff --git a/graphics/pokemon/houndstone/overworld.png b/graphics/pokemon/houndstone/overworld.png new file mode 100644 index 0000000000..d415b7860b Binary files /dev/null and b/graphics/pokemon/houndstone/overworld.png differ diff --git a/graphics/pokemon/houndstone/overworld_normal.pal b/graphics/pokemon/houndstone/overworld_normal.pal new file mode 100644 index 0000000000..ac1cea7e9c --- /dev/null +++ b/graphics/pokemon/houndstone/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +68 73 77 +122 122 122 +182 179 223 +78 78 82 +105 47 47 +0 0 0 +173 65 96 +204 199 231 +185 183 46 +185 189 196 +237 239 241 +15 15 15 +234 234 234 +203 203 203 +148 149 150 diff --git a/graphics/pokemon/houndstone/overworld_shiny.pal b/graphics/pokemon/houndstone/overworld_shiny.pal new file mode 100644 index 0000000000..ccdf95276a --- /dev/null +++ b/graphics/pokemon/houndstone/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +68 73 77 +122 122 122 +161 138 111 +78 78 82 +105 47 47 +0 0 0 +173 65 96 +220 211 175 +185 183 46 +186 165 133 +220 211 175 +15 15 15 +234 234 234 +203 203 203 +148 149 150 diff --git a/graphics/pokemon/hydrapple/overworld.png b/graphics/pokemon/hydrapple/overworld.png new file mode 100644 index 0000000000..2b2da7ff79 Binary files /dev/null and b/graphics/pokemon/hydrapple/overworld.png differ diff --git a/graphics/pokemon/hydrapple/overworld_normal.pal b/graphics/pokemon/hydrapple/overworld_normal.pal new file mode 100644 index 0000000000..0f8efb75ee --- /dev/null +++ b/graphics/pokemon/hydrapple/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +53 48 17 +120 92 77 +95 145 66 +176 152 115 +96 16 16 +0 0 0 +94 80 2 +184 40 40 +251 230 121 +217 185 6 +144 205 109 +96 16 16 +166 36 36 +224 72 64 +30 54 16 diff --git a/graphics/pokemon/hydrapple/overworld_shiny.pal b/graphics/pokemon/hydrapple/overworld_shiny.pal new file mode 100644 index 0000000000..1fb8f281e6 --- /dev/null +++ b/graphics/pokemon/hydrapple/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +53 48 17 +120 92 77 +95 145 66 +176 152 115 +95 145 66 +0 0 0 +94 80 2 +144 205 109 +251 230 121 +217 185 6 +144 205 109 +133 71 3 +235 194 14 +255 234 81 +172 44 21 diff --git a/graphics/pokemon/igglybuff/overworld.png b/graphics/pokemon/igglybuff/overworld.png index ab5af8ee16..ab6af8a03c 100644 Binary files a/graphics/pokemon/igglybuff/overworld.png and b/graphics/pokemon/igglybuff/overworld.png differ diff --git a/graphics/pokemon/illumise/overworld.png b/graphics/pokemon/illumise/overworld.png index a5092316f4..a53f66e71a 100644 Binary files a/graphics/pokemon/illumise/overworld.png and b/graphics/pokemon/illumise/overworld.png differ diff --git a/graphics/pokemon/indeedee/back.png b/graphics/pokemon/indeedee/back.png index 9fcfda9f9b..8008cd6fb4 100644 Binary files a/graphics/pokemon/indeedee/back.png and b/graphics/pokemon/indeedee/back.png differ diff --git a/graphics/pokemon/indeedee/female/back.png b/graphics/pokemon/indeedee/female/back.png index 425cfe3689..d0a6a32c03 100644 Binary files a/graphics/pokemon/indeedee/female/back.png and b/graphics/pokemon/indeedee/female/back.png differ diff --git a/graphics/pokemon/indeedee/female/overworld.png b/graphics/pokemon/indeedee/female/overworld.png index 609039c70d..22a525089a 100644 Binary files a/graphics/pokemon/indeedee/female/overworld.png and b/graphics/pokemon/indeedee/female/overworld.png differ diff --git a/graphics/pokemon/indeedee/female/overworld_shiny.pal b/graphics/pokemon/indeedee/female/overworld_shiny.pal index d258b99c8d..f52cf28ea6 100644 --- a/graphics/pokemon/indeedee/female/overworld_shiny.pal +++ b/graphics/pokemon/indeedee/female/overworld_shiny.pal @@ -3,17 +3,17 @@ JASC-PAL 16 128 128 128 26 24 32 -135 128 162 -86 82 102 +145 127 199 +84 73 122 8 8 14 0 0 0 -37 37 62 -77 76 116 -255 255 255 +64 96 120 +96 144 160 +254 254 238 121 83 136 -61 37 19 -175 175 175 -121 72 39 -136 136 136 +105 52 91 +193 190 180 +132 85 120 +97 97 85 14 14 14 15 15 15 diff --git a/graphics/pokemon/indeedee/female/shiny.pal b/graphics/pokemon/indeedee/female/shiny.pal index 7f45b6bf6c..369076f8d4 100644 --- a/graphics/pokemon/indeedee/female/shiny.pal +++ b/graphics/pokemon/indeedee/female/shiny.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 32 48 64 -120 112 144 -80 72 104 +145 127 199 +84 73 122 96 144 160 16 16 16 216 112 224 -200 176 192 -248 248 248 -144 96 88 +193 190 180 +254 254 238 +132 85 120 64 96 120 -112 48 48 -128 104 128 +105 52 91 +97 97 85 48 64 80 0 0 0 0 0 0 diff --git a/graphics/pokemon/indeedee/front.png b/graphics/pokemon/indeedee/front.png index 26b082b61b..b93a3fad73 100644 Binary files a/graphics/pokemon/indeedee/front.png and b/graphics/pokemon/indeedee/front.png differ diff --git a/graphics/pokemon/indeedee/shiny.pal b/graphics/pokemon/indeedee/shiny.pal index 6bb5eca576..2b0aa6197b 100644 --- a/graphics/pokemon/indeedee/shiny.pal +++ b/graphics/pokemon/indeedee/shiny.pal @@ -3,17 +3,17 @@ JASC-PAL 16 152 208 160 32 48 64 -120 112 144 +145 127 199 16 16 16 -80 72 104 +84 73 122 96 144 160 -200 176 192 -248 248 248 +193 190 180 +254 254 238 64 96 120 -144 96 88 -112 48 48 +132 85 120 +105 52 91 40 176 224 -128 104 128 +97 97 85 48 64 80 0 0 0 0 0 0 diff --git a/graphics/pokemon/iron_boulder/overworld.png b/graphics/pokemon/iron_boulder/overworld.png new file mode 100644 index 0000000000..ff9a212199 Binary files /dev/null and b/graphics/pokemon/iron_boulder/overworld.png differ diff --git a/graphics/pokemon/iron_boulder/overworld_normal.pal b/graphics/pokemon/iron_boulder/overworld_normal.pal new file mode 100644 index 0000000000..cf0d9da89a --- /dev/null +++ b/graphics/pokemon/iron_boulder/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +16 16 16 +109 80 69 +90 90 86 +146 144 125 +56 41 41 +182 178 167 +76 55 52 +184 123 33 +207 207 207 +223 169 57 +224 96 0 +234 201 132 +56 41 41 +122 90 75 +254 172 53 diff --git a/graphics/pokemon/iron_boulder/overworld_shiny.pal b/graphics/pokemon/iron_boulder/overworld_shiny.pal new file mode 100644 index 0000000000..4b7b817858 --- /dev/null +++ b/graphics/pokemon/iron_boulder/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +16 16 16 +173 173 173 +90 90 86 +138 142 138 +90 90 86 +173 173 173 +138 142 138 +184 123 33 +207 207 207 +223 169 57 +207 207 207 +234 201 132 +173 173 173 +207 207 207 +254 172 53 diff --git a/graphics/pokemon/iron_bundle/overworld.png b/graphics/pokemon/iron_bundle/overworld.png new file mode 100644 index 0000000000..b8105c80b1 Binary files /dev/null and b/graphics/pokemon/iron_bundle/overworld.png differ diff --git a/graphics/pokemon/iron_bundle/overworld_normal.pal b/graphics/pokemon/iron_bundle/overworld_normal.pal new file mode 100644 index 0000000000..1bb4392801 --- /dev/null +++ b/graphics/pokemon/iron_bundle/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +72 72 72 +0 0 0 +212 212 212 +88 8 8 +170 170 170 +200 24 24 +191 191 191 +152 8 8 +77 138 192 +90 192 255 +184 160 24 +248 216 88 +128 104 16 +212 212 212 +72 72 72 diff --git a/graphics/pokemon/iron_bundle/overworld_shiny.pal b/graphics/pokemon/iron_bundle/overworld_shiny.pal new file mode 100644 index 0000000000..e92a25958c --- /dev/null +++ b/graphics/pokemon/iron_bundle/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +51 53 57 +0 0 0 +179 181 185 +51 53 57 +100 103 113 +145 148 155 +145 148 155 +100 103 113 +77 138 192 +90 192 255 +145 148 155 +179 181 185 +100 103 113 +212 212 212 +72 72 72 diff --git a/graphics/pokemon/iron_crown/overworld.png b/graphics/pokemon/iron_crown/overworld.png new file mode 100644 index 0000000000..79ed13adca Binary files /dev/null and b/graphics/pokemon/iron_crown/overworld.png differ diff --git a/graphics/pokemon/iron_crown/overworld_normal.pal b/graphics/pokemon/iron_crown/overworld_normal.pal new file mode 100644 index 0000000000..eec00f77b6 --- /dev/null +++ b/graphics/pokemon/iron_crown/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +32 100 119 +96 72 8 +98 247 247 +248 208 80 +56 156 173 +22 61 67 +224 176 8 +18 32 11 +199 252 252 +64 64 88 +160 160 160 +200 200 216 +139 130 133 +99 99 99 +232 232 248 diff --git a/graphics/pokemon/iron_crown/overworld_shiny.pal b/graphics/pokemon/iron_crown/overworld_shiny.pal new file mode 100644 index 0000000000..76e4a6f913 --- /dev/null +++ b/graphics/pokemon/iron_crown/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +102 105 113 +92 94 101 +98 247 247 +167 169 175 +156 158 165 +51 53 57 +145 148 155 +18 32 11 +199 252 252 +82 84 90 +160 160 160 +200 200 216 +139 130 133 +99 99 99 +232 232 248 diff --git a/graphics/pokemon/iron_hands/overworld.png b/graphics/pokemon/iron_hands/overworld.png new file mode 100644 index 0000000000..ecc23dd46a Binary files /dev/null and b/graphics/pokemon/iron_hands/overworld.png differ diff --git a/graphics/pokemon/iron_hands/overworld_normal.pal b/graphics/pokemon/iron_hands/overworld_normal.pal new file mode 100644 index 0000000000..d48fe515f8 --- /dev/null +++ b/graphics/pokemon/iron_hands/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +49 55 88 +25 32 49 +66 78 115 +82 80 80 +203 201 197 +208 167 19 +163 159 152 +41 38 41 +252 210 22 +88 74 41 +121 117 108 +58 54 55 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/iron_hands/overworld_shiny.pal b/graphics/pokemon/iron_hands/overworld_shiny.pal new file mode 100644 index 0000000000..2dee14f755 --- /dev/null +++ b/graphics/pokemon/iron_hands/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +100 103 113 +51 53 57 +145 148 155 +51 53 57 +145 148 155 +208 167 19 +100 103 113 +41 38 41 +252 210 22 +88 74 41 +80 82 90 +58 54 55 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/iron_jugulis/overworld.png b/graphics/pokemon/iron_jugulis/overworld.png new file mode 100644 index 0000000000..3058959c13 Binary files /dev/null and b/graphics/pokemon/iron_jugulis/overworld.png differ diff --git a/graphics/pokemon/iron_jugulis/overworld_normal.pal b/graphics/pokemon/iron_jugulis/overworld_normal.pal new file mode 100644 index 0000000000..b591085630 --- /dev/null +++ b/graphics/pokemon/iron_jugulis/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +16 12 16 +33 25 33 +225 0 157 +27 23 27 +71 71 71 +255 77 203 +140 0 98 +255 162 255 +19 52 128 +91 115 208 +134 171 240 +63 59 63 +0 47 123 +0 63 166 +30 98 223 diff --git a/graphics/pokemon/iron_jugulis/overworld_shiny.pal b/graphics/pokemon/iron_jugulis/overworld_shiny.pal new file mode 100644 index 0000000000..f7a3680c80 --- /dev/null +++ b/graphics/pokemon/iron_jugulis/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +16 12 16 +84 87 95 +225 0 157 +168 170 176 +213 213 213 +255 77 203 +140 0 98 +255 162 255 +38 57 134 +108 130 213 +134 171 240 +63 59 63 +100 103 113 +168 170 176 +213 213 213 diff --git a/graphics/pokemon/iron_leaves/overworld.png b/graphics/pokemon/iron_leaves/overworld.png new file mode 100644 index 0000000000..01fc0a88c8 Binary files /dev/null and b/graphics/pokemon/iron_leaves/overworld.png differ diff --git a/graphics/pokemon/iron_leaves/overworld_normal.pal b/graphics/pokemon/iron_leaves/overworld_normal.pal new file mode 100644 index 0000000000..df4c2487e2 --- /dev/null +++ b/graphics/pokemon/iron_leaves/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +30 60 34 +57 117 64 +87 173 96 +16 16 16 +170 66 60 +130 193 136 +224 120 136 +71 146 79 +0 0 0 +255 162 180 +193 84 79 +88 88 88 +189 189 185 +157 157 153 +100 105 108 diff --git a/graphics/pokemon/iron_leaves/overworld_shiny.pal b/graphics/pokemon/iron_leaves/overworld_shiny.pal new file mode 100644 index 0000000000..e5a25e5230 --- /dev/null +++ b/graphics/pokemon/iron_leaves/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +51 53 57 +82 84 90 +145 148 155 +16 16 16 +170 66 60 +167 169 175 +224 120 136 +102 105 113 +0 0 0 +255 162 180 +193 84 79 +88 88 88 +189 189 185 +157 157 153 +100 105 108 diff --git a/graphics/pokemon/iron_moth/overworld.png b/graphics/pokemon/iron_moth/overworld.png new file mode 100644 index 0000000000..fa241747d0 Binary files /dev/null and b/graphics/pokemon/iron_moth/overworld.png differ diff --git a/graphics/pokemon/iron_moth/overworld_normal.pal b/graphics/pokemon/iron_moth/overworld_normal.pal new file mode 100644 index 0000000000..23350af658 --- /dev/null +++ b/graphics/pokemon/iron_moth/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +206 117 41 +255 159 69 +77 74 73 +148 85 25 +16 16 16 +71 31 29 +230 65 58 +181 53 49 +49 47 47 +109 109 109 +195 195 195 +160 211 211 +206 243 247 +0 0 0 diff --git a/graphics/pokemon/iron_moth/overworld_shiny.pal b/graphics/pokemon/iron_moth/overworld_shiny.pal new file mode 100644 index 0000000000..5b0f15c428 --- /dev/null +++ b/graphics/pokemon/iron_moth/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +206 117 41 +255 159 69 +77 74 73 +148 85 25 +16 16 16 +91 94 102 +213 213 213 +142 142 142 +49 47 47 +109 109 109 +195 195 195 +142 142 142 +213 213 213 +0 0 0 diff --git a/graphics/pokemon/iron_thorns/overworld.png b/graphics/pokemon/iron_thorns/overworld.png new file mode 100644 index 0000000000..d860a069ab Binary files /dev/null and b/graphics/pokemon/iron_thorns/overworld.png differ diff --git a/graphics/pokemon/iron_thorns/overworld_normal.pal b/graphics/pokemon/iron_thorns/overworld_normal.pal new file mode 100644 index 0000000000..e0c871bd4c --- /dev/null +++ b/graphics/pokemon/iron_thorns/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +46 54 27 +46 54 27 +154 196 80 +0 0 0 +123 142 66 +96 111 55 +71 83 40 +25 142 107 +0 208 131 +80 74 74 +0 251 156 +63 59 58 +44 40 44 +66 142 33 +32 40 40 diff --git a/graphics/pokemon/iron_thorns/overworld_shiny.pal b/graphics/pokemon/iron_thorns/overworld_shiny.pal new file mode 100644 index 0000000000..88ef2c21e3 --- /dev/null +++ b/graphics/pokemon/iron_thorns/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +54 57 61 +46 54 27 +168 170 176 +0 0 0 +145 148 155 +123 126 134 +80 82 90 +25 142 107 +0 208 131 +80 74 74 +0 251 156 +63 59 58 +44 40 44 +100 103 113 +32 40 40 diff --git a/graphics/pokemon/iron_treads/overworld.png b/graphics/pokemon/iron_treads/overworld.png new file mode 100644 index 0000000000..bdce3f5732 Binary files /dev/null and b/graphics/pokemon/iron_treads/overworld.png differ diff --git a/graphics/pokemon/iron_treads/overworld_normal.pal b/graphics/pokemon/iron_treads/overworld_normal.pal new file mode 100644 index 0000000000..413ca94437 --- /dev/null +++ b/graphics/pokemon/iron_treads/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +24 23 22 +35 34 33 +88 8 8 +206 24 25 +136 24 24 +16 16 16 +47 44 43 +69 65 63 +120 120 128 +72 64 72 +16 16 16 +152 152 160 +47 44 43 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/iron_treads/overworld_shiny.pal b/graphics/pokemon/iron_treads/overworld_shiny.pal new file mode 100644 index 0000000000..9cea8cd060 --- /dev/null +++ b/graphics/pokemon/iron_treads/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +24 23 22 +68 68 74 +88 8 8 +206 24 25 +136 24 24 +28 28 30 +120 120 128 +152 152 160 +120 120 128 +72 64 72 +16 16 16 +152 152 160 +47 44 43 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/iron_valiant/overworld.png b/graphics/pokemon/iron_valiant/overworld.png new file mode 100644 index 0000000000..e3b87e8bf9 Binary files /dev/null and b/graphics/pokemon/iron_valiant/overworld.png differ diff --git a/graphics/pokemon/iron_valiant/overworld_normal.pal b/graphics/pokemon/iron_valiant/overworld_normal.pal new file mode 100644 index 0000000000..b7498fe59b --- /dev/null +++ b/graphics/pokemon/iron_valiant/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +51 113 98 +0 0 0 +133 200 183 +38 62 46 +72 176 88 +72 176 88 +40 128 56 +76 76 80 +232 232 248 +128 128 144 +200 200 216 +168 168 176 +255 62 136 +255 62 136 +189 0 71 diff --git a/graphics/pokemon/iron_valiant/overworld_shiny.pal b/graphics/pokemon/iron_valiant/overworld_shiny.pal new file mode 100644 index 0000000000..d35e973bca --- /dev/null +++ b/graphics/pokemon/iron_valiant/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +51 53 57 +0 0 0 +145 148 155 +55 56 58 +102 105 113 +156 158 165 +102 105 113 +83 82 83 +213 213 213 +127 127 127 +191 191 191 +168 168 176 +255 125 174 +255 62 136 +189 0 71 diff --git a/graphics/pokemon/jolteon/overworld.png b/graphics/pokemon/jolteon/overworld.png index 0c739e25ca..52c8251c3b 100644 Binary files a/graphics/pokemon/jolteon/overworld.png and b/graphics/pokemon/jolteon/overworld.png differ diff --git a/graphics/pokemon/jumpluff/overworld.png b/graphics/pokemon/jumpluff/overworld.png index b22b2d7c1c..513a212b3a 100644 Binary files a/graphics/pokemon/jumpluff/overworld.png and b/graphics/pokemon/jumpluff/overworld.png differ diff --git a/graphics/pokemon/kabutops/overworld.png b/graphics/pokemon/kabutops/overworld.png index 084d6339b7..157532af55 100644 Binary files a/graphics/pokemon/kabutops/overworld.png and b/graphics/pokemon/kabutops/overworld.png differ diff --git a/graphics/pokemon/kabutops/overworld_normal.pal b/graphics/pokemon/kabutops/overworld_normal.pal index 04f6316663..2c4ae3b74c 100644 --- a/graphics/pokemon/kabutops/overworld_normal.pal +++ b/graphics/pokemon/kabutops/overworld_normal.pal @@ -9,7 +9,7 @@ JASC-PAL 136 96 40 104 72 48 64 64 64 -152 208 160 +161 156 156 192 192 200 232 232 248 104 104 120 diff --git a/graphics/pokemon/kilowattrel/back.png b/graphics/pokemon/kilowattrel/back.png index 26eb440b6a..d72494af1c 100755 Binary files a/graphics/pokemon/kilowattrel/back.png and b/graphics/pokemon/kilowattrel/back.png differ diff --git a/graphics/pokemon/kilowattrel/front.png b/graphics/pokemon/kilowattrel/front.png index 3a8e971644..fdb1a38e48 100755 Binary files a/graphics/pokemon/kilowattrel/front.png and b/graphics/pokemon/kilowattrel/front.png differ diff --git a/graphics/pokemon/kilowattrel/overworld.png b/graphics/pokemon/kilowattrel/overworld.png new file mode 100644 index 0000000000..d8c14d239b Binary files /dev/null and b/graphics/pokemon/kilowattrel/overworld.png differ diff --git a/graphics/pokemon/kilowattrel/overworld_normal.pal b/graphics/pokemon/kilowattrel/overworld_normal.pal new file mode 100644 index 0000000000..4f42bbd73a --- /dev/null +++ b/graphics/pokemon/kilowattrel/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +15 15 15 +98 74 32 +38 40 44 +52 57 63 +255 205 55 +170 126 36 +253 253 253 +43 23 23 +68 30 33 +115 187 191 +105 42 47 +38 40 44 +55 65 90 +79 92 130 diff --git a/graphics/pokemon/kilowattrel/overworld_shiny.pal b/graphics/pokemon/kilowattrel/overworld_shiny.pal new file mode 100644 index 0000000000..a052d958d2 --- /dev/null +++ b/graphics/pokemon/kilowattrel/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +61 31 39 +98 74 32 +102 53 66 +141 82 107 +255 205 55 +170 126 36 +253 253 253 +125 73 9 +206 119 13 +115 187 191 +244 161 59 +38 40 44 +69 70 71 +90 91 92 diff --git a/graphics/pokemon/kilowattrel/shiny.pal b/graphics/pokemon/kilowattrel/shiny.pal index a9ad2ba3a8..ab148371be 100755 --- a/graphics/pokemon/kilowattrel/shiny.pal +++ b/graphics/pokemon/kilowattrel/shiny.pal @@ -8,7 +8,7 @@ JASC-PAL 248 204 48 192 144 40 248 252 248 -212 95 60 +131 27 27 16 16 16 96 248 208 128 128 128 @@ -16,4 +16,4 @@ JASC-PAL 212 95 60 120 92 32 72 88 96 -48 56 72 +90 91 92 diff --git a/graphics/pokemon/kingambit/overworld.png b/graphics/pokemon/kingambit/overworld.png new file mode 100644 index 0000000000..ed65110068 Binary files /dev/null and b/graphics/pokemon/kingambit/overworld.png differ diff --git a/graphics/pokemon/kingambit/overworld_normal.pal b/graphics/pokemon/kingambit/overworld_normal.pal new file mode 100644 index 0000000000..fc2af0f1cf --- /dev/null +++ b/graphics/pokemon/kingambit/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +120 98 31 +181 149 21 +0 0 0 +227 227 235 +172 164 180 +230 189 65 +47 15 16 +67 25 25 +232 48 43 +127 41 43 +35 29 10 +57 52 51 +88 35 35 +96 94 94 +142 56 58 diff --git a/graphics/pokemon/kingambit/overworld_shiny.pal b/graphics/pokemon/kingambit/overworld_shiny.pal new file mode 100644 index 0000000000..80fa0d029e --- /dev/null +++ b/graphics/pokemon/kingambit/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +120 98 31 +181 149 21 +0 0 0 +227 227 235 +172 164 180 +230 189 65 +18 21 58 +38 45 123 +232 48 43 +49 57 156 +35 29 10 +57 52 51 +95 31 33 +96 94 94 +57 52 51 diff --git a/graphics/pokemon/kingler/overworld.png b/graphics/pokemon/kingler/overworld.png index 4538f564cf..135f79b326 100644 Binary files a/graphics/pokemon/kingler/overworld.png and b/graphics/pokemon/kingler/overworld.png differ diff --git a/graphics/pokemon/kingler/overworld_normal.pal b/graphics/pokemon/kingler/overworld_normal.pal index f79648f08b..a441b18609 100644 --- a/graphics/pokemon/kingler/overworld_normal.pal +++ b/graphics/pokemon/kingler/overworld_normal.pal @@ -10,7 +10,7 @@ JASC-PAL 224 192 152 232 232 248 160 128 80 -152 208 160 +189 189 230 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/klawf/overworld.png b/graphics/pokemon/klawf/overworld.png new file mode 100644 index 0000000000..edec75755e Binary files /dev/null and b/graphics/pokemon/klawf/overworld.png differ diff --git a/graphics/pokemon/klawf/overworld_normal.pal b/graphics/pokemon/klawf/overworld_normal.pal new file mode 100644 index 0000000000..d84569eb1f --- /dev/null +++ b/graphics/pokemon/klawf/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +69 34 27 +233 120 56 +146 71 56 +180 88 53 +56 55 49 +0 0 0 +200 200 238 +232 232 248 +126 119 89 +182 145 123 +88 89 55 +242 215 167 +195 95 90 +142 103 79 +195 95 90 diff --git a/graphics/pokemon/klawf/overworld_shiny.pal b/graphics/pokemon/klawf/overworld_shiny.pal new file mode 100644 index 0000000000..625f90ff0d --- /dev/null +++ b/graphics/pokemon/klawf/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +40 88 128 +88 176 232 +47 84 146 +69 123 195 +148 148 148 +0 0 0 +200 200 238 +232 232 248 +230 231 207 +190 161 138 +235 237 194 +253 229 187 +116 171 200 +141 133 71 +232 128 104 diff --git a/graphics/pokemon/koraidon/overworld.png b/graphics/pokemon/koraidon/overworld.png new file mode 100644 index 0000000000..6b35043046 Binary files /dev/null and b/graphics/pokemon/koraidon/overworld.png differ diff --git a/graphics/pokemon/koraidon/overworld_normal.pal b/graphics/pokemon/koraidon/overworld_normal.pal new file mode 100644 index 0000000000..5a116dcf2c --- /dev/null +++ b/graphics/pokemon/koraidon/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +236 234 228 +208 208 208 +104 97 106 +232 135 177 +227 77 150 +3 81 154 +43 52 133 +3 81 154 +234 74 61 +208 192 48 +171 63 63 +51 52 57 +137 52 53 +240 136 32 diff --git a/graphics/pokemon/koraidon/overworld_shiny.pal b/graphics/pokemon/koraidon/overworld_shiny.pal new file mode 100644 index 0000000000..3b5256a30b --- /dev/null +++ b/graphics/pokemon/koraidon/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +236 234 228 +208 208 208 +104 97 106 +254 231 95 +241 190 14 +221 19 115 +81 26 40 +147 30 68 +83 84 111 +208 192 48 +65 66 86 +58 59 71 +38 39 53 +241 190 14 diff --git a/graphics/pokemon/kricketot/overworld.png b/graphics/pokemon/kricketot/overworld.png index d9b6033cb9..3fe4a5e053 100644 Binary files a/graphics/pokemon/kricketot/overworld.png and b/graphics/pokemon/kricketot/overworld.png differ diff --git a/graphics/pokemon/krokorok/overworld.png b/graphics/pokemon/krokorok/overworld.png index 8f1b68615c..47e57ccd5e 100644 Binary files a/graphics/pokemon/krokorok/overworld.png and b/graphics/pokemon/krokorok/overworld.png differ diff --git a/graphics/pokemon/krookodile/overworld.png b/graphics/pokemon/krookodile/overworld.png index 9bac013544..d905625c55 100644 Binary files a/graphics/pokemon/krookodile/overworld.png and b/graphics/pokemon/krookodile/overworld.png differ diff --git a/graphics/pokemon/krookodile/overworld_normal.pal b/graphics/pokemon/krookodile/overworld_normal.pal index 04d2244669..e416936398 100644 --- a/graphics/pokemon/krookodile/overworld_normal.pal +++ b/graphics/pokemon/krookodile/overworld_normal.pal @@ -10,8 +10,8 @@ JASC-PAL 25 25 33 99 99 99 236 236 246 -99 99 99 -185 172 189 +35 35 35 +152 142 156 38 37 38 129 138 129 182 191 199 diff --git a/graphics/pokemon/krookodile/overworld_shiny.pal b/graphics/pokemon/krookodile/overworld_shiny.pal index 070a0a4e5d..c89ebe28de 100644 --- a/graphics/pokemon/krookodile/overworld_shiny.pal +++ b/graphics/pokemon/krookodile/overworld_shiny.pal @@ -8,10 +8,10 @@ JASC-PAL 168 136 88 0 0 0 224 200 88 -99 99 99 +48 48 48 236 236 246 168 144 64 -185 172 189 +122 94 0 38 37 38 129 138 129 182 191 199 diff --git a/graphics/pokemon/landorus/anim_front.png b/graphics/pokemon/landorus/anim_front.png index 762c5cd2e7..08808382b9 100644 Binary files a/graphics/pokemon/landorus/anim_front.png and b/graphics/pokemon/landorus/anim_front.png differ diff --git a/graphics/pokemon/landorus/back.png b/graphics/pokemon/landorus/back.png index f70121ac4f..9df361e4b6 100644 Binary files a/graphics/pokemon/landorus/back.png and b/graphics/pokemon/landorus/back.png differ diff --git a/graphics/pokemon/landorus/normal.pal b/graphics/pokemon/landorus/normal.pal index bbacdca837..36dd9dbac0 100644 --- a/graphics/pokemon/landorus/normal.pal +++ b/graphics/pokemon/landorus/normal.pal @@ -10,10 +10,10 @@ JASC-PAL 184 72 80 160 88 56 240 120 64 -51 51 34 +96 48 16 248 200 96 -51 51 51 +72 40 24 96 64 48 119 51 85 128 128 128 -0 0 0 +128 96 72 diff --git a/graphics/pokemon/landorus/shiny.pal b/graphics/pokemon/landorus/shiny.pal index 25f3ac5c93..c76bc2922b 100644 --- a/graphics/pokemon/landorus/shiny.pal +++ b/graphics/pokemon/landorus/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -88 112 88 -16 16 16 -248 248 248 -152 176 160 -88 64 40 -240 96 8 -160 96 16 -248 160 40 -80 48 24 -248 192 0 -56 32 16 -72 48 32 -120 72 40 -128 128 128 -0 0 0 +153 204 153 +90 115 90 +17 17 17 +255 255 255 +164 189 164 +115 65 57 +238 98 8 +180 115 24 +255 164 41 +82 49 24 +255 197 0 +41 24 16 +74 49 32 +172 82 32 +90 115 90 +106 65 41 diff --git a/graphics/pokemon/larvitar/overworld.png b/graphics/pokemon/larvitar/overworld.png index 04d3285142..4e3c8c8255 100644 Binary files a/graphics/pokemon/larvitar/overworld.png and b/graphics/pokemon/larvitar/overworld.png differ diff --git a/graphics/pokemon/latias/mega/front.png b/graphics/pokemon/latias/mega/front.png index bb51350564..491f02fa4b 100644 Binary files a/graphics/pokemon/latias/mega/front.png and b/graphics/pokemon/latias/mega/front.png differ diff --git a/graphics/pokemon/latios/mega/front.png b/graphics/pokemon/latios/mega/front.png index cc20e9d1cb..ebca8034d8 100644 Binary files a/graphics/pokemon/latios/mega/front.png and b/graphics/pokemon/latios/mega/front.png differ diff --git a/graphics/pokemon/leafeon/overworld.png b/graphics/pokemon/leafeon/overworld.png index bed79105c4..2a4f0fb984 100644 Binary files a/graphics/pokemon/leafeon/overworld.png and b/graphics/pokemon/leafeon/overworld.png differ diff --git a/graphics/pokemon/lechonk/overworld.png b/graphics/pokemon/lechonk/overworld.png new file mode 100644 index 0000000000..985cc22474 Binary files /dev/null and b/graphics/pokemon/lechonk/overworld.png differ diff --git a/graphics/pokemon/lechonk/overworld_normal.pal b/graphics/pokemon/lechonk/overworld_normal.pal new file mode 100644 index 0000000000..f8968afd93 --- /dev/null +++ b/graphics/pokemon/lechonk/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +54 65 74 +77 88 92 +36 44 49 +70 58 55 +146 119 95 +120 98 78 +144 40 64 +200 96 112 +232 232 248 +232 136 160 +242 215 127 +242 215 127 +175 147 96 +0 0 0 diff --git a/graphics/pokemon/lechonk/overworld_shiny.pal b/graphics/pokemon/lechonk/overworld_shiny.pal new file mode 100644 index 0000000000..6dc2976c31 --- /dev/null +++ b/graphics/pokemon/lechonk/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +246 180 213 +255 213 246 +206 81 118 +140 93 72 +214 158 134 +186 128 106 +125 45 65 +206 81 118 +232 232 248 +249 123 146 +250 205 50 +242 215 127 +209 164 5 +0 0 0 diff --git a/graphics/pokemon/ledian/overworld.png b/graphics/pokemon/ledian/overworld.png index 8ca49bef3b..64cd573aef 100644 Binary files a/graphics/pokemon/ledian/overworld.png and b/graphics/pokemon/ledian/overworld.png differ diff --git a/graphics/pokemon/ledyba/overworld.png b/graphics/pokemon/ledyba/overworld.png index 706008b919..b0132a6898 100644 Binary files a/graphics/pokemon/ledyba/overworld.png and b/graphics/pokemon/ledyba/overworld.png differ diff --git a/graphics/pokemon/lileep/overworld.png b/graphics/pokemon/lileep/overworld.png index 59494df354..9bfe530fb0 100644 Binary files a/graphics/pokemon/lileep/overworld.png and b/graphics/pokemon/lileep/overworld.png differ diff --git a/graphics/pokemon/lillipup/overworld_shiny.pal b/graphics/pokemon/lillipup/overworld_shiny.pal index 63bbc81935..ffdd1a31f2 100644 --- a/graphics/pokemon/lillipup/overworld_shiny.pal +++ b/graphics/pokemon/lillipup/overworld_shiny.pal @@ -2,11 +2,11 @@ JASC-PAL 0100 16 152 208 160 -104 72 16 -96 72 24 +97 62 1 +171 105 39 184 128 72 -232 176 88 0 0 0 +224 169 81 240 216 152 88 88 88 232 232 248 diff --git a/graphics/pokemon/lokix/overworld.png b/graphics/pokemon/lokix/overworld.png new file mode 100644 index 0000000000..c658f75b6b Binary files /dev/null and b/graphics/pokemon/lokix/overworld.png differ diff --git a/graphics/pokemon/lokix/overworld_normal.pal b/graphics/pokemon/lokix/overworld_normal.pal new file mode 100644 index 0000000000..17b2bb2205 --- /dev/null +++ b/graphics/pokemon/lokix/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +165 154 165 +80 80 80 +15 15 15 +41 40 41 +60 57 60 +96 115 129 +66 78 89 +232 232 248 +206 111 15 +247 166 49 +45 54 57 +15 15 15 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/lokix/overworld_shiny.pal b/graphics/pokemon/lokix/overworld_shiny.pal new file mode 100644 index 0000000000..4457b5d3bf --- /dev/null +++ b/graphics/pokemon/lokix/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +165 154 165 +188 193 91 +66 68 26 +96 99 37 +141 146 54 +105 104 105 +71 70 71 +232 232 248 +206 111 15 +247 166 49 +37 37 37 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/lumineon/overworld.png b/graphics/pokemon/lumineon/overworld.png index 670655a2a1..aeee26f6fd 100644 Binary files a/graphics/pokemon/lumineon/overworld.png and b/graphics/pokemon/lumineon/overworld.png differ diff --git a/graphics/pokemon/luxio/overworld.png b/graphics/pokemon/luxio/overworld.png index 939966d7fb..269a736cd4 100644 Binary files a/graphics/pokemon/luxio/overworld.png and b/graphics/pokemon/luxio/overworld.png differ diff --git a/graphics/pokemon/luxray/overworld.png b/graphics/pokemon/luxray/overworld.png index 9f1e835c56..aab5bafe7a 100644 Binary files a/graphics/pokemon/luxray/overworld.png and b/graphics/pokemon/luxray/overworld.png differ diff --git a/graphics/pokemon/mabosstiff/overworld.png b/graphics/pokemon/mabosstiff/overworld.png new file mode 100644 index 0000000000..132d7f7fcd Binary files /dev/null and b/graphics/pokemon/mabosstiff/overworld.png differ diff --git a/graphics/pokemon/mabosstiff/overworld_normal.pal b/graphics/pokemon/mabosstiff/overworld_normal.pal new file mode 100644 index 0000000000..38f2eb2739 --- /dev/null +++ b/graphics/pokemon/mabosstiff/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +132 125 132 +189 188 189 +218 218 218 +46 40 39 +0 0 0 +69 65 63 +99 84 77 +44 43 44 +132 117 104 +53 46 43 +28 28 28 +211 182 90 +42 25 38 +255 178 74 +0 0 0 diff --git a/graphics/pokemon/mabosstiff/overworld_shiny.pal b/graphics/pokemon/mabosstiff/overworld_shiny.pal new file mode 100644 index 0000000000..aaa8df0596 --- /dev/null +++ b/graphics/pokemon/mabosstiff/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +132 125 132 +189 188 189 +218 218 218 +46 40 39 +0 0 0 +69 65 63 +110 99 119 +44 43 44 +164 146 176 +57 51 63 +28 28 28 +211 182 90 +42 25 38 +255 178 74 +0 0 0 diff --git a/graphics/pokemon/machamp/overworld.png b/graphics/pokemon/machamp/overworld.png index 846ecd72ce..c584fd56db 100644 Binary files a/graphics/pokemon/machamp/overworld.png and b/graphics/pokemon/machamp/overworld.png differ diff --git a/graphics/pokemon/magearna/back.png b/graphics/pokemon/magearna/back.png index 17568f8bb2..2e3a77c512 100644 Binary files a/graphics/pokemon/magearna/back.png and b/graphics/pokemon/magearna/back.png differ diff --git a/graphics/pokemon/magearna/shiny.pal b/graphics/pokemon/magearna/shiny.pal index cb523c62f3..a8573fe8e9 100644 --- a/graphics/pokemon/magearna/shiny.pal +++ b/graphics/pokemon/magearna/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 153 211 165 -175 92 10 -252 238 137 -219 168 62 -218 192 200 -183 132 149 -119 83 89 +103 114 114 +234 236 236 +158 166 166 +209 216 216 +162 176 176 +110 130 130 16 16 16 -115 128 128 -248 248 248 -185 185 185 +94 100 100 +191 194 194 +140 147 147 252 154 188 248 82 111 12 168 201 -54 237 227 +221 233 229 67 63 61 diff --git a/graphics/pokemon/magneton/overworld.png b/graphics/pokemon/magneton/overworld.png index 692f46111a..f76dd62c00 100644 Binary files a/graphics/pokemon/magneton/overworld.png and b/graphics/pokemon/magneton/overworld.png differ diff --git a/graphics/pokemon/mamoswine/overworld.png b/graphics/pokemon/mamoswine/overworld.png index 201c3a7a84..2a4c4f7b84 100644 Binary files a/graphics/pokemon/mamoswine/overworld.png and b/graphics/pokemon/mamoswine/overworld.png differ diff --git a/graphics/pokemon/mantine/overworld.png b/graphics/pokemon/mantine/overworld.png index aad7776720..225941638b 100644 Binary files a/graphics/pokemon/mantine/overworld.png and b/graphics/pokemon/mantine/overworld.png differ diff --git a/graphics/pokemon/mantyke/overworld.png b/graphics/pokemon/mantyke/overworld.png index 9e935676bf..9768b5ed3e 100644 Binary files a/graphics/pokemon/mantyke/overworld.png and b/graphics/pokemon/mantyke/overworld.png differ diff --git a/graphics/pokemon/marowak/overworld.png b/graphics/pokemon/marowak/overworld.png index d37ef57309..92f619e0ad 100644 Binary files a/graphics/pokemon/marowak/overworld.png and b/graphics/pokemon/marowak/overworld.png differ diff --git a/graphics/pokemon/marshtomp/overworld.png b/graphics/pokemon/marshtomp/overworld.png index a2d25bbab8..c27d4aefa0 100644 Binary files a/graphics/pokemon/marshtomp/overworld.png and b/graphics/pokemon/marshtomp/overworld.png differ diff --git a/graphics/pokemon/maschiff/overworld.png b/graphics/pokemon/maschiff/overworld.png new file mode 100644 index 0000000000..9e4ada7b15 Binary files /dev/null and b/graphics/pokemon/maschiff/overworld.png differ diff --git a/graphics/pokemon/maschiff/overworld_normal.pal b/graphics/pokemon/maschiff/overworld_normal.pal new file mode 100644 index 0000000000..27c6224bc5 --- /dev/null +++ b/graphics/pokemon/maschiff/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +141 59 19 +255 202 8 +0 0 0 +195 120 22 +89 32 41 +147 59 59 +206 113 104 +42 25 38 +88 67 80 +203 109 45 +255 255 255 +66 44 61 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/maschiff/overworld_shiny.pal b/graphics/pokemon/maschiff/overworld_shiny.pal new file mode 100644 index 0000000000..0195e14cbc --- /dev/null +++ b/graphics/pokemon/maschiff/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +42 25 38 +88 67 80 +0 0 0 +66 44 61 +46 40 51 +102 92 114 +171 139 201 +42 25 38 +88 67 80 +203 109 45 +255 255 255 +66 44 61 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/maushold/four/overworld.png b/graphics/pokemon/maushold/four/overworld.png new file mode 100644 index 0000000000..5154c16a34 Binary files /dev/null and b/graphics/pokemon/maushold/four/overworld.png differ diff --git a/graphics/pokemon/maushold/four/overworld_normal.pal b/graphics/pokemon/maushold/four/overworld_normal.pal new file mode 100644 index 0000000000..ef7e6cad7c --- /dev/null +++ b/graphics/pokemon/maushold/four/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +57 58 68 +216 216 216 +249 249 249 +86 87 101 +249 249 249 +184 204 222 +119 157 191 +136 139 151 +48 48 48 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/maushold/four/overworld_shiny.pal b/graphics/pokemon/maushold/four/overworld_shiny.pal new file mode 100644 index 0000000000..9270b4e0ae --- /dev/null +++ b/graphics/pokemon/maushold/four/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +57 58 68 +216 216 216 +249 249 249 +86 87 101 +216 216 216 +225 210 181 +162 124 91 +136 139 151 +48 48 48 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/maushold/overworld.png b/graphics/pokemon/maushold/overworld.png new file mode 100644 index 0000000000..d235af4221 Binary files /dev/null and b/graphics/pokemon/maushold/overworld.png differ diff --git a/graphics/pokemon/maushold/overworld_normal.pal b/graphics/pokemon/maushold/overworld_normal.pal new file mode 100644 index 0000000000..ef7e6cad7c --- /dev/null +++ b/graphics/pokemon/maushold/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +57 58 68 +216 216 216 +249 249 249 +86 87 101 +249 249 249 +184 204 222 +119 157 191 +136 139 151 +48 48 48 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/maushold/overworld_shiny.pal b/graphics/pokemon/maushold/overworld_shiny.pal new file mode 100644 index 0000000000..9270b4e0ae --- /dev/null +++ b/graphics/pokemon/maushold/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +57 58 68 +216 216 216 +249 249 249 +86 87 101 +216 216 216 +225 210 181 +162 124 91 +136 139 151 +48 48 48 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/medicham/mega/back.png b/graphics/pokemon/medicham/mega/back.png index 692470be7a..336d79ce1c 100644 Binary files a/graphics/pokemon/medicham/mega/back.png and b/graphics/pokemon/medicham/mega/back.png differ diff --git a/graphics/pokemon/medicham/mega/front.png b/graphics/pokemon/medicham/mega/front.png index d375b55d42..9438f9d0df 100644 Binary files a/graphics/pokemon/medicham/mega/front.png and b/graphics/pokemon/medicham/mega/front.png differ diff --git a/graphics/pokemon/medicham/mega/normal.pal b/graphics/pokemon/medicham/mega/normal.pal index f7b8a8fd4e..2b0f86482e 100644 --- a/graphics/pokemon/medicham/mega/normal.pal +++ b/graphics/pokemon/medicham/mega/normal.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -176 72 88 -88 64 72 -136 128 136 -200 88 112 -224 112 136 -248 248 248 -208 200 200 -168 160 168 -16 16 16 -232 184 88 -160 112 40 -240 216 128 -64 160 184 -224 224 224 -16 72 88 +153 211 165 +23 75 93 +82 65 74 +164 115 41 +131 65 74 +180 74 90 +238 189 90 +230 115 139 +67 163 189 +139 131 139 +172 164 172 +17 17 17 +246 222 131 +197 197 197 +222 222 222 +250 250 250 diff --git a/graphics/pokemon/medicham/mega/shiny.pal b/graphics/pokemon/medicham/mega/shiny.pal index 2a07de3b1d..09fef3a592 100644 --- a/graphics/pokemon/medicham/mega/shiny.pal +++ b/graphics/pokemon/medicham/mega/shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -152 208 160 -16 72 88 -16 16 16 -136 128 136 -32 120 200 -80 160 224 -232 224 200 -232 224 200 -216 168 128 -16 16 16 -160 112 40 -160 112 40 -240 216 128 -64 160 184 -232 224 200 -16 72 88 +153 211 165 +0 122 112 +148 82 32 +163 153 24 +57 98 172 +90 131 205 +229 226 36 +156 180 255 +0 193 190 +180 123 65 +205 156 98 +17 17 17 +255 249 140 +230 189 131 +255 230 164 +250 250 250 diff --git a/graphics/pokemon/meganium/overworld.png b/graphics/pokemon/meganium/overworld.png index 4f1cb70829..3a93645c05 100644 Binary files a/graphics/pokemon/meganium/overworld.png and b/graphics/pokemon/meganium/overworld.png differ diff --git a/graphics/pokemon/meowscarada/overworld.png b/graphics/pokemon/meowscarada/overworld.png new file mode 100644 index 0000000000..91a3f57dbe Binary files /dev/null and b/graphics/pokemon/meowscarada/overworld.png differ diff --git a/graphics/pokemon/meowscarada/overworld_normal.pal b/graphics/pokemon/meowscarada/overworld_normal.pal new file mode 100644 index 0000000000..591dc9f8c0 --- /dev/null +++ b/graphics/pokemon/meowscarada/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +23 36 24 +41 55 38 +49 70 38 +151 177 150 +233 249 220 +96 126 95 +36 111 42 +40 153 57 +232 232 248 +141 71 85 +216 112 152 +236 138 168 +141 71 85 +227 81 124 diff --git a/graphics/pokemon/meowscarada/overworld_shiny.pal b/graphics/pokemon/meowscarada/overworld_shiny.pal new file mode 100644 index 0000000000..668bfe2930 --- /dev/null +++ b/graphics/pokemon/meowscarada/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +27 38 31 +26 48 45 +51 75 63 +151 177 150 +233 249 220 +96 126 95 +31 86 68 +49 124 93 +232 232 248 +111 78 167 +145 105 201 +145 105 201 +60 31 99 +111 78 167 diff --git a/graphics/pokemon/meowth/overworld.png b/graphics/pokemon/meowth/overworld.png index 4961e2ce85..cd3de0b77a 100644 Binary files a/graphics/pokemon/meowth/overworld.png and b/graphics/pokemon/meowth/overworld.png differ diff --git a/graphics/pokemon/mesprit/overworld.png b/graphics/pokemon/mesprit/overworld.png index ea0c72eece..5bb1711065 100644 Binary files a/graphics/pokemon/mesprit/overworld.png and b/graphics/pokemon/mesprit/overworld.png differ diff --git a/graphics/pokemon/mew/overworld.png b/graphics/pokemon/mew/overworld.png index 067d6c83d6..0a676ddf6c 100644 Binary files a/graphics/pokemon/mew/overworld.png and b/graphics/pokemon/mew/overworld.png differ diff --git a/graphics/pokemon/mewtwo/overworld.png b/graphics/pokemon/mewtwo/overworld.png index dbd7d5b76f..1e4da291c1 100644 Binary files a/graphics/pokemon/mewtwo/overworld.png and b/graphics/pokemon/mewtwo/overworld.png differ diff --git a/graphics/pokemon/mightyena/overworld.png b/graphics/pokemon/mightyena/overworld.png index a7d2325086..2765fd4fc0 100644 Binary files a/graphics/pokemon/mightyena/overworld.png and b/graphics/pokemon/mightyena/overworld.png differ diff --git a/graphics/pokemon/miltank/overworld.png b/graphics/pokemon/miltank/overworld.png index 351fc02f87..1ade843522 100644 Binary files a/graphics/pokemon/miltank/overworld.png and b/graphics/pokemon/miltank/overworld.png differ diff --git a/graphics/pokemon/mime_jr/overworld.png b/graphics/pokemon/mime_jr/overworld.png index 4021617fff..1958816f4a 100644 Binary files a/graphics/pokemon/mime_jr/overworld.png and b/graphics/pokemon/mime_jr/overworld.png differ diff --git a/graphics/pokemon/miraidon/overworld.png b/graphics/pokemon/miraidon/overworld.png new file mode 100644 index 0000000000..2080c760bb Binary files /dev/null and b/graphics/pokemon/miraidon/overworld.png differ diff --git a/graphics/pokemon/miraidon/overworld_normal.pal b/graphics/pokemon/miraidon/overworld_normal.pal new file mode 100644 index 0000000000..8a07fd2ac4 --- /dev/null +++ b/graphics/pokemon/miraidon/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +86 169 217 +0 0 0 +133 124 188 +158 152 202 +126 93 144 +39 39 60 +198 190 110 +86 63 105 +246 236 130 +49 47 125 +78 67 150 +231 234 241 +193 189 223 +133 124 188 +133 124 188 diff --git a/graphics/pokemon/miraidon/overworld_shiny.pal b/graphics/pokemon/miraidon/overworld_shiny.pal new file mode 100644 index 0000000000..4c43244656 --- /dev/null +++ b/graphics/pokemon/miraidon/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +86 169 217 +0 0 0 +133 128 160 +161 158 183 +126 93 144 +53 54 59 +198 190 110 +86 63 105 +246 236 130 +133 133 133 +165 165 165 +231 234 241 +193 189 223 +246 236 130 +86 169 217 diff --git a/graphics/pokemon/misdreavus/overworld.png b/graphics/pokemon/misdreavus/overworld.png index fbb6a2341b..1f623d2e0c 100644 Binary files a/graphics/pokemon/misdreavus/overworld.png and b/graphics/pokemon/misdreavus/overworld.png differ diff --git a/graphics/pokemon/moltres/galarian/overworld.png b/graphics/pokemon/moltres/galarian/overworld.png index 87e93311a8..b6aeb63f96 100644 Binary files a/graphics/pokemon/moltres/galarian/overworld.png and b/graphics/pokemon/moltres/galarian/overworld.png differ diff --git a/graphics/pokemon/moltres/galarian/overworld_normal.pal b/graphics/pokemon/moltres/galarian/overworld_normal.pal index ef0bee86ea..ca9a549d10 100644 --- a/graphics/pokemon/moltres/galarian/overworld_normal.pal +++ b/graphics/pokemon/moltres/galarian/overworld_normal.pal @@ -12,8 +12,8 @@ JASC-PAL 249 181 225 120 200 248 160 224 248 -11 11 11 -12 12 12 -13 13 13 -14 14 14 -15 15 15 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/moltres/galarian/overworld_shiny.pal b/graphics/pokemon/moltres/galarian/overworld_shiny.pal index ef0bee86ea..8330f2687a 100644 --- a/graphics/pokemon/moltres/galarian/overworld_shiny.pal +++ b/graphics/pokemon/moltres/galarian/overworld_shiny.pal @@ -5,15 +5,15 @@ JASC-PAL 0 0 0 0 0 0 61 0 25 -24 24 24 -56 56 56 -173 28 86 -235 88 147 -249 181 225 +229 185 8 +248 208 48 +240 80 32 +240 128 48 +248 232 104 120 200 248 160 224 248 -11 11 11 -12 12 12 -13 13 13 -14 14 14 -15 15 15 +255 255 255 +255 255 255 +255 255 255 +255 255 255 +255 255 255 diff --git a/graphics/pokemon/moltres/overworld.png b/graphics/pokemon/moltres/overworld.png index df9a412f11..43ff8386f7 100644 Binary files a/graphics/pokemon/moltres/overworld.png and b/graphics/pokemon/moltres/overworld.png differ diff --git a/graphics/pokemon/morelull/overworld.png b/graphics/pokemon/morelull/overworld.png index 6d164768a6..5f85740da2 100644 Binary files a/graphics/pokemon/morelull/overworld.png and b/graphics/pokemon/morelull/overworld.png differ diff --git a/graphics/pokemon/morelull/overworld_normal.pal b/graphics/pokemon/morelull/overworld_normal.pal index 52cbf93f93..6efa8c740b 100644 --- a/graphics/pokemon/morelull/overworld_normal.pal +++ b/graphics/pokemon/morelull/overworld_normal.pal @@ -6,11 +6,11 @@ JASC-PAL 245 210 217 220 210 232 242 196 206 -196 196 196 +184 131 178 191 196 122 158 158 158 171 152 193 -184 131 178 +196 196 255 146 150 89 224 124 140 120 120 120 diff --git a/graphics/pokemon/morelull/overworld_shiny.pal b/graphics/pokemon/morelull/overworld_shiny.pal index 87d1e9509a..7f3068c455 100644 --- a/graphics/pokemon/morelull/overworld_shiny.pal +++ b/graphics/pokemon/morelull/overworld_shiny.pal @@ -2,11 +2,11 @@ JASC-PAL 0100 16 255 255 255 -176 112 64 -240 144 120 +230 227 233 +186 57 24 220 210 232 -208 120 24 -196 196 196 +209 134 54 +240 192 72 191 196 122 158 158 158 112 40 24 diff --git a/graphics/pokemon/mothim/shiny.pal b/graphics/pokemon/mothim/shiny.pal index 7c5d2000a6..31bd384bd7 100644 --- a/graphics/pokemon/mothim/shiny.pal +++ b/graphics/pokemon/mothim/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -115 65 32 -230 106 41 -246 213 123 -189 156 98 -106 90 74 +40 80 104 +80 160 208 +232 232 136 +200 192 64 +136 128 32 16 16 16 -164 74 0 -205 205 205 -98 98 98 -148 148 148 -57 41 41 -106 90 90 -74 57 57 +40 120 152 +192 200 208 +80 88 104 +128 136 152 +40 48 40 +88 112 88 +56 72 48 0 0 0 0 0 0 diff --git a/graphics/pokemon/mr_mime/galarian/overworld.png b/graphics/pokemon/mr_mime/galarian/overworld.png index 122bda4a13..fd95946076 100644 Binary files a/graphics/pokemon/mr_mime/galarian/overworld.png and b/graphics/pokemon/mr_mime/galarian/overworld.png differ diff --git a/graphics/pokemon/mr_mime/galarian/overworld_normal.pal b/graphics/pokemon/mr_mime/galarian/overworld_normal.pal index 0166ba80d5..9783b2507f 100644 --- a/graphics/pokemon/mr_mime/galarian/overworld_normal.pal +++ b/graphics/pokemon/mr_mime/galarian/overworld_normal.pal @@ -7,7 +7,7 @@ JASC-PAL 89 106 134 59 49 48 53 69 94 -175 154 153 +135 118 118 0 0 0 246 226 225 255 255 255 @@ -16,4 +16,4 @@ JASC-PAL 190 190 190 113 170 190 104 104 104 -15 15 15 +255 255 255 diff --git a/graphics/pokemon/mr_mime/galarian/overworld_shiny.pal b/graphics/pokemon/mr_mime/galarian/overworld_shiny.pal index 0166ba80d5..b2ee5a4fd1 100644 --- a/graphics/pokemon/mr_mime/galarian/overworld_shiny.pal +++ b/graphics/pokemon/mr_mime/galarian/overworld_shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -197 44 44 +128 63 60 0 0 0 15 20 29 -89 106 134 +112 96 136 59 49 48 -53 69 94 -175 154 153 +96 72 104 +114 93 92 0 0 0 246 226 225 255 255 255 57 57 57 -164 222 242 +144 176 208 190 190 190 -113 170 190 +112 136 184 104 104 104 -15 15 15 +255 255 255 diff --git a/graphics/pokemon/munkidori/overworld.png b/graphics/pokemon/munkidori/overworld.png new file mode 100644 index 0000000000..5213ff14ce Binary files /dev/null and b/graphics/pokemon/munkidori/overworld.png differ diff --git a/graphics/pokemon/munkidori/overworld_normal.pal b/graphics/pokemon/munkidori/overworld_normal.pal new file mode 100644 index 0000000000..1a3e195ca0 --- /dev/null +++ b/graphics/pokemon/munkidori/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +78 73 71 +23 23 23 +45 45 45 +90 33 73 +64 74 104 +122 140 177 +174 201 233 +146 57 119 +202 103 162 +254 208 27 +206 157 9 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/munkidori/overworld_shiny.pal b/graphics/pokemon/munkidori/overworld_shiny.pal new file mode 100644 index 0000000000..14dd544d84 --- /dev/null +++ b/graphics/pokemon/munkidori/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +124 111 99 +53 48 43 +101 90 80 +90 33 73 +64 74 104 +122 140 177 +174 201 233 +146 57 119 +202 103 162 +254 208 27 +206 157 9 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/nacli/overworld.png b/graphics/pokemon/nacli/overworld.png new file mode 100644 index 0000000000..4ef41c54d6 Binary files /dev/null and b/graphics/pokemon/nacli/overworld.png differ diff --git a/graphics/pokemon/nacli/overworld_normal.pal b/graphics/pokemon/nacli/overworld_normal.pal new file mode 100644 index 0000000000..aaf398a7e2 --- /dev/null +++ b/graphics/pokemon/nacli/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +86 77 87 +191 180 186 +153 134 148 +252 252 252 +71 39 39 +142 95 87 +192 147 124 +213 184 170 +227 208 199 +0 0 0 +238 172 49 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/nacli/overworld_shiny.pal b/graphics/pokemon/nacli/overworld_shiny.pal new file mode 100644 index 0000000000..e6f359d021 --- /dev/null +++ b/graphics/pokemon/nacli/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +120 67 14 +234 152 70 +197 109 22 +238 173 108 +71 39 39 +142 95 87 +192 147 124 +213 184 170 +227 208 199 +0 0 0 +255 134 53 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/naclstack/back.png b/graphics/pokemon/naclstack/back.png index 34d80185e7..6d0238f3f4 100644 Binary files a/graphics/pokemon/naclstack/back.png and b/graphics/pokemon/naclstack/back.png differ diff --git a/graphics/pokemon/naclstack/front.png b/graphics/pokemon/naclstack/front.png index 4055c46cf3..646b29881c 100644 Binary files a/graphics/pokemon/naclstack/front.png and b/graphics/pokemon/naclstack/front.png differ diff --git a/graphics/pokemon/naclstack/normal.pal b/graphics/pokemon/naclstack/normal.pal index 2fd0dd7abd..19fea0383f 100644 --- a/graphics/pokemon/naclstack/normal.pal +++ b/graphics/pokemon/naclstack/normal.pal @@ -1,17 +1,19 @@ JASC-PAL 0100 -14 -153 211 165 -113 113 113 +16 +156 213 164 +148 98 90 +98 82 74 +123 123 123 +197 148 123 +230 213 205 +197 180 189 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 +82 82 82 +65 49 41 +139 115 98 +8 8 8 +238 139 24 +246 230 24 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/naclstack/overworld.png b/graphics/pokemon/naclstack/overworld.png new file mode 100644 index 0000000000..5698f25469 Binary files /dev/null and b/graphics/pokemon/naclstack/overworld.png differ diff --git a/graphics/pokemon/naclstack/overworld_normal.pal b/graphics/pokemon/naclstack/overworld_normal.pal new file mode 100644 index 0000000000..c718f0e1e7 --- /dev/null +++ b/graphics/pokemon/naclstack/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +86 77 87 +68 51 46 +228 209 200 +195 146 123 +150 103 90 +15 15 15 +252 252 252 +100 81 77 +153 134 148 +123 101 96 +191 180 186 +234 136 28 +238 172 49 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/naclstack/overworld_shiny.pal b/graphics/pokemon/naclstack/overworld_shiny.pal new file mode 100644 index 0000000000..3108cd887d --- /dev/null +++ b/graphics/pokemon/naclstack/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +123 73 49 +68 51 46 +228 209 200 +195 146 123 +150 103 90 +15 15 15 +233 184 148 +100 81 77 +154 91 61 +123 101 96 +196 134 104 +234 136 28 +238 172 49 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/naclstack/shiny.pal b/graphics/pokemon/naclstack/shiny.pal index a8f14a01b0..94d60d4731 100644 --- a/graphics/pokemon/naclstack/shiny.pal +++ b/graphics/pokemon/naclstack/shiny.pal @@ -1,17 +1,19 @@ 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 +16 +156 213 164 +148 98 90 +98 82 74 +123 98 65 +197 148 123 +230 213 205 +197 131 106 +238 189 148 +90 57 49 +65 49 41 +139 115 98 +8 8 8 +238 139 24 +246 230 24 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/numel/overworld.png b/graphics/pokemon/numel/overworld.png index 38b5a2421d..b12082c684 100644 Binary files a/graphics/pokemon/numel/overworld.png and b/graphics/pokemon/numel/overworld.png differ diff --git a/graphics/pokemon/nymble/overworld.png b/graphics/pokemon/nymble/overworld.png new file mode 100644 index 0000000000..a47b53235d Binary files /dev/null and b/graphics/pokemon/nymble/overworld.png differ diff --git a/graphics/pokemon/nymble/overworld_normal.pal b/graphics/pokemon/nymble/overworld_normal.pal new file mode 100644 index 0000000000..d214b03756 --- /dev/null +++ b/graphics/pokemon/nymble/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +47 50 60 +75 88 112 +99 115 140 +192 189 192 +221 225 228 +255 198 8 +163 130 21 +176 172 176 +99 97 100 +99 115 140 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/nymble/overworld_shiny.pal b/graphics/pokemon/nymble/overworld_shiny.pal new file mode 100644 index 0000000000..fbabea45b9 --- /dev/null +++ b/graphics/pokemon/nymble/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +88 81 28 +188 179 94 +233 228 136 +192 189 192 +221 225 228 +255 198 8 +163 130 21 +176 172 176 +99 97 100 +99 115 140 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/ogerpon/cornerstone/overworld.png b/graphics/pokemon/ogerpon/cornerstone/overworld.png new file mode 100644 index 0000000000..e691e22838 Binary files /dev/null and b/graphics/pokemon/ogerpon/cornerstone/overworld.png differ diff --git a/graphics/pokemon/ogerpon/cornerstone/overworld_normal.pal b/graphics/pokemon/ogerpon/cornerstone/overworld_normal.pal new file mode 100644 index 0000000000..a07f75d10c --- /dev/null +++ b/graphics/pokemon/ogerpon/cornerstone/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +7 7 7 +81 56 34 +51 51 51 +89 96 106 +87 70 62 +48 83 40 +148 152 151 +97 167 27 +74 139 39 +44 43 41 +75 76 76 +0 211 249 +0 150 176 +255 218 70 +253 253 253 diff --git a/graphics/pokemon/ogerpon/cornerstone/overworld_shiny.pal b/graphics/pokemon/ogerpon/cornerstone/overworld_shiny.pal new file mode 100644 index 0000000000..a07f75d10c --- /dev/null +++ b/graphics/pokemon/ogerpon/cornerstone/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +7 7 7 +81 56 34 +51 51 51 +89 96 106 +87 70 62 +48 83 40 +148 152 151 +97 167 27 +74 139 39 +44 43 41 +75 76 76 +0 211 249 +0 150 176 +255 218 70 +253 253 253 diff --git a/graphics/pokemon/ogerpon/hearthflame/overworld.png b/graphics/pokemon/ogerpon/hearthflame/overworld.png new file mode 100644 index 0000000000..782b969b22 Binary files /dev/null and b/graphics/pokemon/ogerpon/hearthflame/overworld.png differ diff --git a/graphics/pokemon/ogerpon/hearthflame/overworld_normal.pal b/graphics/pokemon/ogerpon/hearthflame/overworld_normal.pal new file mode 100644 index 0000000000..d1b98b69d4 --- /dev/null +++ b/graphics/pokemon/ogerpon/hearthflame/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +81 56 34 +209 154 24 +87 70 62 +240 192 0 +48 83 40 +255 218 70 +74 139 39 +164 52 49 +44 43 41 +75 76 76 +255 213 213 +253 253 253 +0 211 249 +12 65 129 diff --git a/graphics/pokemon/ogerpon/hearthflame/overworld_shiny.pal b/graphics/pokemon/ogerpon/hearthflame/overworld_shiny.pal new file mode 100644 index 0000000000..d1b98b69d4 --- /dev/null +++ b/graphics/pokemon/ogerpon/hearthflame/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +81 56 34 +209 154 24 +87 70 62 +240 192 0 +48 83 40 +255 218 70 +74 139 39 +164 52 49 +44 43 41 +75 76 76 +255 213 213 +253 253 253 +0 211 249 +12 65 129 diff --git a/graphics/pokemon/ogerpon/overworld.png b/graphics/pokemon/ogerpon/overworld.png new file mode 100644 index 0000000000..2492e2b1ef Binary files /dev/null and b/graphics/pokemon/ogerpon/overworld.png differ diff --git a/graphics/pokemon/ogerpon/overworld_normal.pal b/graphics/pokemon/ogerpon/overworld_normal.pal new file mode 100644 index 0000000000..4731e3a6ac --- /dev/null +++ b/graphics/pokemon/ogerpon/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +4 83 79 +81 56 34 +9 164 156 +48 83 40 +97 167 27 +87 70 62 +0 0 0 +44 43 41 +75 76 76 +178 216 161 +253 253 253 +128 190 101 +186 114 41 +219 156 94 +255 218 70 diff --git a/graphics/pokemon/ogerpon/overworld_shiny.pal b/graphics/pokemon/ogerpon/overworld_shiny.pal new file mode 100644 index 0000000000..4731e3a6ac --- /dev/null +++ b/graphics/pokemon/ogerpon/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +4 83 79 +81 56 34 +9 164 156 +48 83 40 +97 167 27 +87 70 62 +0 0 0 +44 43 41 +75 76 76 +178 216 161 +253 253 253 +128 190 101 +186 114 41 +219 156 94 +255 218 70 diff --git a/graphics/pokemon/ogerpon/wellspring/overworld.png b/graphics/pokemon/ogerpon/wellspring/overworld.png new file mode 100644 index 0000000000..fc5c73af38 Binary files /dev/null and b/graphics/pokemon/ogerpon/wellspring/overworld.png differ diff --git a/graphics/pokemon/ogerpon/wellspring/overworld_normal.pal b/graphics/pokemon/ogerpon/wellspring/overworld_normal.pal new file mode 100644 index 0000000000..ac44883772 --- /dev/null +++ b/graphics/pokemon/ogerpon/wellspring/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +48 83 40 +74 139 39 +97 167 27 +0 0 0 +81 56 34 +2 104 187 +44 43 41 +87 70 62 +75 76 76 +59 213 249 +12 65 129 +156 206 220 +206 221 255 +253 253 253 +255 218 70 diff --git a/graphics/pokemon/ogerpon/wellspring/overworld_shiny.pal b/graphics/pokemon/ogerpon/wellspring/overworld_shiny.pal new file mode 100644 index 0000000000..ac44883772 --- /dev/null +++ b/graphics/pokemon/ogerpon/wellspring/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +48 83 40 +74 139 39 +97 167 27 +0 0 0 +81 56 34 +2 104 187 +44 43 41 +87 70 62 +75 76 76 +59 213 249 +12 65 129 +156 206 220 +206 221 255 +253 253 253 +255 218 70 diff --git a/graphics/pokemon/oinkologne/female/overworld.png b/graphics/pokemon/oinkologne/female/overworld.png new file mode 100644 index 0000000000..baaa8874c5 Binary files /dev/null and b/graphics/pokemon/oinkologne/female/overworld.png differ diff --git a/graphics/pokemon/oinkologne/female/overworld_normal.pal b/graphics/pokemon/oinkologne/female/overworld_normal.pal new file mode 100644 index 0000000000..f82149b8ba --- /dev/null +++ b/graphics/pokemon/oinkologne/female/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +38 30 31 +181 109 93 +132 89 82 +63 48 50 +90 69 74 +16 16 16 +125 45 65 +232 136 160 +200 96 112 +232 232 248 +175 147 96 +242 215 127 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/oinkologne/female/overworld_shiny.pal b/graphics/pokemon/oinkologne/female/overworld_shiny.pal new file mode 100644 index 0000000000..e6e8a6ed5e --- /dev/null +++ b/graphics/pokemon/oinkologne/female/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +190 137 169 +255 244 247 +220 192 209 +240 132 186 +251 187 238 +16 16 16 +125 45 65 +232 136 160 +200 96 112 +232 232 248 +175 147 96 +242 215 127 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/oinkologne/overworld.png b/graphics/pokemon/oinkologne/overworld.png new file mode 100644 index 0000000000..d1044b78c6 Binary files /dev/null and b/graphics/pokemon/oinkologne/overworld.png differ diff --git a/graphics/pokemon/oinkologne/overworld_normal.pal b/graphics/pokemon/oinkologne/overworld_normal.pal new file mode 100644 index 0000000000..e8ef3923f7 --- /dev/null +++ b/graphics/pokemon/oinkologne/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +28 22 33 +66 54 78 +49 40 58 +64 64 80 +96 88 101 +16 16 16 +125 45 65 +232 136 160 +200 96 112 +175 147 96 +242 215 127 +232 232 248 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/oinkologne/overworld_shiny.pal b/graphics/pokemon/oinkologne/overworld_shiny.pal new file mode 100644 index 0000000000..805883eed3 --- /dev/null +++ b/graphics/pokemon/oinkologne/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +190 137 169 +255 244 247 +220 192 209 +240 132 186 +251 187 238 +16 16 16 +125 45 65 +232 136 160 +200 96 112 +175 147 96 +242 215 127 +232 232 248 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/okidogi/overworld.png b/graphics/pokemon/okidogi/overworld.png new file mode 100644 index 0000000000..6bbcea7ab3 Binary files /dev/null and b/graphics/pokemon/okidogi/overworld.png differ diff --git a/graphics/pokemon/okidogi/overworld_normal.pal b/graphics/pokemon/okidogi/overworld_normal.pal new file mode 100644 index 0000000000..46d3fc547d --- /dev/null +++ b/graphics/pokemon/okidogi/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +90 33 73 +146 57 119 +16 18 17 +202 103 162 +78 73 71 +45 45 45 +0 0 0 +121 167 58 +84 117 53 +248 216 88 +29 57 21 +192 192 208 +232 232 248 +16 18 17 +0 0 0 diff --git a/graphics/pokemon/okidogi/overworld_shiny.pal b/graphics/pokemon/okidogi/overworld_shiny.pal new file mode 100644 index 0000000000..947e5aacdb --- /dev/null +++ b/graphics/pokemon/okidogi/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +90 33 73 +146 57 119 +125 59 24 +202 103 162 +254 161 104 +180 102 61 +0 0 0 +121 167 58 +84 117 53 +248 216 88 +29 57 21 +192 192 208 +232 232 248 +16 18 17 +0 0 0 diff --git a/graphics/pokemon/orthworm/front.png b/graphics/pokemon/orthworm/front.png index 87535ce92c..14884ce2c7 100755 Binary files a/graphics/pokemon/orthworm/front.png and b/graphics/pokemon/orthworm/front.png differ diff --git a/graphics/pokemon/orthworm/overworld.png b/graphics/pokemon/orthworm/overworld.png new file mode 100644 index 0000000000..5bef2cc020 Binary files /dev/null and b/graphics/pokemon/orthworm/overworld.png differ diff --git a/graphics/pokemon/orthworm/overworld_normal.pal b/graphics/pokemon/orthworm/overworld_normal.pal new file mode 100644 index 0000000000..3146fa0d74 --- /dev/null +++ b/graphics/pokemon/orthworm/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +82 88 92 +0 0 0 +209 209 218 +146 152 156 +247 154 148 +247 100 90 +189 73 74 +150 209 226 +150 209 226 +150 209 226 +73 41 39 +252 206 186 +189 146 140 +129 55 55 +0 0 0 diff --git a/graphics/pokemon/orthworm/overworld_shiny.pal b/graphics/pokemon/orthworm/overworld_shiny.pal new file mode 100644 index 0000000000..16d023df87 --- /dev/null +++ b/graphics/pokemon/orthworm/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +82 88 92 +0 0 0 +209 209 218 +146 152 156 +183 255 253 +124 219 233 +108 168 179 +52 83 104 +150 209 226 +184 223 235 +30 48 53 +231 217 207 +192 175 160 +79 125 134 +0 0 0 diff --git a/graphics/pokemon/oshawott/overworld.png b/graphics/pokemon/oshawott/overworld.png index 55e4a27106..03d3edb9a1 100644 Binary files a/graphics/pokemon/oshawott/overworld.png and b/graphics/pokemon/oshawott/overworld.png differ diff --git a/graphics/pokemon/oshawott/overworld_normal.pal b/graphics/pokemon/oshawott/overworld_normal.pal index 20114cf4c3..dc59774f8c 100644 --- a/graphics/pokemon/oshawott/overworld_normal.pal +++ b/graphics/pokemon/oshawott/overworld_normal.pal @@ -4,16 +4,16 @@ JASC-PAL 152 208 160 56 56 72 252 252 252 -41 76 102 +30 81 120 197 197 205 0 0 0 -41 76 102 +32 90 98 136 114 87 100 100 100 197 197 205 -167 157 148 +53 138 144 34 159 167 197 197 205 -0 0 0 -0 0 0 +224 194 85 +140 104 76 0 0 0 diff --git a/graphics/pokemon/oshawott/overworld_shiny.pal b/graphics/pokemon/oshawott/overworld_shiny.pal index dbb08f80a3..8a208f696c 100644 --- a/graphics/pokemon/oshawott/overworld_shiny.pal +++ b/graphics/pokemon/oshawott/overworld_shiny.pal @@ -7,13 +7,13 @@ JASC-PAL 37 69 81 200 208 160 0 0 0 -50 82 182 +50 75 150 183 109 96 100 100 100 197 197 205 -144 161 200 +71 111 202 93 135 210 238 205 131 -0 0 0 -0 0 0 +252 232 198 +227 197 167 0 0 0 diff --git a/graphics/pokemon/palafin/hero/overworld.png b/graphics/pokemon/palafin/hero/overworld.png new file mode 100644 index 0000000000..8d6d7e5c75 Binary files /dev/null and b/graphics/pokemon/palafin/hero/overworld.png differ diff --git a/graphics/pokemon/palafin/hero/overworld_normal.pal b/graphics/pokemon/palafin/hero/overworld_normal.pal new file mode 100644 index 0000000000..d3f497b16a --- /dev/null +++ b/graphics/pokemon/palafin/hero/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +7 85 107 +107 150 186 +0 0 0 +140 213 255 +41 134 222 +0 105 206 +6 74 142 +252 252 252 +16 45 82 +252 252 252 +175 163 175 +175 163 175 +132 45 74 +181 62 107 +171 192 212 diff --git a/graphics/pokemon/palafin/hero/overworld_shiny.pal b/graphics/pokemon/palafin/hero/overworld_shiny.pal new file mode 100644 index 0000000000..1a59866ee0 --- /dev/null +++ b/graphics/pokemon/palafin/hero/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +7 85 107 +107 150 186 +0 0 0 +140 213 255 +125 109 163 +96 80 126 +66 52 88 +252 252 252 +43 38 62 +55 80 231 +175 163 175 +45 61 161 +132 45 74 +181 62 107 +171 192 212 diff --git a/graphics/pokemon/palafin/overworld.png b/graphics/pokemon/palafin/overworld.png new file mode 100644 index 0000000000..25b24ce33b Binary files /dev/null and b/graphics/pokemon/palafin/overworld.png differ diff --git a/graphics/pokemon/palafin/overworld_normal.pal b/graphics/pokemon/palafin/overworld_normal.pal new file mode 100644 index 0000000000..d12a4a8845 --- /dev/null +++ b/graphics/pokemon/palafin/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +32 57 62 +82 202 219 +55 155 173 +0 0 0 +221 241 247 +33 97 107 +137 219 230 +163 179 182 +238 248 251 +66 178 255 +140 223 255 +65 132 146 +247 174 181 +173 89 115 +0 0 0 diff --git a/graphics/pokemon/palafin/overworld_shiny.pal b/graphics/pokemon/palafin/overworld_shiny.pal new file mode 100644 index 0000000000..dcd5b52e24 --- /dev/null +++ b/graphics/pokemon/palafin/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +52 50 99 +169 171 239 +133 135 233 +0 0 0 +221 241 247 +91 93 155 +187 190 227 +163 179 182 +238 248 251 +66 178 255 +140 223 255 +65 132 146 +130 246 158 +173 89 115 +0 0 0 diff --git a/graphics/pokemon/palkia/origin/overworld_shiny.pal b/graphics/pokemon/palkia/origin/overworld_shiny.pal new file mode 100644 index 0000000000..8a6f0c4ab8 --- /dev/null +++ b/graphics/pokemon/palkia/origin/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +32 97 0 +0 0 0 +246 80 65 +172 161 180 +255 238 238 +246 161 156 +131 121 148 +16 16 16 +197 190 213 +246 194 189 +164 80 164 +205 137 197 +106 97 24 +222 218 246 +65 72 74 +82 80 90 diff --git a/graphics/pokemon/pawmi/overworld.png b/graphics/pokemon/pawmi/overworld.png new file mode 100644 index 0000000000..cc290c5df0 Binary files /dev/null and b/graphics/pokemon/pawmi/overworld.png differ diff --git a/graphics/pokemon/pawmi/overworld_normal.pal b/graphics/pokemon/pawmi/overworld_normal.pal new file mode 100644 index 0000000000..ba86a5077b --- /dev/null +++ b/graphics/pokemon/pawmi/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +173 97 39 +104 57 23 +0 0 0 +236 158 63 +232 138 36 +14 148 130 +0 108 92 +250 233 189 +185 167 132 +232 232 248 +101 74 74 +239 181 59 +245 213 86 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/pawmi/overworld_shiny.pal b/graphics/pokemon/pawmi/overworld_shiny.pal new file mode 100644 index 0000000000..0d0ab2a95e --- /dev/null +++ b/graphics/pokemon/pawmi/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +220 58 50 +138 40 50 +0 0 0 +255 119 147 +237 82 82 +14 148 130 +0 108 92 +244 226 188 +228 167 137 +232 232 248 +101 74 74 +239 181 59 +245 213 86 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/pawmo/overworld.png b/graphics/pokemon/pawmo/overworld.png new file mode 100644 index 0000000000..f2eb40bd17 Binary files /dev/null and b/graphics/pokemon/pawmo/overworld.png differ diff --git a/graphics/pokemon/pawmo/overworld_normal.pal b/graphics/pokemon/pawmo/overworld_normal.pal new file mode 100644 index 0000000000..57dacf0fad --- /dev/null +++ b/graphics/pokemon/pawmo/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +173 97 39 +104 57 23 +236 158 63 +232 138 36 +14 148 130 +0 108 92 +232 232 248 +250 233 189 +101 74 74 +239 181 59 +245 213 86 +185 167 132 +121 103 68 +0 0 0 diff --git a/graphics/pokemon/pawmo/overworld_shiny.pal b/graphics/pokemon/pawmo/overworld_shiny.pal new file mode 100644 index 0000000000..06e78da0b5 --- /dev/null +++ b/graphics/pokemon/pawmo/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +188 99 113 +125 40 47 +238 153 157 +211 118 120 +14 148 130 +0 108 92 +232 232 248 +250 233 189 +101 74 74 +214 177 67 +255 205 32 +185 167 132 +121 103 68 +0 0 0 diff --git a/graphics/pokemon/pawmot/overworld.png b/graphics/pokemon/pawmot/overworld.png new file mode 100644 index 0000000000..a1901f38dc Binary files /dev/null and b/graphics/pokemon/pawmot/overworld.png differ diff --git a/graphics/pokemon/pawmot/overworld_normal.pal b/graphics/pokemon/pawmot/overworld_normal.pal new file mode 100644 index 0000000000..a6f18aa8ec --- /dev/null +++ b/graphics/pokemon/pawmot/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +173 97 39 +104 57 23 +236 158 63 +0 0 0 +232 138 36 +14 148 130 +0 108 92 +232 232 248 +250 233 189 +101 74 74 +239 181 59 +245 213 86 +185 167 132 +121 103 68 +0 0 0 diff --git a/graphics/pokemon/pawmot/overworld_shiny.pal b/graphics/pokemon/pawmot/overworld_shiny.pal new file mode 100644 index 0000000000..ab7f411a19 --- /dev/null +++ b/graphics/pokemon/pawmot/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +191 62 74 +104 43 44 +236 128 133 +0 0 0 +218 88 98 +14 148 130 +0 108 92 +232 232 248 +250 233 189 +101 74 74 +223 173 0 +255 205 32 +185 167 132 +121 103 68 +0 0 0 diff --git a/graphics/pokemon/pecharunt/overworld.png b/graphics/pokemon/pecharunt/overworld.png new file mode 100644 index 0000000000..18273d58a2 Binary files /dev/null and b/graphics/pokemon/pecharunt/overworld.png differ diff --git a/graphics/pokemon/pecharunt/overworld_normal.pal b/graphics/pokemon/pecharunt/overworld_normal.pal new file mode 100644 index 0000000000..729252d4e3 --- /dev/null +++ b/graphics/pokemon/pecharunt/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +46 44 51 +0 0 0 +53 37 84 +97 71 146 +76 54 114 +227 69 184 +108 19 88 +55 53 61 +253 147 255 +73 73 73 +167 50 140 +239 239 239 +138 65 147 +179 41 147 +0 0 0 diff --git a/graphics/pokemon/pecharunt/overworld_shiny.pal b/graphics/pokemon/pecharunt/overworld_shiny.pal new file mode 100644 index 0000000000..e5cad0c303 --- /dev/null +++ b/graphics/pokemon/pecharunt/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +46 44 51 +0 0 0 +142 88 0 +236 170 47 +186 130 27 +227 69 184 +108 19 88 +55 53 61 +253 147 255 +73 73 73 +167 50 140 +239 239 239 +138 65 147 +179 41 147 +0 0 0 diff --git a/graphics/pokemon/phione/overworld.png b/graphics/pokemon/phione/overworld.png index 2a66fefecb..dd97cec50a 100644 Binary files a/graphics/pokemon/phione/overworld.png and b/graphics/pokemon/phione/overworld.png differ diff --git a/graphics/pokemon/pincurchin/shiny.pal b/graphics/pokemon/pincurchin/shiny.pal index dd03c31a28..a2b0a156a7 100644 --- a/graphics/pokemon/pincurchin/shiny.pal +++ b/graphics/pokemon/pincurchin/shiny.pal @@ -13,7 +13,7 @@ JASC-PAL 248 136 40 248 240 40 192 88 16 -0 0 0 -0 0 0 +173 255 239 +20 255 210 0 0 0 0 0 0 diff --git a/graphics/pokemon/pinsir/overworld.png b/graphics/pokemon/pinsir/overworld.png index 3ac6218fe7..001af798e9 100644 Binary files a/graphics/pokemon/pinsir/overworld.png and b/graphics/pokemon/pinsir/overworld.png differ diff --git a/graphics/pokemon/politoed/overworld.png b/graphics/pokemon/politoed/overworld.png index aadde5b614..a7310fdf6c 100644 Binary files a/graphics/pokemon/politoed/overworld.png and b/graphics/pokemon/politoed/overworld.png differ diff --git a/graphics/pokemon/poltchageist/overworld.png b/graphics/pokemon/poltchageist/overworld.png new file mode 100644 index 0000000000..0c57bfda4e Binary files /dev/null and b/graphics/pokemon/poltchageist/overworld.png differ diff --git a/graphics/pokemon/poltchageist/overworld_normal.pal b/graphics/pokemon/poltchageist/overworld_normal.pal new file mode 100644 index 0000000000..136dde5d08 --- /dev/null +++ b/graphics/pokemon/poltchageist/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +159 153 130 +241 239 238 +208 210 193 +76 58 58 +167 186 114 +247 218 103 +66 122 46 +120 196 99 +93 158 74 +37 27 27 +105 68 27 +0 0 0 +204 195 116 +208 210 193 +160 151 80 diff --git a/graphics/pokemon/poltchageist/overworld_shiny.pal b/graphics/pokemon/poltchageist/overworld_shiny.pal new file mode 100644 index 0000000000..97ed509130 --- /dev/null +++ b/graphics/pokemon/poltchageist/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +159 153 130 +241 239 238 +208 210 193 +32 72 13 +167 186 114 +247 218 103 +66 122 46 +120 196 99 +93 158 74 +24 43 17 +153 160 88 +0 0 0 +204 195 116 +209 209 214 +153 160 88 diff --git a/graphics/pokemon/ponyta/galarian/back.png b/graphics/pokemon/ponyta/galarian/back.png index fe45584312..f798d5cb45 100644 Binary files a/graphics/pokemon/ponyta/galarian/back.png and b/graphics/pokemon/ponyta/galarian/back.png differ diff --git a/graphics/pokemon/ponyta/galarian/overworld.png b/graphics/pokemon/ponyta/galarian/overworld.png index ac61386576..683780312b 100644 Binary files a/graphics/pokemon/ponyta/galarian/overworld.png and b/graphics/pokemon/ponyta/galarian/overworld.png differ diff --git a/graphics/pokemon/ponyta/galarian/overworld_normal.pal b/graphics/pokemon/ponyta/galarian/overworld_normal.pal index 81bbedb6be..2889031392 100644 --- a/graphics/pokemon/ponyta/galarian/overworld_normal.pal +++ b/graphics/pokemon/ponyta/galarian/overworld_normal.pal @@ -1,7 +1,7 @@ JASC-PAL 0100 16 -131 129 131 +152 208 160 123 72 123 131 121 90 32 32 32 diff --git a/graphics/pokemon/ponyta/galarian/overworld_shiny.pal b/graphics/pokemon/ponyta/galarian/overworld_shiny.pal index 81bbedb6be..143612d3ea 100644 --- a/graphics/pokemon/ponyta/galarian/overworld_shiny.pal +++ b/graphics/pokemon/ponyta/galarian/overworld_shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -131 129 131 -123 72 123 +152 208 160 +200 144 48 131 121 90 32 32 32 -230 222 164 -197 109 197 -65 113 106 -213 153 213 +192 216 200 +240 200 80 +66 149 97 +248 240 160 189 186 189 -246 226 172 +71 180 150 238 234 255 0 0 0 -106 222 222 -115 113 65 -230 186 230 -246 242 222 +128 248 176 +72 88 72 +229 218 105 +232 248 240 diff --git a/graphics/pokemon/ponyta/galarian/shiny.pal b/graphics/pokemon/ponyta/galarian/shiny.pal index 707eb51faa..62925ea1a8 100644 --- a/graphics/pokemon/ponyta/galarian/shiny.pal +++ b/graphics/pokemon/ponyta/galarian/shiny.pal @@ -2,15 +2,15 @@ JASC-PAL 0100 16 152 208 160 -72 184 120 -16 144 64 -128 248 176 -200 144 48 -248 240 160 -240 200 80 +72 200 232 +48 152 168 +128 224 216 +199 171 123 +247 244 203 +240 219 158 72 88 72 16 16 16 -88 32 120 +64 56 165 232 248 240 192 216 200 136 160 144 diff --git a/graphics/pokemon/porygon_z/overworld.png b/graphics/pokemon/porygon_z/overworld.png index 88c46e03b2..0072823c2d 100644 Binary files a/graphics/pokemon/porygon_z/overworld.png and b/graphics/pokemon/porygon_z/overworld.png differ diff --git a/graphics/pokemon/prinplup/overworld.png b/graphics/pokemon/prinplup/overworld.png index 2ff43dd8cd..52e8e08926 100644 Binary files a/graphics/pokemon/prinplup/overworld.png and b/graphics/pokemon/prinplup/overworld.png differ diff --git a/graphics/pokemon/probopass/overworld.png b/graphics/pokemon/probopass/overworld.png index 6f74308964..e4d0685df3 100644 Binary files a/graphics/pokemon/probopass/overworld.png and b/graphics/pokemon/probopass/overworld.png differ diff --git a/graphics/pokemon/quaquaval/overworld.png b/graphics/pokemon/quaquaval/overworld.png new file mode 100644 index 0000000000..33688d19dc Binary files /dev/null and b/graphics/pokemon/quaquaval/overworld.png differ diff --git a/graphics/pokemon/quaquaval/overworld_normal.pal b/graphics/pokemon/quaquaval/overworld_normal.pal new file mode 100644 index 0000000000..0dcbae55dc --- /dev/null +++ b/graphics/pokemon/quaquaval/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +27 67 84 +85 219 230 +0 0 0 +51 63 147 +57 75 238 +65 155 194 +40 42 77 +213 228 240 +135 59 26 +227 70 15 +162 71 32 +247 249 250 +219 175 0 +219 175 0 +129 130 130 diff --git a/graphics/pokemon/quaquaval/overworld_shiny.pal b/graphics/pokemon/quaquaval/overworld_shiny.pal new file mode 100644 index 0000000000..127e88a727 --- /dev/null +++ b/graphics/pokemon/quaquaval/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +27 67 84 +85 219 230 +0 0 0 +125 128 176 +163 168 240 +65 155 194 +71 74 124 +213 228 240 +91 65 30 +225 131 80 +199 107 46 +247 249 250 +199 107 46 +237 169 54 +129 130 130 diff --git a/graphics/pokemon/quaxly/overworld.png b/graphics/pokemon/quaxly/overworld.png new file mode 100644 index 0000000000..179e0eb60b Binary files /dev/null and b/graphics/pokemon/quaxly/overworld.png differ diff --git a/graphics/pokemon/quaxly/overworld_normal.pal b/graphics/pokemon/quaxly/overworld_normal.pal new file mode 100644 index 0000000000..5cd13fb8aa --- /dev/null +++ b/graphics/pokemon/quaxly/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +76 190 204 +76 190 204 +109 203 214 +43 139 153 +177 197 224 +248 248 248 +33 109 120 +213 228 240 +129 130 130 +255 209 28 +246 251 252 +0 91 162 +219 175 0 +128 88 24 diff --git a/graphics/pokemon/quaxly/overworld_shiny.pal b/graphics/pokemon/quaxly/overworld_shiny.pal new file mode 100644 index 0000000000..bcde7ef47b --- /dev/null +++ b/graphics/pokemon/quaxly/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +48 169 112 +37 218 128 +109 231 170 +36 115 71 +177 197 224 +248 248 248 +36 115 71 +213 228 240 +129 130 130 +255 209 28 +246 251 252 +0 91 162 +219 175 0 +128 88 24 diff --git a/graphics/pokemon/quaxwell/overworld.png b/graphics/pokemon/quaxwell/overworld.png new file mode 100644 index 0000000000..2a6af6924c Binary files /dev/null and b/graphics/pokemon/quaxwell/overworld.png differ diff --git a/graphics/pokemon/quaxwell/overworld_normal.pal b/graphics/pokemon/quaxwell/overworld_normal.pal new file mode 100644 index 0000000000..cd91098e63 --- /dev/null +++ b/graphics/pokemon/quaxwell/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +29 123 210 +20 90 154 +59 145 222 +31 142 158 +74 202 221 +37 175 194 +213 228 240 +248 248 248 +219 175 0 +246 251 253 +255 209 28 +128 88 24 +129 130 130 +0 0 0 diff --git a/graphics/pokemon/quaxwell/overworld_shiny.pal b/graphics/pokemon/quaxwell/overworld_shiny.pal new file mode 100644 index 0000000000..f799dbde39 --- /dev/null +++ b/graphics/pokemon/quaxwell/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +111 198 179 +22 111 118 +121 255 232 +36 46 132 +82 125 226 +55 71 213 +213 228 240 +248 248 248 +219 175 0 +246 251 253 +255 209 28 +128 88 24 +129 130 130 +0 0 0 diff --git a/graphics/pokemon/quilava/overworld.png b/graphics/pokemon/quilava/overworld.png index a7ee14f2f9..4a710024eb 100644 Binary files a/graphics/pokemon/quilava/overworld.png and b/graphics/pokemon/quilava/overworld.png differ diff --git a/graphics/pokemon/qwilfish/hisuian/overworld_shiny.pal b/graphics/pokemon/qwilfish/hisuian/overworld_shiny.pal index 63bab6514a..9f03da9c2e 100644 --- a/graphics/pokemon/qwilfish/hisuian/overworld_shiny.pal +++ b/graphics/pokemon/qwilfish/hisuian/overworld_shiny.pal @@ -2,11 +2,11 @@ JASC-PAL 0100 16 152 208 160 -131 123 98 +56 55 50 131 123 106 74 57 131 0 0 0 -189 49 156 +128 92 240 189 189 189 148 139 139 238 238 255 diff --git a/graphics/pokemon/qwilfish/overworld.png b/graphics/pokemon/qwilfish/overworld.png index a76a841965..50debe9174 100644 Binary files a/graphics/pokemon/qwilfish/overworld.png and b/graphics/pokemon/qwilfish/overworld.png differ diff --git a/graphics/pokemon/rabsca/overworld.png b/graphics/pokemon/rabsca/overworld.png new file mode 100644 index 0000000000..a9d99e1b49 Binary files /dev/null and b/graphics/pokemon/rabsca/overworld.png differ diff --git a/graphics/pokemon/rabsca/overworld_normal.pal b/graphics/pokemon/rabsca/overworld_normal.pal new file mode 100644 index 0000000000..673a41028a --- /dev/null +++ b/graphics/pokemon/rabsca/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +117 0 130 +227 16 251 +171 14 171 +174 31 84 +247 57 131 +249 98 158 +107 192 221 +63 79 92 +94 162 198 +247 57 131 +204 204 204 +248 248 248 +154 27 72 +152 151 157 diff --git a/graphics/pokemon/rabsca/overworld_shiny.pal b/graphics/pokemon/rabsca/overworld_shiny.pal new file mode 100644 index 0000000000..ad8aa75f2d --- /dev/null +++ b/graphics/pokemon/rabsca/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +117 0 130 +227 16 251 +171 14 171 +174 31 84 +247 57 131 +249 98 158 +215 179 36 +152 118 39 +152 118 39 +84 66 22 +204 204 204 +248 248 248 +84 66 22 +152 151 157 diff --git a/graphics/pokemon/raging_bolt/overworld.png b/graphics/pokemon/raging_bolt/overworld.png new file mode 100644 index 0000000000..b7faeef2e7 Binary files /dev/null and b/graphics/pokemon/raging_bolt/overworld.png differ diff --git a/graphics/pokemon/raging_bolt/overworld_normal.pal b/graphics/pokemon/raging_bolt/overworld_normal.pal new file mode 100644 index 0000000000..ee77a37aa2 --- /dev/null +++ b/graphics/pokemon/raging_bolt/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +133 164 184 +232 232 248 +64 32 96 +0 0 0 +112 56 144 +160 88 184 +81 89 93 +88 64 40 +52 88 100 +117 30 30 +184 48 48 +112 56 144 +232 184 64 +184 120 16 +117 30 30 diff --git a/graphics/pokemon/raging_bolt/overworld_shiny.pal b/graphics/pokemon/raging_bolt/overworld_shiny.pal new file mode 100644 index 0000000000..5498dc74b1 --- /dev/null +++ b/graphics/pokemon/raging_bolt/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +133 164 184 +232 232 248 +133 71 3 +0 0 0 +214 168 12 +253 204 23 +81 89 93 +88 64 40 +52 88 100 +20 20 67 +51 51 164 +112 56 144 +247 159 53 +201 118 6 +51 51 164 diff --git a/graphics/pokemon/raikou/overworld.png b/graphics/pokemon/raikou/overworld.png index 8936847f40..2bad9c9b2a 100644 Binary files a/graphics/pokemon/raikou/overworld.png and b/graphics/pokemon/raikou/overworld.png differ diff --git a/graphics/pokemon/rampardos/overworld.png b/graphics/pokemon/rampardos/overworld.png index 7687dcc264..2e1c24c790 100644 Binary files a/graphics/pokemon/rampardos/overworld.png and b/graphics/pokemon/rampardos/overworld.png differ diff --git a/graphics/pokemon/rapidash/galarian/back.png b/graphics/pokemon/rapidash/galarian/back.png index df065bf1f0..59816614d9 100644 Binary files a/graphics/pokemon/rapidash/galarian/back.png and b/graphics/pokemon/rapidash/galarian/back.png differ diff --git a/graphics/pokemon/rapidash/galarian/overworld.png b/graphics/pokemon/rapidash/galarian/overworld.png index f2a28d0427..1271349061 100644 Binary files a/graphics/pokemon/rapidash/galarian/overworld.png and b/graphics/pokemon/rapidash/galarian/overworld.png differ diff --git a/graphics/pokemon/rapidash/galarian/overworld_shiny.pal b/graphics/pokemon/rapidash/galarian/overworld_shiny.pal index f317ac3300..fa425be9b7 100644 --- a/graphics/pokemon/rapidash/galarian/overworld_shiny.pal +++ b/graphics/pokemon/rapidash/galarian/overworld_shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -128 128 128 +152 208 160 18 2 31 -61 9 100 +0 24 96 71 113 111 107 220 217 167 235 232 62 62 62 -121 74 121 +176 144 32 245 243 220 -198 110 198 +237 237 137 255 255 255 0 0 0 -214 154 214 -226 187 226 +233 217 173 +248 248 208 232 232 248 230 223 160 diff --git a/graphics/pokemon/rapidash/galarian/shiny.pal b/graphics/pokemon/rapidash/galarian/shiny.pal index c1b04fe6b8..3a76f1576d 100644 --- a/graphics/pokemon/rapidash/galarian/shiny.pal +++ b/graphics/pokemon/rapidash/galarian/shiny.pal @@ -6,11 +6,11 @@ JASC-PAL 128 224 200 56 192 168 16 16 16 -176 144 32 +176 160 104 240 240 240 -224 216 128 +224 220 175 0 24 96 -248 248 208 +247 247 228 104 104 120 200 200 208 160 160 176 diff --git a/graphics/pokemon/rapidash/overworld.png b/graphics/pokemon/rapidash/overworld.png index f63e4811b2..337bcc89e8 100644 Binary files a/graphics/pokemon/rapidash/overworld.png and b/graphics/pokemon/rapidash/overworld.png differ diff --git a/graphics/pokemon/regieleki/overworld.png b/graphics/pokemon/regieleki/overworld.png index 83a177ae2e..154015c385 100644 Binary files a/graphics/pokemon/regieleki/overworld.png and b/graphics/pokemon/regieleki/overworld.png differ diff --git a/graphics/pokemon/regieleki/overworld_normal.pal b/graphics/pokemon/regieleki/overworld_normal.pal index 1c69e174c2..f6bab934e8 100644 --- a/graphics/pokemon/regieleki/overworld_normal.pal +++ b/graphics/pokemon/regieleki/overworld_normal.pal @@ -10,7 +10,7 @@ JASC-PAL 208 168 8 248 248 192 248 152 192 -0 0 0 +232 119 176 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/regieleki/overworld_shiny.pal b/graphics/pokemon/regieleki/overworld_shiny.pal index 52fc33ef18..ae43ceece9 100644 --- a/graphics/pokemon/regieleki/overworld_shiny.pal +++ b/graphics/pokemon/regieleki/overworld_shiny.pal @@ -9,8 +9,8 @@ JASC-PAL 172 164 205 172 172 106 238 246 172 -230 238 49 -0 0 0 +248 152 192 +232 119 176 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/regirock/overworld.png b/graphics/pokemon/regirock/overworld.png index 1a5f11a9e7..683bbf9fb6 100644 Binary files a/graphics/pokemon/regirock/overworld.png and b/graphics/pokemon/regirock/overworld.png differ diff --git a/graphics/pokemon/rellor/overworld.png b/graphics/pokemon/rellor/overworld.png new file mode 100644 index 0000000000..013def8683 Binary files /dev/null and b/graphics/pokemon/rellor/overworld.png differ diff --git a/graphics/pokemon/rellor/overworld_normal.pal b/graphics/pokemon/rellor/overworld_normal.pal new file mode 100644 index 0000000000..27a0a57884 --- /dev/null +++ b/graphics/pokemon/rellor/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +91 77 55 +243 135 37 +158 132 97 +197 180 170 +0 0 0 +119 99 72 +185 108 38 +162 142 134 +87 82 68 +119 116 99 +55 51 43 +162 142 134 +176 167 102 +197 180 170 +255 128 192 diff --git a/graphics/pokemon/rellor/overworld_shiny.pal b/graphics/pokemon/rellor/overworld_shiny.pal new file mode 100644 index 0000000000..dcb4086a30 --- /dev/null +++ b/graphics/pokemon/rellor/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +152 118 39 +222 222 7 +249 248 87 +222 222 7 +0 0 0 +215 179 36 +179 149 30 +179 149 30 +87 82 68 +119 116 99 +55 51 43 +162 142 134 +176 167 102 +197 180 170 +63 72 204 diff --git a/graphics/pokemon/revavroom/overworld.png b/graphics/pokemon/revavroom/overworld.png new file mode 100644 index 0000000000..1a0925f858 Binary files /dev/null and b/graphics/pokemon/revavroom/overworld.png differ diff --git a/graphics/pokemon/revavroom/overworld_normal.pal b/graphics/pokemon/revavroom/overworld_normal.pal new file mode 100644 index 0000000000..0e83397e4e --- /dev/null +++ b/graphics/pokemon/revavroom/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +28 28 28 +79 40 79 +0 0 0 +66 61 67 +121 66 127 +195 193 195 +62 48 60 +131 121 134 +217 215 217 +85 73 90 +255 205 6 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/revavroom/overworld_shiny.pal b/graphics/pokemon/revavroom/overworld_shiny.pal new file mode 100644 index 0000000000..0b40638c18 --- /dev/null +++ b/graphics/pokemon/revavroom/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +28 28 28 +51 45 85 +0 0 0 +89 80 49 +77 61 150 +247 234 143 +62 48 60 +180 161 96 +250 241 184 +85 73 90 +237 142 178 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/riolu/overworld_shiny.pal b/graphics/pokemon/riolu/overworld_shiny.pal index 5f57dfa96c..a25260795b 100644 --- a/graphics/pokemon/riolu/overworld_shiny.pal +++ b/graphics/pokemon/riolu/overworld_shiny.pal @@ -13,7 +13,7 @@ JASC-PAL 232 232 248 152 24 48 176 184 192 -8 152 248 +122 169 191 40 40 40 0 0 0 0 0 0 diff --git a/graphics/pokemon/roaring_moon/overworld.png b/graphics/pokemon/roaring_moon/overworld.png new file mode 100644 index 0000000000..8ce7752709 Binary files /dev/null and b/graphics/pokemon/roaring_moon/overworld.png differ diff --git a/graphics/pokemon/roaring_moon/overworld_normal.pal b/graphics/pokemon/roaring_moon/overworld_normal.pal new file mode 100644 index 0000000000..c288efe676 --- /dev/null +++ b/graphics/pokemon/roaring_moon/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +26 109 121 +55 201 208 +124 219 224 +204 84 108 +0 0 0 +96 32 32 +54 52 56 +160 64 64 +128 128 144 +63 140 167 +55 201 208 +41 76 90 +222 186 41 +36 35 36 +41 76 90 diff --git a/graphics/pokemon/roaring_moon/overworld_shiny.pal b/graphics/pokemon/roaring_moon/overworld_shiny.pal new file mode 100644 index 0000000000..da16f77be5 --- /dev/null +++ b/graphics/pokemon/roaring_moon/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +118 111 56 +222 186 41 +223 213 113 +216 88 120 +0 0 0 +96 32 32 +54 52 56 +160 64 64 +128 128 144 +48 168 64 +104 192 112 +40 88 40 +222 186 41 +36 35 36 +41 76 90 diff --git a/graphics/pokemon/roserade/overworld.png b/graphics/pokemon/roserade/overworld.png index 68745987cd..f5aa7ddfeb 100644 Binary files a/graphics/pokemon/roserade/overworld.png and b/graphics/pokemon/roserade/overworld.png differ diff --git a/graphics/pokemon/runerigus/shiny.pal b/graphics/pokemon/runerigus/shiny.pal index 6166d5bfd6..8fd4e72f06 100644 --- a/graphics/pokemon/runerigus/shiny.pal +++ b/graphics/pokemon/runerigus/shiny.pal @@ -10,7 +10,7 @@ JASC-PAL 216 208 208 184 88 208 144 40 168 -168 56 208 +56 208 174 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/salamence/anim_front.png b/graphics/pokemon/salamence/anim_front.png index 977f43a6f8..41a8818996 100644 Binary files a/graphics/pokemon/salamence/anim_front.png and b/graphics/pokemon/salamence/anim_front.png differ diff --git a/graphics/pokemon/salamence/mega/front.png b/graphics/pokemon/salamence/mega/front.png index bec9a92549..44812fa058 100644 Binary files a/graphics/pokemon/salamence/mega/front.png and b/graphics/pokemon/salamence/mega/front.png differ diff --git a/graphics/pokemon/samurott/hisuian/overworld.png b/graphics/pokemon/samurott/hisuian/overworld.png index 6dd47d5777..7d4db0b87d 100644 Binary files a/graphics/pokemon/samurott/hisuian/overworld.png and b/graphics/pokemon/samurott/hisuian/overworld.png differ diff --git a/graphics/pokemon/samurott/hisuian/overworld_normal.pal b/graphics/pokemon/samurott/hisuian/overworld_normal.pal index e6be3b5f56..15854747e9 100644 --- a/graphics/pokemon/samurott/hisuian/overworld_normal.pal +++ b/graphics/pokemon/samurott/hisuian/overworld_normal.pal @@ -6,7 +6,7 @@ JASC-PAL 0 0 0 238 238 255 189 189 197 -16 24 49 +14 22 48 189 49 49 32 24 32 41 49 74 diff --git a/graphics/pokemon/samurott/hisuian/overworld_shiny.pal b/graphics/pokemon/samurott/hisuian/overworld_shiny.pal index 827453552a..494b52f0aa 100644 --- a/graphics/pokemon/samurott/hisuian/overworld_shiny.pal +++ b/graphics/pokemon/samurott/hisuian/overworld_shiny.pal @@ -8,7 +8,7 @@ JASC-PAL 189 189 197 16 24 49 180 164 156 -197 189 197 +84 80 84 222 213 222 139 115 106 238 238 246 diff --git a/graphics/pokemon/sandy_shocks/overworld.png b/graphics/pokemon/sandy_shocks/overworld.png new file mode 100644 index 0000000000..945f54e85c Binary files /dev/null and b/graphics/pokemon/sandy_shocks/overworld.png differ diff --git a/graphics/pokemon/sandy_shocks/overworld_normal.pal b/graphics/pokemon/sandy_shocks/overworld_normal.pal new file mode 100644 index 0000000000..3d38ac9e7e --- /dev/null +++ b/graphics/pokemon/sandy_shocks/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +80 80 80 +56 56 56 +35 35 35 +139 180 164 +232 64 64 +176 176 184 +180 213 189 +213 246 222 +105 92 126 +254 234 98 +72 136 232 +112 112 120 +224 205 79 +0 0 0 diff --git a/graphics/pokemon/sandy_shocks/overworld_shiny.pal b/graphics/pokemon/sandy_shocks/overworld_shiny.pal new file mode 100644 index 0000000000..151c472b17 --- /dev/null +++ b/graphics/pokemon/sandy_shocks/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +80 80 80 +56 56 56 +35 35 35 +128 120 104 +112 112 120 +176 176 184 +168 160 136 +208 200 168 +80 80 80 +254 234 98 +112 112 120 +112 112 120 +224 205 79 +0 0 0 diff --git a/graphics/pokemon/sawsbuck/summer/overworld.png b/graphics/pokemon/sawsbuck/summer/overworld.png index 7bb026e55d..1926a5f071 100644 Binary files a/graphics/pokemon/sawsbuck/summer/overworld.png and b/graphics/pokemon/sawsbuck/summer/overworld.png differ diff --git a/graphics/pokemon/sawsbuck/summer/overworld_shiny.pal b/graphics/pokemon/sawsbuck/summer/overworld_shiny.pal index 34f7d0f0b4..4d2a5df53c 100644 --- a/graphics/pokemon/sawsbuck/summer/overworld_shiny.pal +++ b/graphics/pokemon/sawsbuck/summer/overworld_shiny.pal @@ -5,13 +5,13 @@ JASC-PAL 0 0 0 8 136 64 27 81 44 -40 19 12 -199 170 85 -233 219 172 -176 104 32 +238 222 164 +74 16 8 +84 35 16 +178 114 49 128 64 16 -207 124 25 -141 98 51 +183 167 84 +255 255 255 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/sceptile/overworld.png b/graphics/pokemon/sceptile/overworld.png index b33a076b3c..8cc5861777 100644 Binary files a/graphics/pokemon/sceptile/overworld.png and b/graphics/pokemon/sceptile/overworld.png differ diff --git a/graphics/pokemon/scizor/overworld.png b/graphics/pokemon/scizor/overworld.png index 2b88f0e58a..69caaa3e90 100644 Binary files a/graphics/pokemon/scizor/overworld.png and b/graphics/pokemon/scizor/overworld.png differ diff --git a/graphics/pokemon/scovillain/overworld.png b/graphics/pokemon/scovillain/overworld.png new file mode 100644 index 0000000000..a0dcf40433 Binary files /dev/null and b/graphics/pokemon/scovillain/overworld.png differ diff --git a/graphics/pokemon/scovillain/overworld_normal.pal b/graphics/pokemon/scovillain/overworld_normal.pal new file mode 100644 index 0000000000..355e603188 --- /dev/null +++ b/graphics/pokemon/scovillain/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +100 30 28 +247 107 50 +162 52 36 +37 48 36 +66 128 75 +81 196 68 +0 0 0 +105 171 123 +66 128 75 +240 251 227 +221 88 0 +41 78 37 +66 128 75 +60 80 66 +205 205 205 diff --git a/graphics/pokemon/scovillain/overworld_shiny.pal b/graphics/pokemon/scovillain/overworld_shiny.pal new file mode 100644 index 0000000000..c9eea1f6f1 --- /dev/null +++ b/graphics/pokemon/scovillain/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +100 30 28 +239 81 49 +162 52 36 +40 61 56 +63 129 71 +81 196 68 +0 0 0 +240 220 104 +223 204 96 +240 251 227 +221 88 0 +75 24 17 +87 150 213 +72 101 176 +205 205 205 diff --git a/graphics/pokemon/scream_tail/overworld.png b/graphics/pokemon/scream_tail/overworld.png new file mode 100644 index 0000000000..d99bfcce5f Binary files /dev/null and b/graphics/pokemon/scream_tail/overworld.png differ diff --git a/graphics/pokemon/scream_tail/overworld_normal.pal b/graphics/pokemon/scream_tail/overworld_normal.pal new file mode 100644 index 0000000000..3d3331c23c --- /dev/null +++ b/graphics/pokemon/scream_tail/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +116 80 88 +244 215 222 +116 80 88 +219 186 195 +172 128 142 +0 0 0 +255 125 148 +55 50 55 +192 89 110 +230 158 156 +232 232 248 +214 186 41 +181 150 8 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/scream_tail/overworld_shiny.pal b/graphics/pokemon/scream_tail/overworld_shiny.pal new file mode 100644 index 0000000000..5cabe5af04 --- /dev/null +++ b/graphics/pokemon/scream_tail/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +97 63 82 +255 223 237 +116 80 88 +242 198 222 +216 160 192 +0 0 0 +255 121 255 +55 50 55 +201 82 192 +230 158 156 +232 232 248 +242 132 132 +232 36 36 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/seel/overworld.png b/graphics/pokemon/seel/overworld.png index cc9dbad620..7f83952fbe 100644 Binary files a/graphics/pokemon/seel/overworld.png and b/graphics/pokemon/seel/overworld.png differ diff --git a/graphics/pokemon/serperior/overworld.png b/graphics/pokemon/serperior/overworld.png index 8cee61f966..4b71f89831 100644 Binary files a/graphics/pokemon/serperior/overworld.png and b/graphics/pokemon/serperior/overworld.png differ diff --git a/graphics/pokemon/serperior/overworld_normal.pal b/graphics/pokemon/serperior/overworld_normal.pal index 3733e903b2..6600b8af88 100644 --- a/graphics/pokemon/serperior/overworld_normal.pal +++ b/graphics/pokemon/serperior/overworld_normal.pal @@ -3,17 +3,17 @@ JASC-PAL 16 128 208 232 12 98 39 -106 115 57 +115 112 57 24 156 74 -236 173 21 +248 248 248 8 16 16 156 213 156 236 173 21 115 164 115 -12 98 39 -236 173 21 +5 59 26 +248 128 0 24 156 74 -0 0 0 -0 0 0 -0 0 0 +208 152 8 +12 98 39 +5 59 26 0 0 0 diff --git a/graphics/pokemon/serperior/overworld_shiny.pal b/graphics/pokemon/serperior/overworld_shiny.pal index eafc2d1fda..2a03f663f2 100644 --- a/graphics/pokemon/serperior/overworld_shiny.pal +++ b/graphics/pokemon/serperior/overworld_shiny.pal @@ -8,12 +8,12 @@ JASC-PAL 207 215 195 7 14 14 168 232 104 -185 175 53 +224 248 152 96 166 87 -40 56 48 -212 33 0 +40 48 56 +248 64 24 24 156 74 -0 0 0 -0 0 0 -0 0 0 +184 179 114 +43 99 64 +0 72 40 0 0 0 diff --git a/graphics/pokemon/servine/overworld.png b/graphics/pokemon/servine/overworld.png index b329b47837..5c9caeec8c 100644 Binary files a/graphics/pokemon/servine/overworld.png and b/graphics/pokemon/servine/overworld.png differ diff --git a/graphics/pokemon/servine/overworld_normal.pal b/graphics/pokemon/servine/overworld_normal.pal index ca1ffe3c14..58041cf5a3 100644 --- a/graphics/pokemon/servine/overworld_normal.pal +++ b/graphics/pokemon/servine/overworld_normal.pal @@ -10,9 +10,9 @@ JASC-PAL 141 120 48 251 243 199 110 64 20 -0 0 0 -0 0 0 -0 0 0 +193 193 147 +63 89 63 +184 72 32 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/servine/overworld_shiny.pal b/graphics/pokemon/servine/overworld_shiny.pal index ff9fff5133..ef343bda48 100644 --- a/graphics/pokemon/servine/overworld_shiny.pal +++ b/graphics/pokemon/servine/overworld_shiny.pal @@ -3,16 +3,16 @@ JASC-PAL 16 152 208 160 32 48 72 -0 0 0 237 151 18 40 152 168 -63 74 11 32 88 160 -138 103 54 +0 0 0 +74 58 11 218 221 187 -0 0 0 -0 0 0 -0 0 0 +144 24 40 +182 189 145 +63 84 89 +248 48 48 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/shieldon/overworld.png b/graphics/pokemon/shieldon/overworld.png index 4636dda608..16e2badb2b 100644 Binary files a/graphics/pokemon/shieldon/overworld.png and b/graphics/pokemon/shieldon/overworld.png differ diff --git a/graphics/pokemon/shieldon/overworld_normal.pal b/graphics/pokemon/shieldon/overworld_normal.pal index 0a5616640e..24d23ae8b8 100644 --- a/graphics/pokemon/shieldon/overworld_normal.pal +++ b/graphics/pokemon/shieldon/overworld_normal.pal @@ -12,7 +12,7 @@ JASC-PAL 200 200 200 56 48 40 232 232 248 -152 208 160 +184 184 184 104 80 48 0 0 0 0 0 0 diff --git a/graphics/pokemon/shiftry/overworld.png b/graphics/pokemon/shiftry/overworld.png index 2716938e6e..0d7e72ce99 100644 Binary files a/graphics/pokemon/shiftry/overworld.png and b/graphics/pokemon/shiftry/overworld.png differ diff --git a/graphics/pokemon/shroodle/back.png b/graphics/pokemon/shroodle/back.png index ffecfe183c..3bb3cb4a58 100755 Binary files a/graphics/pokemon/shroodle/back.png and b/graphics/pokemon/shroodle/back.png differ diff --git a/graphics/pokemon/shroodle/front.png b/graphics/pokemon/shroodle/front.png index 38dac9194a..aa6410070e 100755 Binary files a/graphics/pokemon/shroodle/front.png and b/graphics/pokemon/shroodle/front.png differ diff --git a/graphics/pokemon/shroodle/overworld.png b/graphics/pokemon/shroodle/overworld.png new file mode 100644 index 0000000000..b541795edf Binary files /dev/null and b/graphics/pokemon/shroodle/overworld.png differ diff --git a/graphics/pokemon/shroodle/overworld_normal.pal b/graphics/pokemon/shroodle/overworld_normal.pal new file mode 100644 index 0000000000..6c76f5afcf --- /dev/null +++ b/graphics/pokemon/shroodle/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +112 101 101 +169 157 149 +134 120 120 +40 37 51 +51 63 77 +51 48 61 +70 66 84 +0 0 0 +74 84 100 +138 194 162 +162 203 166 +182 171 184 +230 227 227 +184 184 200 +87 69 150 diff --git a/graphics/pokemon/shroodle/overworld_shiny.pal b/graphics/pokemon/shroodle/overworld_shiny.pal new file mode 100644 index 0000000000..057d2ac34b --- /dev/null +++ b/graphics/pokemon/shroodle/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +112 101 101 +169 157 149 +125 121 118 +39 37 43 +128 149 168 +72 68 65 +125 121 118 +0 0 0 +187 210 227 +189 142 215 +225 171 233 +182 171 184 +230 227 227 +184 184 200 +220 105 197 diff --git a/graphics/pokemon/shroodle/shiny.pal b/graphics/pokemon/shroodle/shiny.pal index bb3f9a6a7d..67046e31cf 100755 --- a/graphics/pokemon/shroodle/shiny.pal +++ b/graphics/pokemon/shroodle/shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -96 88 88 -232 236 200 +125 121 118 +236 235 232 16 16 16 -176 168 136 -64 76 104 -72 60 56 +172 166 153 +79 104 117 +72 68 65 48 36 40 -128 156 168 -168 168 224 -96 108 136 +187 210 227 +173 114 205 +128 149 168 248 252 248 -208 200 248 +225 171 233 184 176 184 -160 112 224 +225 52 239 0 0 0 diff --git a/graphics/pokemon/sigilyph/overworld.png b/graphics/pokemon/sigilyph/overworld.png index 3f28054070..a39813710c 100644 Binary files a/graphics/pokemon/sigilyph/overworld.png and b/graphics/pokemon/sigilyph/overworld.png differ diff --git a/graphics/pokemon/sigilyph/overworld_normal.pal b/graphics/pokemon/sigilyph/overworld_normal.pal index 95d6d5cb63..32ef424021 100644 --- a/graphics/pokemon/sigilyph/overworld_normal.pal +++ b/graphics/pokemon/sigilyph/overworld_normal.pal @@ -2,17 +2,17 @@ JASC-PAL 0100 16 152 208 160 -33 112 129 -72 70 22 +16 88 105 +147 50 4 7 7 7 63 164 227 171 92 25 255 191 5 40 40 40 -192 192 203 +248 248 248 47 155 63 -0 0 0 -0 0 0 +206 0 46 +18 117 33 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/sigilyph/overworld_shiny.pal b/graphics/pokemon/sigilyph/overworld_shiny.pal index 24e47afc05..9c3f2da54b 100644 --- a/graphics/pokemon/sigilyph/overworld_shiny.pal +++ b/graphics/pokemon/sigilyph/overworld_shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -203 38 19 -90 63 20 +117 76 35 +120 48 7 7 7 7 -248 136 0 +248 168 72 +97 120 16 192 224 88 -40 40 40 -209 88 56 -128 152 40 -192 192 203 -0 0 0 -0 0 0 -0 0 0 +48 48 48 +248 248 248 +160 136 80 +217 79 61 +181 114 72 +199 172 109 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/sinistcha/overworld.png b/graphics/pokemon/sinistcha/overworld.png new file mode 100644 index 0000000000..cce5218144 Binary files /dev/null and b/graphics/pokemon/sinistcha/overworld.png differ diff --git a/graphics/pokemon/sinistcha/overworld_normal.pal b/graphics/pokemon/sinistcha/overworld_normal.pal new file mode 100644 index 0000000000..810b8022a1 --- /dev/null +++ b/graphics/pokemon/sinistcha/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +106 91 32 +160 151 80 +204 195 116 +0 0 0 +245 192 61 +93 158 74 +57 103 37 +249 212 121 +120 196 99 +37 27 27 +105 68 27 +76 58 58 +135 132 126 +193 185 174 +230 225 219 diff --git a/graphics/pokemon/sinistcha/overworld_shiny.pal b/graphics/pokemon/sinistcha/overworld_shiny.pal new file mode 100644 index 0000000000..ab14c1b68a --- /dev/null +++ b/graphics/pokemon/sinistcha/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +106 91 32 +153 160 88 +204 195 116 +0 0 0 +245 192 61 +93 158 74 +57 103 37 +249 212 121 +120 196 99 +24 43 17 +153 160 88 +54 65 35 +135 132 126 +193 185 174 +230 225 219 diff --git a/graphics/pokemon/skarmory/overworld.png b/graphics/pokemon/skarmory/overworld.png index f09f7d41fe..c339e13936 100644 Binary files a/graphics/pokemon/skarmory/overworld.png and b/graphics/pokemon/skarmory/overworld.png differ diff --git a/graphics/pokemon/skeledirge/overworld.png b/graphics/pokemon/skeledirge/overworld.png new file mode 100644 index 0000000000..cff42c4dde Binary files /dev/null and b/graphics/pokemon/skeledirge/overworld.png differ diff --git a/graphics/pokemon/skeledirge/overworld_normal.pal b/graphics/pokemon/skeledirge/overworld_normal.pal new file mode 100644 index 0000000000..034baedc55 --- /dev/null +++ b/graphics/pokemon/skeledirge/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +184 184 184 +230 230 230 +210 0 0 +31 37 33 +116 16 16 +186 50 39 +244 85 17 +255 74 60 +255 208 23 +163 52 216 +61 66 63 +88 16 16 +0 0 0 +255 208 23 +96 32 32 diff --git a/graphics/pokemon/skeledirge/overworld_shiny.pal b/graphics/pokemon/skeledirge/overworld_shiny.pal new file mode 100644 index 0000000000..f008ae7817 --- /dev/null +++ b/graphics/pokemon/skeledirge/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +184 184 184 +230 230 230 +210 0 0 +31 37 33 +124 35 84 +186 31 113 +244 85 17 +255 60 128 +255 208 23 +163 52 216 +72 72 72 +74 21 51 +0 0 0 +255 117 117 +96 32 32 diff --git a/graphics/pokemon/skiploom/overworld.png b/graphics/pokemon/skiploom/overworld.png index 2da705ffcc..0a029b0cf1 100644 Binary files a/graphics/pokemon/skiploom/overworld.png and b/graphics/pokemon/skiploom/overworld.png differ diff --git a/graphics/pokemon/slither_wing/overworld.png b/graphics/pokemon/slither_wing/overworld.png new file mode 100644 index 0000000000..240210358f Binary files /dev/null and b/graphics/pokemon/slither_wing/overworld.png differ diff --git a/graphics/pokemon/slither_wing/overworld_normal.pal b/graphics/pokemon/slither_wing/overworld_normal.pal new file mode 100644 index 0000000000..3073896104 --- /dev/null +++ b/graphics/pokemon/slither_wing/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +2 2 2 +239 209 101 +105 18 27 +235 165 61 +209 56 49 +210 255 118 +49 47 47 +214 216 222 +125 128 149 +14 16 48 +23 29 81 +209 56 49 +71 31 29 +50 137 124 +81 191 174 diff --git a/graphics/pokemon/slither_wing/overworld_shiny.pal b/graphics/pokemon/slither_wing/overworld_shiny.pal new file mode 100644 index 0000000000..34b68f69cc --- /dev/null +++ b/graphics/pokemon/slither_wing/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +2 2 2 +249 235 153 +69 51 27 +235 165 61 +255 206 82 +209 56 49 +49 47 47 +214 216 222 +125 128 149 +14 16 48 +23 29 81 +209 56 49 +71 31 29 +63 64 101 +99 104 227 diff --git a/graphics/pokemon/slowbro/overworld.png b/graphics/pokemon/slowbro/overworld.png index 553c4df7f6..1e36877d46 100644 Binary files a/graphics/pokemon/slowbro/overworld.png and b/graphics/pokemon/slowbro/overworld.png differ diff --git a/graphics/pokemon/slowking/galarian/overworld.png b/graphics/pokemon/slowking/galarian/overworld.png index 5babfe384b..4ff3b7f4b7 100644 Binary files a/graphics/pokemon/slowking/galarian/overworld.png and b/graphics/pokemon/slowking/galarian/overworld.png differ diff --git a/graphics/pokemon/slowking/galarian/overworld_normal.pal b/graphics/pokemon/slowking/galarian/overworld_normal.pal index aa19348aaa..7b64228b1d 100644 --- a/graphics/pokemon/slowking/galarian/overworld_normal.pal +++ b/graphics/pokemon/slowking/galarian/overworld_normal.pal @@ -4,16 +4,16 @@ JASC-PAL 41 194 156 49 52 74 16 129 8 -197 202 213 +182 235 136 230 230 246 156 157 115 90 80 115 189 210 139 -148 109 115 +49 52 74 98 36 74 0 0 0 131 121 139 -164 165 180 +82 64 128 131 76 106 189 174 189 131 113 180 diff --git a/graphics/pokemon/slowking/galarian/overworld_shiny.pal b/graphics/pokemon/slowking/galarian/overworld_shiny.pal index aa19348aaa..9a2bdbc76e 100644 --- a/graphics/pokemon/slowking/galarian/overworld_shiny.pal +++ b/graphics/pokemon/slowking/galarian/overworld_shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 41 194 156 -49 52 74 -16 129 8 -197 202 213 +60 52 140 +166 48 112 +215 117 170 230 230 246 156 157 115 -90 80 115 +80 91 138 189 210 139 -148 109 115 -98 36 74 +49 52 74 +128 39 93 0 0 0 131 121 139 -164 165 180 -131 76 106 +82 64 128 +154 70 116 189 174 189 -131 113 180 +112 140 196 diff --git a/graphics/pokemon/slowking/overworld.png b/graphics/pokemon/slowking/overworld.png index 3d5dde2e49..defd251fbb 100644 Binary files a/graphics/pokemon/slowking/overworld.png and b/graphics/pokemon/slowking/overworld.png differ diff --git a/graphics/pokemon/slowpoke/galarian/overworld.png b/graphics/pokemon/slowpoke/galarian/overworld.png index 277a1f3a87..38352ce27e 100644 Binary files a/graphics/pokemon/slowpoke/galarian/overworld.png and b/graphics/pokemon/slowpoke/galarian/overworld.png differ diff --git a/graphics/pokemon/slowpoke/galarian/overworld_shiny.pal b/graphics/pokemon/slowpoke/galarian/overworld_shiny.pal index 39773f539f..ee20b05797 100644 --- a/graphics/pokemon/slowpoke/galarian/overworld_shiny.pal +++ b/graphics/pokemon/slowpoke/galarian/overworld_shiny.pal @@ -1,19 +1,19 @@ JASC-PAL 0100 16 -128 128 128 +152 208 160 66 63 0 -96 40 48 -173 166 8 -239 229 9 +80 72 0 +136 120 16 +171 144 18 0 0 0 -204 109 117 -240 152 160 +200 176 0 +248 216 0 160 168 176 104 80 16 208 168 96 240 216 144 232 232 248 -13 13 13 -14 14 14 -15 15 15 +255 255 255 +255 255 255 +255 255 255 diff --git a/graphics/pokemon/smoliv/overworld.png b/graphics/pokemon/smoliv/overworld.png new file mode 100644 index 0000000000..4d05b781d1 Binary files /dev/null and b/graphics/pokemon/smoliv/overworld.png differ diff --git a/graphics/pokemon/smoliv/overworld_normal.pal b/graphics/pokemon/smoliv/overworld_normal.pal new file mode 100644 index 0000000000..d197197d00 --- /dev/null +++ b/graphics/pokemon/smoliv/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +231 225 140 +175 162 91 +96 144 66 +221 215 110 +120 182 67 +155 197 86 +190 208 96 +232 232 248 +151 159 84 +216 96 112 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/smoliv/overworld_shiny.pal b/graphics/pokemon/smoliv/overworld_shiny.pal new file mode 100644 index 0000000000..a840789865 --- /dev/null +++ b/graphics/pokemon/smoliv/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +97 54 67 +30 17 27 +62 87 34 +56 33 50 +92 120 65 +129 174 66 +220 214 96 +232 232 248 +190 183 41 +216 96 112 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/smoochum/overworld.png b/graphics/pokemon/smoochum/overworld.png index ccee071741..1739f83d1f 100644 Binary files a/graphics/pokemon/smoochum/overworld.png and b/graphics/pokemon/smoochum/overworld.png differ diff --git a/graphics/pokemon/sneasel/hisuian/overworld.png b/graphics/pokemon/sneasel/hisuian/overworld.png index 7f4c335a9e..a830d0c0e8 100644 Binary files a/graphics/pokemon/sneasel/hisuian/overworld.png and b/graphics/pokemon/sneasel/hisuian/overworld.png differ diff --git a/graphics/pokemon/sneasel/hisuian/overworld_normal.pal b/graphics/pokemon/sneasel/hisuian/overworld_normal.pal index e909571475..3a4e58b0eb 100644 --- a/graphics/pokemon/sneasel/hisuian/overworld_normal.pal +++ b/graphics/pokemon/sneasel/hisuian/overworld_normal.pal @@ -4,16 +4,16 @@ JASC-PAL 152 208 160 74 74 98 16 16 16 -32 24 32 +70 19 70 98 115 164 164 189 222 57 74 82 -74 49 90 +113 65 145 123 139 180 255 255 255 -90 98 106 +71 53 97 164 123 222 205 49 74 246 180 65 230 139 16 -131 148 172 +97 25 97 diff --git a/graphics/pokemon/sneasel/hisuian/overworld_shiny.pal b/graphics/pokemon/sneasel/hisuian/overworld_shiny.pal index e2b78ba441..580e24ee3e 100644 --- a/graphics/pokemon/sneasel/hisuian/overworld_shiny.pal +++ b/graphics/pokemon/sneasel/hisuian/overworld_shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 152 208 160 -82 82 82 +48 48 48 16 16 16 -189 156 49 -98 115 123 +87 68 9 +47 66 69 131 148 156 57 74 82 -230 205 82 -115 131 131 +255 212 0 +79 110 110 255 255 255 -90 82 98 +50 39 61 90 82 98 230 205 82 -156 172 238 -156 172 238 -131 148 172 +135 149 204 +112 128 193 +204 170 0 diff --git a/graphics/pokemon/sneasel/overworld.png b/graphics/pokemon/sneasel/overworld.png index 3cabd75c54..a9e12ebe5f 100644 Binary files a/graphics/pokemon/sneasel/overworld.png and b/graphics/pokemon/sneasel/overworld.png differ diff --git a/graphics/pokemon/sneasler/overworld.png b/graphics/pokemon/sneasler/overworld.png index 29f5dc9d48..b81dedda54 100644 Binary files a/graphics/pokemon/sneasler/overworld.png and b/graphics/pokemon/sneasler/overworld.png differ diff --git a/graphics/pokemon/sneasler/overworld_shiny.pal b/graphics/pokemon/sneasler/overworld_shiny.pal index 1cfe27b932..a77780060f 100644 --- a/graphics/pokemon/sneasler/overworld_shiny.pal +++ b/graphics/pokemon/sneasler/overworld_shiny.pal @@ -5,15 +5,15 @@ JASC-PAL 8 8 8 32 32 41 205 172 65 -180 172 131 -213 205 156 +114 109 83 +171 165 128 74 57 82 -65 49 57 +80 56 84 213 205 156 57 74 82 255 255 255 -98 82 90 -156 172 238 +106 84 119 156 172 238 +116 132 198 230 197 82 -74 106 49 +104 176 47 diff --git a/graphics/pokemon/sneasler/shiny.pal b/graphics/pokemon/sneasler/shiny.pal index 8c1df6a506..ca2ee6ce6e 100755 --- a/graphics/pokemon/sneasler/shiny.pal +++ b/graphics/pokemon/sneasler/shiny.pal @@ -7,7 +7,7 @@ JASC-PAL 53 54 84 69 95 178 186 130 25 -222 47 65 +61 167 61 246 204 70 117 136 224 121 95 49 diff --git a/graphics/pokemon/snivy/overworld.png b/graphics/pokemon/snivy/overworld.png index b361587109..8c05173922 100644 Binary files a/graphics/pokemon/snivy/overworld.png and b/graphics/pokemon/snivy/overworld.png differ diff --git a/graphics/pokemon/snover/overworld_shiny.pal b/graphics/pokemon/snover/overworld_shiny.pal index 66f6e6532f..a951f0a24a 100644 --- a/graphics/pokemon/snover/overworld_shiny.pal +++ b/graphics/pokemon/snover/overworld_shiny.pal @@ -9,9 +9,9 @@ JASC-PAL 216 216 232 160 160 192 0 0 0 -32 72 72 +58 102 156 32 48 56 -32 96 96 +81 147 204 48 40 16 128 104 40 72 56 40 diff --git a/graphics/pokemon/spheal/overworld.png b/graphics/pokemon/spheal/overworld.png index dc394187ec..f76c37e144 100644 Binary files a/graphics/pokemon/spheal/overworld.png and b/graphics/pokemon/spheal/overworld.png differ diff --git a/graphics/pokemon/spidops/front.png b/graphics/pokemon/spidops/front.png index 944a911070..d6bfb05623 100644 Binary files a/graphics/pokemon/spidops/front.png and b/graphics/pokemon/spidops/front.png differ diff --git a/graphics/pokemon/spidops/overworld.png b/graphics/pokemon/spidops/overworld.png new file mode 100644 index 0000000000..5e19fe8a7e Binary files /dev/null and b/graphics/pokemon/spidops/overworld.png differ diff --git a/graphics/pokemon/spidops/overworld_normal.pal b/graphics/pokemon/spidops/overworld_normal.pal new file mode 100644 index 0000000000..47121548cd --- /dev/null +++ b/graphics/pokemon/spidops/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +47 57 28 +106 148 40 +71 61 37 +150 124 67 +0 0 0 +68 91 28 +45 50 53 +29 46 47 +114 89 56 +230 227 222 +173 174 170 +230 227 222 +173 174 170 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/spidops/overworld_shiny.pal b/graphics/pokemon/spidops/overworld_shiny.pal new file mode 100644 index 0000000000..85349c0c2b --- /dev/null +++ b/graphics/pokemon/spidops/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +116 61 87 +204 124 160 +54 69 82 +104 127 150 +0 0 0 +157 83 118 +45 50 53 +29 46 47 +82 101 116 +230 227 222 +173 174 170 +227 79 79 +171 58 52 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/spinarak/overworld.png b/graphics/pokemon/spinarak/overworld.png index 235adf0738..fdee200438 100644 Binary files a/graphics/pokemon/spinarak/overworld.png and b/graphics/pokemon/spinarak/overworld.png differ diff --git a/graphics/pokemon/sprigatito/overworld.png b/graphics/pokemon/sprigatito/overworld.png new file mode 100644 index 0000000000..ac917eb140 Binary files /dev/null and b/graphics/pokemon/sprigatito/overworld.png differ diff --git a/graphics/pokemon/sprigatito/overworld_normal.pal b/graphics/pokemon/sprigatito/overworld_normal.pal new file mode 100644 index 0000000000..20e41599d8 --- /dev/null +++ b/graphics/pokemon/sprigatito/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +133 160 90 +218 237 191 +114 136 77 +0 0 0 +179 218 124 +33 65 20 +66 129 41 +49 97 31 +179 218 124 +82 161 52 +216 112 152 +232 232 248 +141 71 85 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/sprigatito/overworld_shiny.pal b/graphics/pokemon/sprigatito/overworld_shiny.pal new file mode 100644 index 0000000000..cd0636fb1f --- /dev/null +++ b/graphics/pokemon/sprigatito/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +116 137 67 +223 252 135 +81 103 48 +0 0 0 +166 199 99 +39 73 40 +82 143 92 +54 101 55 +179 218 124 +86 205 116 +192 137 237 +232 232 248 +134 81 206 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/squawkabilly/blue_plumage/overworld.png b/graphics/pokemon/squawkabilly/blue_plumage/overworld.png new file mode 100644 index 0000000000..ad152c8b1b Binary files /dev/null and b/graphics/pokemon/squawkabilly/blue_plumage/overworld.png differ diff --git a/graphics/pokemon/squawkabilly/blue_plumage/overworld_normal.pal b/graphics/pokemon/squawkabilly/blue_plumage/overworld_normal.pal new file mode 100644 index 0000000000..8abe9ab02c --- /dev/null +++ b/graphics/pokemon/squawkabilly/blue_plumage/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +51 52 53 +77 78 79 +32 51 74 +52 89 152 +203 131 78 +252 252 252 +44 129 218 +253 194 72 +30 31 32 +77 78 79 +179 184 189 +105 70 39 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/squawkabilly/blue_plumage/overworld_shiny.pal b/graphics/pokemon/squawkabilly/blue_plumage/overworld_shiny.pal new file mode 100644 index 0000000000..f4018770cd --- /dev/null +++ b/graphics/pokemon/squawkabilly/blue_plumage/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +255 142 146 +255 185 187 +32 51 74 +52 89 152 +206 114 100 +252 252 252 +44 129 218 +225 156 147 +30 31 32 +77 78 79 +179 184 189 +170 69 64 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/squawkabilly/overworld.png b/graphics/pokemon/squawkabilly/overworld.png new file mode 100644 index 0000000000..f38929d020 Binary files /dev/null and b/graphics/pokemon/squawkabilly/overworld.png differ diff --git a/graphics/pokemon/squawkabilly/overworld_normal.pal b/graphics/pokemon/squawkabilly/overworld_normal.pal new file mode 100644 index 0000000000..2e9a2a7fb8 --- /dev/null +++ b/graphics/pokemon/squawkabilly/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +51 52 53 +77 78 79 +44 74 32 +88 157 47 +203 131 78 +252 252 252 +100 218 44 +253 194 72 +30 31 32 +77 78 79 +179 184 189 +105 70 39 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/squawkabilly/overworld_shiny.pal b/graphics/pokemon/squawkabilly/overworld_shiny.pal new file mode 100644 index 0000000000..305f25614c --- /dev/null +++ b/graphics/pokemon/squawkabilly/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +255 142 146 +255 185 187 +44 74 32 +88 157 47 +206 114 100 +252 252 252 +100 218 44 +225 156 147 +30 31 32 +77 78 79 +179 184 189 +170 69 64 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/squawkabilly/white_plumage/overworld.png b/graphics/pokemon/squawkabilly/white_plumage/overworld.png new file mode 100644 index 0000000000..c416e4bfd1 Binary files /dev/null and b/graphics/pokemon/squawkabilly/white_plumage/overworld.png differ diff --git a/graphics/pokemon/squawkabilly/white_plumage/overworld_normal.pal b/graphics/pokemon/squawkabilly/white_plumage/overworld_normal.pal new file mode 100644 index 0000000000..ee7d256273 --- /dev/null +++ b/graphics/pokemon/squawkabilly/white_plumage/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +51 52 53 +77 78 79 +91 94 94 +137 145 145 +203 131 78 +252 252 252 +193 202 202 +253 194 72 +30 31 32 +77 78 79 +179 184 189 +105 70 39 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/squawkabilly/white_plumage/overworld_shiny.pal b/graphics/pokemon/squawkabilly/white_plumage/overworld_shiny.pal new file mode 100644 index 0000000000..8642d6248d --- /dev/null +++ b/graphics/pokemon/squawkabilly/white_plumage/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +255 142 146 +255 185 187 +91 94 94 +137 145 145 +206 114 100 +252 252 252 +193 202 202 +225 156 147 +30 31 32 +77 78 79 +179 184 189 +170 69 64 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/squawkabilly/yellow_plumage/overworld.png b/graphics/pokemon/squawkabilly/yellow_plumage/overworld.png new file mode 100644 index 0000000000..7b744f5133 Binary files /dev/null and b/graphics/pokemon/squawkabilly/yellow_plumage/overworld.png differ diff --git a/graphics/pokemon/squawkabilly/yellow_plumage/overworld_normal.pal b/graphics/pokemon/squawkabilly/yellow_plumage/overworld_normal.pal new file mode 100644 index 0000000000..3e57b393fb --- /dev/null +++ b/graphics/pokemon/squawkabilly/yellow_plumage/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +51 52 53 +77 78 79 +79 67 27 +169 148 35 +203 131 78 +252 252 252 +223 236 26 +253 194 72 +30 31 32 +77 78 79 +179 184 189 +105 70 39 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/squawkabilly/yellow_plumage/overworld_shiny.pal b/graphics/pokemon/squawkabilly/yellow_plumage/overworld_shiny.pal new file mode 100644 index 0000000000..2d432a3f8e --- /dev/null +++ b/graphics/pokemon/squawkabilly/yellow_plumage/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +255 142 146 +255 185 187 +79 67 27 +169 148 35 +206 114 100 +252 252 252 +223 236 26 +225 156 147 +30 31 32 +77 78 79 +179 184 189 +170 69 64 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/staraptor/overworld.png b/graphics/pokemon/staraptor/overworld.png index a6f9360ac2..1dcbab906c 100644 Binary files a/graphics/pokemon/staraptor/overworld.png and b/graphics/pokemon/staraptor/overworld.png differ diff --git a/graphics/pokemon/steelix/overworld.png b/graphics/pokemon/steelix/overworld.png index 1a0ff06798..92aef77413 100644 Binary files a/graphics/pokemon/steelix/overworld.png and b/graphics/pokemon/steelix/overworld.png differ diff --git a/graphics/pokemon/stunfisk/galarian/overworld.png b/graphics/pokemon/stunfisk/galarian/overworld.png index 1e72ba6a4d..dc394873e7 100644 Binary files a/graphics/pokemon/stunfisk/galarian/overworld.png and b/graphics/pokemon/stunfisk/galarian/overworld.png differ diff --git a/graphics/pokemon/stunfisk/galarian/overworld_normal.pal b/graphics/pokemon/stunfisk/galarian/overworld_normal.pal index 9070fb58ea..5d6a48cd76 100644 --- a/graphics/pokemon/stunfisk/galarian/overworld_normal.pal +++ b/graphics/pokemon/stunfisk/galarian/overworld_normal.pal @@ -11,9 +11,9 @@ JASC-PAL 255 255 255 0 0 0 119 108 95 -111 59 50 +168 20 20 199 199 199 -12 12 12 -13 13 13 -14 14 14 -15 15 15 +255 255 255 +255 255 255 +255 255 255 +255 255 255 diff --git a/graphics/pokemon/stunfisk/galarian/overworld_shiny.pal b/graphics/pokemon/stunfisk/galarian/overworld_shiny.pal index 9070fb58ea..7fe680b775 100644 --- a/graphics/pokemon/stunfisk/galarian/overworld_shiny.pal +++ b/graphics/pokemon/stunfisk/galarian/overworld_shiny.pal @@ -5,13 +5,13 @@ JASC-PAL 29 32 27 59 64 56 95 102 90 -142 172 96 -157 146 133 -205 246 140 +168 160 56 +160 128 112 +240 224 80 255 255 255 0 0 0 119 108 95 -111 59 50 +168 20 20 199 199 199 12 12 12 13 13 13 diff --git a/graphics/pokemon/stunky/overworld.png b/graphics/pokemon/stunky/overworld.png index b6c7c2b7a5..350aac0b4d 100644 Binary files a/graphics/pokemon/stunky/overworld.png and b/graphics/pokemon/stunky/overworld.png differ diff --git a/graphics/pokemon/sudowoodo/overworld.png b/graphics/pokemon/sudowoodo/overworld.png index 58dceaf067..c9a9dfdc3b 100644 Binary files a/graphics/pokemon/sudowoodo/overworld.png and b/graphics/pokemon/sudowoodo/overworld.png differ diff --git a/graphics/pokemon/suicune/overworld.png b/graphics/pokemon/suicune/overworld.png index 8c7070c238..6a7d06d4cb 100644 Binary files a/graphics/pokemon/suicune/overworld.png and b/graphics/pokemon/suicune/overworld.png differ diff --git a/graphics/pokemon/surskit/overworld.png b/graphics/pokemon/surskit/overworld.png index f5a5ebf13a..6aa7f0e229 100644 Binary files a/graphics/pokemon/surskit/overworld.png and b/graphics/pokemon/surskit/overworld.png differ diff --git a/graphics/pokemon/swellow/overworld.png b/graphics/pokemon/swellow/overworld.png index 06c5002731..ddf43c778c 100644 Binary files a/graphics/pokemon/swellow/overworld.png and b/graphics/pokemon/swellow/overworld.png differ diff --git a/graphics/pokemon/swinub/overworld.png b/graphics/pokemon/swinub/overworld.png index 60bad0ef61..e4ce6c8c15 100644 Binary files a/graphics/pokemon/swinub/overworld.png and b/graphics/pokemon/swinub/overworld.png differ diff --git a/graphics/pokemon/swoobat/overworld.png b/graphics/pokemon/swoobat/overworld.png index ad665f8346..4648f80f63 100644 Binary files a/graphics/pokemon/swoobat/overworld.png and b/graphics/pokemon/swoobat/overworld.png differ diff --git a/graphics/pokemon/swoobat/overworld_shiny.pal b/graphics/pokemon/swoobat/overworld_shiny.pal index 84b110886f..8a3678398f 100644 --- a/graphics/pokemon/swoobat/overworld_shiny.pal +++ b/graphics/pokemon/swoobat/overworld_shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 104 48 152 -72 32 0 +87 48 2 248 192 48 232 144 16 1 1 1 198 217 180 -198 217 180 -72 32 0 +136 192 120 +41 18 0 96 48 16 -167 89 102 -198 217 180 -167 89 102 +144 72 112 198 217 180 +106 48 87 +248 160 232 198 217 180 1 1 1 0 0 0 diff --git a/graphics/pokemon/tadbulb/overworld.png b/graphics/pokemon/tadbulb/overworld.png new file mode 100644 index 0000000000..6937e10e7f Binary files /dev/null and b/graphics/pokemon/tadbulb/overworld.png differ diff --git a/graphics/pokemon/tadbulb/overworld_normal.pal b/graphics/pokemon/tadbulb/overworld_normal.pal new file mode 100644 index 0000000000..251142b687 --- /dev/null +++ b/graphics/pokemon/tadbulb/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +137 116 29 +188 154 18 +252 252 252 +255 223 40 +77 68 64 +126 115 109 +103 95 90 +172 102 72 +255 124 91 +104 69 37 +37 35 33 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/tadbulb/overworld_shiny.pal b/graphics/pokemon/tadbulb/overworld_shiny.pal new file mode 100644 index 0000000000..3364ba16f4 --- /dev/null +++ b/graphics/pokemon/tadbulb/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +137 116 29 +188 154 18 +252 252 252 +255 223 40 +77 68 64 +126 115 109 +103 95 90 +171 75 73 +255 127 109 +125 26 15 +37 35 33 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/tandemaus/overworld.png b/graphics/pokemon/tandemaus/overworld.png new file mode 100644 index 0000000000..0f546d45d1 Binary files /dev/null and b/graphics/pokemon/tandemaus/overworld.png differ diff --git a/graphics/pokemon/tandemaus/overworld_normal.pal b/graphics/pokemon/tandemaus/overworld_normal.pal new file mode 100644 index 0000000000..ef7e6cad7c --- /dev/null +++ b/graphics/pokemon/tandemaus/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +57 58 68 +216 216 216 +249 249 249 +86 87 101 +249 249 249 +184 204 222 +119 157 191 +136 139 151 +48 48 48 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/tandemaus/overworld_shiny.pal b/graphics/pokemon/tandemaus/overworld_shiny.pal new file mode 100644 index 0000000000..9270b4e0ae --- /dev/null +++ b/graphics/pokemon/tandemaus/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +57 58 68 +216 216 216 +249 249 249 +86 87 101 +216 216 216 +225 210 181 +162 124 91 +136 139 151 +48 48 48 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/tarountula/overworld.png b/graphics/pokemon/tarountula/overworld.png new file mode 100644 index 0000000000..5b4ab67614 Binary files /dev/null and b/graphics/pokemon/tarountula/overworld.png differ diff --git a/graphics/pokemon/tarountula/overworld_normal.pal b/graphics/pokemon/tarountula/overworld_normal.pal new file mode 100644 index 0000000000..3829c7ce5a --- /dev/null +++ b/graphics/pokemon/tarountula/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +113 119 128 +173 162 170 +228 229 228 +193 191 193 +74 80 85 +0 0 0 +92 82 44 +162 145 40 +253 253 253 +228 216 55 +32 66 94 +193 191 193 +35 62 19 +62 109 22 +83 163 16 diff --git a/graphics/pokemon/tarountula/overworld_shiny.pal b/graphics/pokemon/tarountula/overworld_shiny.pal new file mode 100644 index 0000000000..28ba758a6b --- /dev/null +++ b/graphics/pokemon/tarountula/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +148 50 39 +169 50 37 +216 89 75 +204 61 45 +104 32 28 +0 0 0 +64 72 94 +83 105 126 +253 253 253 +118 144 159 +32 66 94 +193 191 193 +82 50 62 +109 69 90 +149 77 118 diff --git a/graphics/pokemon/tatsugiri/droopy/overworld.png b/graphics/pokemon/tatsugiri/droopy/overworld.png new file mode 100644 index 0000000000..d1ee2692a8 Binary files /dev/null and b/graphics/pokemon/tatsugiri/droopy/overworld.png differ diff --git a/graphics/pokemon/tatsugiri/droopy/overworld_normal.pal b/graphics/pokemon/tatsugiri/droopy/overworld_normal.pal new file mode 100644 index 0000000000..33de9fb9c7 --- /dev/null +++ b/graphics/pokemon/tatsugiri/droopy/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +98 100 113 +252 252 252 +109 35 55 +194 65 101 +237 110 150 +232 232 248 +173 175 184 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/tatsugiri/droopy/overworld_shiny.pal b/graphics/pokemon/tatsugiri/droopy/overworld_shiny.pal new file mode 100644 index 0000000000..b031af3764 --- /dev/null +++ b/graphics/pokemon/tatsugiri/droopy/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +98 100 113 +252 252 252 +98 100 113 +173 175 184 +252 252 252 +232 232 248 +173 175 184 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/tatsugiri/overworld.png b/graphics/pokemon/tatsugiri/overworld.png new file mode 100644 index 0000000000..4b22241884 Binary files /dev/null and b/graphics/pokemon/tatsugiri/overworld.png differ diff --git a/graphics/pokemon/tatsugiri/overworld_normal.pal b/graphics/pokemon/tatsugiri/overworld_normal.pal new file mode 100644 index 0000000000..fb0bb31bca --- /dev/null +++ b/graphics/pokemon/tatsugiri/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +118 39 31 +255 105 47 +179 80 51 +195 121 101 +232 232 248 +255 170 132 +140 74 55 +98 100 113 +173 175 184 +252 252 252 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/tatsugiri/overworld_shiny.pal b/graphics/pokemon/tatsugiri/overworld_shiny.pal new file mode 100644 index 0000000000..334f722c6b --- /dev/null +++ b/graphics/pokemon/tatsugiri/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +75 48 41 +175 103 80 +131 79 61 +205 90 56 +232 232 248 +220 122 84 +134 56 34 +98 100 113 +173 175 184 +252 252 252 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/tatsugiri/stretchy/overworld.png b/graphics/pokemon/tatsugiri/stretchy/overworld.png new file mode 100644 index 0000000000..24451d817f Binary files /dev/null and b/graphics/pokemon/tatsugiri/stretchy/overworld.png differ diff --git a/graphics/pokemon/tatsugiri/stretchy/overworld_normal.pal b/graphics/pokemon/tatsugiri/stretchy/overworld_normal.pal new file mode 100644 index 0000000000..141ea45c87 --- /dev/null +++ b/graphics/pokemon/tatsugiri/stretchy/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +87 66 15 +255 203 45 +206 155 36 +255 207 45 +232 232 248 +98 100 113 +173 175 184 +252 252 252 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/tatsugiri/stretchy/overworld_shiny.pal b/graphics/pokemon/tatsugiri/stretchy/overworld_shiny.pal new file mode 100644 index 0000000000..3094cbee44 --- /dev/null +++ b/graphics/pokemon/tatsugiri/stretchy/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +79 45 30 +237 125 78 +176 81 45 +255 207 45 +232 232 248 +98 100 113 +173 175 184 +252 252 252 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/tauros/paldean_aqua_breed/overworld.png b/graphics/pokemon/tauros/paldean_aqua_breed/overworld.png new file mode 100644 index 0000000000..f5fe87e1da Binary files /dev/null and b/graphics/pokemon/tauros/paldean_aqua_breed/overworld.png differ diff --git a/graphics/pokemon/tauros/paldean_aqua_breed/overworld_normal.pal b/graphics/pokemon/tauros/paldean_aqua_breed/overworld_normal.pal new file mode 100644 index 0000000000..a025f63c81 --- /dev/null +++ b/graphics/pokemon/tauros/paldean_aqua_breed/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +14 14 14 +26 26 26 +71 71 71 +60 60 60 +192 192 208 +144 144 144 +47 46 47 +92 92 92 +232 232 248 +58 120 154 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/tauros/paldean_aqua_breed/overworld_shiny.pal b/graphics/pokemon/tauros/paldean_aqua_breed/overworld_shiny.pal new file mode 100644 index 0000000000..627a88f0bc --- /dev/null +++ b/graphics/pokemon/tauros/paldean_aqua_breed/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +14 14 14 +26 26 26 +36 36 36 +24 24 24 +192 192 208 +144 144 144 +47 46 47 +53 51 53 +232 232 248 +58 120 154 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/tauros/paldean_blaze_breed/overworld.png b/graphics/pokemon/tauros/paldean_blaze_breed/overworld.png new file mode 100644 index 0000000000..aad59d0031 Binary files /dev/null and b/graphics/pokemon/tauros/paldean_blaze_breed/overworld.png differ diff --git a/graphics/pokemon/tauros/paldean_blaze_breed/overworld_normal.pal b/graphics/pokemon/tauros/paldean_blaze_breed/overworld_normal.pal new file mode 100644 index 0000000000..8b4a90c570 --- /dev/null +++ b/graphics/pokemon/tauros/paldean_blaze_breed/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +14 14 14 +26 26 26 +71 71 71 +60 60 60 +192 192 208 +144 144 144 +181 0 0 +47 46 47 +138 0 0 +92 92 92 +232 232 248 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/tauros/paldean_blaze_breed/overworld_shiny.pal b/graphics/pokemon/tauros/paldean_blaze_breed/overworld_shiny.pal new file mode 100644 index 0000000000..478334cb90 --- /dev/null +++ b/graphics/pokemon/tauros/paldean_blaze_breed/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +14 14 14 +26 26 26 +36 36 36 +24 24 24 +192 192 208 +144 144 144 +181 0 0 +47 46 47 +138 0 0 +53 51 53 +232 232 248 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/tauros/paldean_combat_breed/overworld.png b/graphics/pokemon/tauros/paldean_combat_breed/overworld.png new file mode 100644 index 0000000000..40206ce439 Binary files /dev/null and b/graphics/pokemon/tauros/paldean_combat_breed/overworld.png differ diff --git a/graphics/pokemon/tauros/paldean_combat_breed/overworld_normal.pal b/graphics/pokemon/tauros/paldean_combat_breed/overworld_normal.pal new file mode 100644 index 0000000000..37f2d7b366 --- /dev/null +++ b/graphics/pokemon/tauros/paldean_combat_breed/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +14 14 14 +0 0 0 +71 71 71 +26 26 26 +60 60 60 +192 192 208 +144 144 144 +47 46 47 +92 92 92 +232 232 248 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/tauros/paldean_combat_breed/overworld_shiny.pal b/graphics/pokemon/tauros/paldean_combat_breed/overworld_shiny.pal new file mode 100644 index 0000000000..a3fcf9a2f1 --- /dev/null +++ b/graphics/pokemon/tauros/paldean_combat_breed/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +14 14 14 +0 0 0 +36 36 36 +26 26 26 +24 24 24 +192 192 208 +144 144 144 +47 46 47 +53 51 53 +232 232 248 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/tentacruel/overworld.png b/graphics/pokemon/tentacruel/overworld.png index fa10e84a2d..572cd1e33c 100644 Binary files a/graphics/pokemon/tentacruel/overworld.png and b/graphics/pokemon/tentacruel/overworld.png differ diff --git a/graphics/pokemon/terapagos/overworld.png b/graphics/pokemon/terapagos/overworld.png new file mode 100644 index 0000000000..7c299289cc Binary files /dev/null and b/graphics/pokemon/terapagos/overworld.png differ diff --git a/graphics/pokemon/terapagos/overworld_normal.pal b/graphics/pokemon/terapagos/overworld_normal.pal new file mode 100644 index 0000000000..4785d3471b --- /dev/null +++ b/graphics/pokemon/terapagos/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +197 104 232 +145 81 187 +98 98 210 +146 154 231 +58 115 124 +131 199 199 +23 22 48 +45 51 111 +64 72 170 +0 0 0 +154 228 186 +241 115 136 +43 149 206 +238 238 246 +23 22 48 diff --git a/graphics/pokemon/terapagos/overworld_shiny.pal b/graphics/pokemon/terapagos/overworld_shiny.pal new file mode 100644 index 0000000000..80535e17d4 --- /dev/null +++ b/graphics/pokemon/terapagos/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +197 104 232 +145 81 187 +98 98 210 +146 154 231 +58 115 124 +131 199 199 +5 73 99 +12 156 208 +1 229 255 +0 0 0 +154 228 186 +242 184 140 +227 16 108 +238 238 246 +58 115 124 diff --git a/graphics/pokemon/terapagos/terastal/overworld.png b/graphics/pokemon/terapagos/terastal/overworld.png new file mode 100644 index 0000000000..e1ce155923 Binary files /dev/null and b/graphics/pokemon/terapagos/terastal/overworld.png differ diff --git a/graphics/pokemon/terapagos/terastal/overworld_normal.pal b/graphics/pokemon/terapagos/terastal/overworld_normal.pal new file mode 100644 index 0000000000..8fc9e7cf54 --- /dev/null +++ b/graphics/pokemon/terapagos/terastal/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +83 128 134 +147 245 227 +209 209 219 +41 44 163 +28 27 59 +78 190 242 +234 118 148 +52 57 209 +216 81 88 +147 245 227 +128 120 112 +192 48 40 +248 208 48 +255 255 255 +43 149 206 diff --git a/graphics/pokemon/terapagos/terastal/overworld_shiny.pal b/graphics/pokemon/terapagos/terastal/overworld_shiny.pal new file mode 100644 index 0000000000..809ff7a61b --- /dev/null +++ b/graphics/pokemon/terapagos/terastal/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +83 128 134 +147 245 227 +209 209 219 +84 215 251 +28 27 59 +78 190 242 +234 118 148 +52 57 209 +216 81 88 +147 245 227 +128 120 112 +192 48 40 +248 208 48 +255 255 255 +43 149 206 diff --git a/graphics/pokemon/throh/overworld.png b/graphics/pokemon/throh/overworld.png index dabd0d8eba..69b2fef486 100644 Binary files a/graphics/pokemon/throh/overworld.png and b/graphics/pokemon/throh/overworld.png differ diff --git a/graphics/pokemon/throh/overworld_normal.pal b/graphics/pokemon/throh/overworld_normal.pal index 61eb765859..913583fc68 100644 --- a/graphics/pokemon/throh/overworld_normal.pal +++ b/graphics/pokemon/throh/overworld_normal.pal @@ -4,7 +4,7 @@ JASC-PAL 152 208 160 87 18 18 87 18 18 -152 208 160 +33 33 25 0 0 0 218 79 79 164 40 40 diff --git a/graphics/pokemon/ting_lu/overworld.png b/graphics/pokemon/ting_lu/overworld.png new file mode 100644 index 0000000000..9df5a80931 Binary files /dev/null and b/graphics/pokemon/ting_lu/overworld.png differ diff --git a/graphics/pokemon/ting_lu/overworld_normal.pal b/graphics/pokemon/ting_lu/overworld_normal.pal new file mode 100644 index 0000000000..1a36fd21fc --- /dev/null +++ b/graphics/pokemon/ting_lu/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +28 28 25 +0 0 0 +72 104 99 +54 80 75 +71 49 42 +89 130 123 +132 104 85 +162 132 113 +85 70 60 +85 70 60 +129 18 18 +126 71 66 +224 176 8 +60 49 43 +132 104 85 diff --git a/graphics/pokemon/ting_lu/overworld_shiny.pal b/graphics/pokemon/ting_lu/overworld_shiny.pal new file mode 100644 index 0000000000..9109b2f916 --- /dev/null +++ b/graphics/pokemon/ting_lu/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +26 29 25 +0 0 0 +72 104 99 +54 80 75 +55 53 43 +89 130 123 +151 161 151 +99 113 105 +79 76 62 +109 125 116 +129 18 18 +54 80 75 +224 176 8 +25 40 37 +114 109 90 diff --git a/graphics/pokemon/tinkatink/overworld.png b/graphics/pokemon/tinkatink/overworld.png new file mode 100644 index 0000000000..85e9bf94ee Binary files /dev/null and b/graphics/pokemon/tinkatink/overworld.png differ diff --git a/graphics/pokemon/tinkatink/overworld_normal.pal b/graphics/pokemon/tinkatink/overworld_normal.pal new file mode 100644 index 0000000000..bbd228d958 --- /dev/null +++ b/graphics/pokemon/tinkatink/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +45 26 38 +238 189 179 +255 223 225 +84 33 57 +255 157 199 +209 46 107 +255 86 160 +252 252 252 +93 99 158 +122 106 164 +108 41 107 +162 156 198 +100 79 155 +74 54 112 +0 0 0 diff --git a/graphics/pokemon/tinkatink/overworld_shiny.pal b/graphics/pokemon/tinkatink/overworld_shiny.pal new file mode 100644 index 0000000000..7dbb32e1f3 --- /dev/null +++ b/graphics/pokemon/tinkatink/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +45 26 38 +238 189 179 +255 223 225 +84 33 57 +255 157 199 +209 46 107 +255 86 160 +252 252 252 +93 99 158 +139 87 69 +108 41 107 +203 131 108 +106 52 67 +83 40 53 +0 0 0 diff --git a/graphics/pokemon/tinkaton/overworld.png b/graphics/pokemon/tinkaton/overworld.png new file mode 100644 index 0000000000..d34001d5cb Binary files /dev/null and b/graphics/pokemon/tinkaton/overworld.png differ diff --git a/graphics/pokemon/tinkaton/overworld_normal.pal b/graphics/pokemon/tinkaton/overworld_normal.pal new file mode 100644 index 0000000000..25367fffc9 --- /dev/null +++ b/graphics/pokemon/tinkaton/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +54 32 57 +124 90 95 +0 0 0 +226 212 147 +170 146 93 +135 103 132 +252 252 252 +174 157 197 +229 187 189 +211 116 158 +84 33 57 +255 86 160 +252 252 252 +138 111 155 +150 44 80 diff --git a/graphics/pokemon/tinkaton/overworld_shiny.pal b/graphics/pokemon/tinkaton/overworld_shiny.pal new file mode 100644 index 0000000000..385002d053 --- /dev/null +++ b/graphics/pokemon/tinkaton/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +57 29 28 +107 86 90 +25 12 16 +196 192 177 +140 135 123 +158 90 55 +229 187 189 +203 131 108 +229 187 189 +211 116 158 +107 86 90 +255 86 160 +252 252 252 +120 124 196 +150 44 80 diff --git a/graphics/pokemon/tinkatuff/overworld.png b/graphics/pokemon/tinkatuff/overworld.png new file mode 100644 index 0000000000..451d70e030 Binary files /dev/null and b/graphics/pokemon/tinkatuff/overworld.png differ diff --git a/graphics/pokemon/tinkatuff/overworld_normal.pal b/graphics/pokemon/tinkatuff/overworld_normal.pal new file mode 100644 index 0000000000..a590547acb --- /dev/null +++ b/graphics/pokemon/tinkatuff/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +79 44 74 +239 200 196 +132 95 109 +15 15 15 +15 15 15 +82 46 69 +231 141 180 +92 75 99 +174 157 197 +138 111 155 +255 86 160 +209 46 107 +252 252 252 +105 78 147 +105 78 147 diff --git a/graphics/pokemon/tinkatuff/overworld_shiny.pal b/graphics/pokemon/tinkatuff/overworld_shiny.pal new file mode 100644 index 0000000000..673a93a40c --- /dev/null +++ b/graphics/pokemon/tinkatuff/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +93 41 64 +239 200 196 +113 69 98 +15 15 15 +113 69 98 +15 15 15 +231 141 180 +120 64 33 +203 131 108 +158 90 55 +255 86 160 +209 46 107 +252 252 252 +129 50 73 +93 99 158 diff --git a/graphics/pokemon/toedscool/overworld.png b/graphics/pokemon/toedscool/overworld.png new file mode 100644 index 0000000000..7f73ce5fc1 Binary files /dev/null and b/graphics/pokemon/toedscool/overworld.png differ diff --git a/graphics/pokemon/toedscool/overworld_normal.pal b/graphics/pokemon/toedscool/overworld_normal.pal new file mode 100644 index 0000000000..4c86e2c2da --- /dev/null +++ b/graphics/pokemon/toedscool/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +175 80 56 +139 124 20 +227 134 111 +234 164 146 +0 0 0 +194 174 29 +238 225 134 +220 104 75 +229 209 79 +232 232 248 +64 64 64 +208 208 208 +77 100 98 +163 184 183 +222 231 230 diff --git a/graphics/pokemon/toedscool/overworld_shiny.pal b/graphics/pokemon/toedscool/overworld_shiny.pal new file mode 100644 index 0000000000..edb94d0db5 --- /dev/null +++ b/graphics/pokemon/toedscool/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +101 98 86 +126 129 58 +207 203 186 +219 218 206 +0 0 0 +193 182 125 +255 253 226 +168 164 149 +207 198 154 +232 232 248 +64 64 64 +208 208 208 +132 130 111 +167 165 150 +224 221 203 diff --git a/graphics/pokemon/toedscruel/overworld.png b/graphics/pokemon/toedscruel/overworld.png new file mode 100644 index 0000000000..8ed361efed Binary files /dev/null and b/graphics/pokemon/toedscruel/overworld.png differ diff --git a/graphics/pokemon/toedscruel/overworld_normal.pal b/graphics/pokemon/toedscruel/overworld_normal.pal new file mode 100644 index 0000000000..2c2be8c0da --- /dev/null +++ b/graphics/pokemon/toedscruel/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +21 21 21 +82 81 67 +175 80 56 +220 215 3 +136 133 2 +220 104 75 +234 164 146 +253 251 97 +227 134 111 +213 211 171 +150 147 107 +232 232 248 +168 168 168 +253 251 97 +220 215 3 diff --git a/graphics/pokemon/toedscruel/overworld_shiny.pal b/graphics/pokemon/toedscruel/overworld_shiny.pal new file mode 100644 index 0000000000..13165729c8 --- /dev/null +++ b/graphics/pokemon/toedscruel/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +21 21 21 +71 59 62 +109 105 109 +172 46 134 +172 46 134 +193 192 193 +252 252 252 +223 102 192 +232 231 233 +189 92 118 +92 46 56 +232 232 248 +168 168 168 +120 95 207 +88 55 177 diff --git a/graphics/pokemon/togekiss/overworld.png b/graphics/pokemon/togekiss/overworld.png index 0808c0f9bb..884cf4c6e0 100644 Binary files a/graphics/pokemon/togekiss/overworld.png and b/graphics/pokemon/togekiss/overworld.png differ diff --git a/graphics/pokemon/togepi/overworld.png b/graphics/pokemon/togepi/overworld.png index ff0af9c319..081c749ab0 100644 Binary files a/graphics/pokemon/togepi/overworld.png and b/graphics/pokemon/togepi/overworld.png differ diff --git a/graphics/pokemon/torkoal/overworld.png b/graphics/pokemon/torkoal/overworld.png index 1a94282109..29cb8a45e1 100644 Binary files a/graphics/pokemon/torkoal/overworld.png and b/graphics/pokemon/torkoal/overworld.png differ diff --git a/graphics/pokemon/tranquill/overworld.png b/graphics/pokemon/tranquill/overworld.png index 8ce1d6fcce..859cdf1543 100644 Binary files a/graphics/pokemon/tranquill/overworld.png and b/graphics/pokemon/tranquill/overworld.png differ diff --git a/graphics/pokemon/tranquill/overworld_normal.pal b/graphics/pokemon/tranquill/overworld_normal.pal index 718a5bffae..04e2105542 100644 --- a/graphics/pokemon/tranquill/overworld_normal.pal +++ b/graphics/pokemon/tranquill/overworld_normal.pal @@ -11,8 +11,8 @@ JASC-PAL 126 101 54 224 176 38 117 117 117 -0 0 0 -0 0 0 +126 101 54 +248 248 248 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/tranquill/overworld_shiny.pal b/graphics/pokemon/tranquill/overworld_shiny.pal index 0436c80854..b6c3f5a586 100644 --- a/graphics/pokemon/tranquill/overworld_shiny.pal +++ b/graphics/pokemon/tranquill/overworld_shiny.pal @@ -5,14 +5,14 @@ JASC-PAL 48 64 48 72 128 72 0 0 0 -49 45 41 112 168 112 -184 248 184 +195 237 195 +160 102 204 96 79 92 201 144 119 -217 217 233 -0 0 0 -0 0 0 +129 167 131 +80 56 96 +248 248 248 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/tropius/overworld.png b/graphics/pokemon/tropius/overworld.png index cd3dba6f8f..496c0dbc56 100644 Binary files a/graphics/pokemon/tropius/overworld.png and b/graphics/pokemon/tropius/overworld.png differ diff --git a/graphics/pokemon/unown/b/overworld.png b/graphics/pokemon/unown/b/overworld.png index b2500cca0c..1e8ab69c11 100644 Binary files a/graphics/pokemon/unown/b/overworld.png and b/graphics/pokemon/unown/b/overworld.png differ diff --git a/graphics/pokemon/unown/c/overworld.png b/graphics/pokemon/unown/c/overworld.png index d7f631f31e..a53b43e06f 100644 Binary files a/graphics/pokemon/unown/c/overworld.png and b/graphics/pokemon/unown/c/overworld.png differ diff --git a/graphics/pokemon/unown/d/overworld.png b/graphics/pokemon/unown/d/overworld.png index 426e517d5d..d8796d0200 100644 Binary files a/graphics/pokemon/unown/d/overworld.png and b/graphics/pokemon/unown/d/overworld.png differ diff --git a/graphics/pokemon/unown/e/overworld.png b/graphics/pokemon/unown/e/overworld.png index 741a5ef42e..34fd50f004 100644 Binary files a/graphics/pokemon/unown/e/overworld.png and b/graphics/pokemon/unown/e/overworld.png differ diff --git a/graphics/pokemon/unown/exclamation_mark/overworld.png b/graphics/pokemon/unown/exclamation_mark/overworld.png index 4271c7ab99..96073167d0 100644 Binary files a/graphics/pokemon/unown/exclamation_mark/overworld.png and b/graphics/pokemon/unown/exclamation_mark/overworld.png differ diff --git a/graphics/pokemon/unown/f/overworld.png b/graphics/pokemon/unown/f/overworld.png index ea3332e941..789e65cc1d 100644 Binary files a/graphics/pokemon/unown/f/overworld.png and b/graphics/pokemon/unown/f/overworld.png differ diff --git a/graphics/pokemon/unown/g/overworld.png b/graphics/pokemon/unown/g/overworld.png index d9308fbe3a..38f70bdcf4 100644 Binary files a/graphics/pokemon/unown/g/overworld.png and b/graphics/pokemon/unown/g/overworld.png differ diff --git a/graphics/pokemon/unown/h/overworld.png b/graphics/pokemon/unown/h/overworld.png index 9abe3e4001..a5f030dbd6 100644 Binary files a/graphics/pokemon/unown/h/overworld.png and b/graphics/pokemon/unown/h/overworld.png differ diff --git a/graphics/pokemon/unown/i/overworld.png b/graphics/pokemon/unown/i/overworld.png index 39aa3b8572..b360c0faac 100644 Binary files a/graphics/pokemon/unown/i/overworld.png and b/graphics/pokemon/unown/i/overworld.png differ diff --git a/graphics/pokemon/unown/j/overworld.png b/graphics/pokemon/unown/j/overworld.png index af240eafd3..e1c88938d7 100644 Binary files a/graphics/pokemon/unown/j/overworld.png and b/graphics/pokemon/unown/j/overworld.png differ diff --git a/graphics/pokemon/unown/k/overworld.png b/graphics/pokemon/unown/k/overworld.png index b448f866e6..41e0372218 100644 Binary files a/graphics/pokemon/unown/k/overworld.png and b/graphics/pokemon/unown/k/overworld.png differ diff --git a/graphics/pokemon/unown/l/overworld.png b/graphics/pokemon/unown/l/overworld.png index b11096a1ab..dbbe738b8b 100644 Binary files a/graphics/pokemon/unown/l/overworld.png and b/graphics/pokemon/unown/l/overworld.png differ diff --git a/graphics/pokemon/unown/m/overworld.png b/graphics/pokemon/unown/m/overworld.png index 0d5f60e297..1952491154 100644 Binary files a/graphics/pokemon/unown/m/overworld.png and b/graphics/pokemon/unown/m/overworld.png differ diff --git a/graphics/pokemon/unown/n/overworld.png b/graphics/pokemon/unown/n/overworld.png index 8b39392831..5cb9e11487 100644 Binary files a/graphics/pokemon/unown/n/overworld.png and b/graphics/pokemon/unown/n/overworld.png differ diff --git a/graphics/pokemon/unown/o/overworld.png b/graphics/pokemon/unown/o/overworld.png index 23a5f2e277..1314548e92 100644 Binary files a/graphics/pokemon/unown/o/overworld.png and b/graphics/pokemon/unown/o/overworld.png differ diff --git a/graphics/pokemon/unown/p/overworld.png b/graphics/pokemon/unown/p/overworld.png index f3699ebdcd..fc497afc09 100644 Binary files a/graphics/pokemon/unown/p/overworld.png and b/graphics/pokemon/unown/p/overworld.png differ diff --git a/graphics/pokemon/unown/q/overworld.png b/graphics/pokemon/unown/q/overworld.png index 1e2bc7f46f..5e29b1a4d4 100644 Binary files a/graphics/pokemon/unown/q/overworld.png and b/graphics/pokemon/unown/q/overworld.png differ diff --git a/graphics/pokemon/unown/question_mark/overworld.png b/graphics/pokemon/unown/question_mark/overworld.png index e4d2102883..743b7edbfe 100644 Binary files a/graphics/pokemon/unown/question_mark/overworld.png and b/graphics/pokemon/unown/question_mark/overworld.png differ diff --git a/graphics/pokemon/unown/r/overworld.png b/graphics/pokemon/unown/r/overworld.png index 70194b27cd..493b1f0e06 100644 Binary files a/graphics/pokemon/unown/r/overworld.png and b/graphics/pokemon/unown/r/overworld.png differ diff --git a/graphics/pokemon/unown/s/overworld.png b/graphics/pokemon/unown/s/overworld.png index 2dacced847..d088d0d2b6 100644 Binary files a/graphics/pokemon/unown/s/overworld.png and b/graphics/pokemon/unown/s/overworld.png differ diff --git a/graphics/pokemon/unown/t/overworld.png b/graphics/pokemon/unown/t/overworld.png index cb476bf5ee..e8435537f2 100644 Binary files a/graphics/pokemon/unown/t/overworld.png and b/graphics/pokemon/unown/t/overworld.png differ diff --git a/graphics/pokemon/unown/u/overworld.png b/graphics/pokemon/unown/u/overworld.png index 2bde348541..a3b10de9cf 100644 Binary files a/graphics/pokemon/unown/u/overworld.png and b/graphics/pokemon/unown/u/overworld.png differ diff --git a/graphics/pokemon/unown/v/overworld.png b/graphics/pokemon/unown/v/overworld.png index 0bb8dba96c..c1fd90ff23 100644 Binary files a/graphics/pokemon/unown/v/overworld.png and b/graphics/pokemon/unown/v/overworld.png differ diff --git a/graphics/pokemon/unown/w/overworld.png b/graphics/pokemon/unown/w/overworld.png index d49a4cf96c..8c424c88b9 100644 Binary files a/graphics/pokemon/unown/w/overworld.png and b/graphics/pokemon/unown/w/overworld.png differ diff --git a/graphics/pokemon/unown/x/overworld.png b/graphics/pokemon/unown/x/overworld.png index e1621d278b..4de8713939 100644 Binary files a/graphics/pokemon/unown/x/overworld.png and b/graphics/pokemon/unown/x/overworld.png differ diff --git a/graphics/pokemon/unown/y/overworld.png b/graphics/pokemon/unown/y/overworld.png index d9fe25135b..4af4693cbb 100644 Binary files a/graphics/pokemon/unown/y/overworld.png and b/graphics/pokemon/unown/y/overworld.png differ diff --git a/graphics/pokemon/unown/z/overworld.png b/graphics/pokemon/unown/z/overworld.png index e2097128e7..94fab08a36 100644 Binary files a/graphics/pokemon/unown/z/overworld.png and b/graphics/pokemon/unown/z/overworld.png differ diff --git a/graphics/pokemon/ursaluna/bloodmoon/overworld_shiny.pal b/graphics/pokemon/ursaluna/bloodmoon/overworld_shiny.pal new file mode 100644 index 0000000000..6dbef8b071 --- /dev/null +++ b/graphics/pokemon/ursaluna/bloodmoon/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +94 41 20 +230 131 90 +195 99 59 +131 67 39 +119 119 117 +81 71 71 +151 148 146 +255 153 174 +248 50 89 +195 99 59 +131 67 39 +232 232 248 +36 104 60 +192 192 208 diff --git a/graphics/pokemon/vaporeon/overworld.png b/graphics/pokemon/vaporeon/overworld.png index beec2a3775..6343bf315d 100644 Binary files a/graphics/pokemon/vaporeon/overworld.png and b/graphics/pokemon/vaporeon/overworld.png differ diff --git a/graphics/pokemon/varoom/overworld.png b/graphics/pokemon/varoom/overworld.png new file mode 100644 index 0000000000..a33b4821d3 Binary files /dev/null and b/graphics/pokemon/varoom/overworld.png differ diff --git a/graphics/pokemon/varoom/overworld_normal.pal b/graphics/pokemon/varoom/overworld_normal.pal new file mode 100644 index 0000000000..79ca1d15c1 --- /dev/null +++ b/graphics/pokemon/varoom/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +85 73 90 +62 48 60 +131 121 134 +195 193 195 +217 215 217 +28 28 28 +66 61 67 +255 205 6 +79 40 79 +121 66 127 +79 40 79 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/varoom/overworld_shiny.pal b/graphics/pokemon/varoom/overworld_shiny.pal new file mode 100644 index 0000000000..24b9e5677a --- /dev/null +++ b/graphics/pokemon/varoom/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +85 73 90 +62 48 60 +180 161 96 +247 234 143 +250 241 184 +28 28 28 +89 80 49 +224 114 152 +51 45 85 +77 61 150 +79 40 79 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/veluza/front.png b/graphics/pokemon/veluza/front.png index 9a2a7643ab..de17bca7c0 100755 Binary files a/graphics/pokemon/veluza/front.png and b/graphics/pokemon/veluza/front.png differ diff --git a/graphics/pokemon/veluza/overworld.png b/graphics/pokemon/veluza/overworld.png new file mode 100644 index 0000000000..0ee46d7616 Binary files /dev/null and b/graphics/pokemon/veluza/overworld.png differ diff --git a/graphics/pokemon/veluza/overworld_normal.pal b/graphics/pokemon/veluza/overworld_normal.pal new file mode 100644 index 0000000000..f55181bec5 --- /dev/null +++ b/graphics/pokemon/veluza/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +122 44 122 +252 117 255 +179 64 179 +64 61 62 +0 0 0 +173 174 173 +191 194 196 +134 126 128 +105 106 108 +143 130 194 +253 253 253 +208 206 208 +195 108 89 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/veluza/overworld_shiny.pal b/graphics/pokemon/veluza/overworld_shiny.pal new file mode 100644 index 0000000000..9fa8a8e3dd --- /dev/null +++ b/graphics/pokemon/veluza/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +27 103 24 +107 200 112 +67 139 77 +64 61 62 +0 0 0 +173 174 173 +191 194 196 +134 126 128 +105 106 108 +143 130 194 +253 253 253 +208 206 208 +195 108 89 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/venipede/overworld.png b/graphics/pokemon/venipede/overworld.png index 9add5c858d..424d009da7 100644 Binary files a/graphics/pokemon/venipede/overworld.png and b/graphics/pokemon/venipede/overworld.png differ diff --git a/graphics/pokemon/venipede/overworld_normal.pal b/graphics/pokemon/venipede/overworld_normal.pal index 61a94495e7..a0ce6cd507 100644 --- a/graphics/pokemon/venipede/overworld_normal.pal +++ b/graphics/pokemon/venipede/overworld_normal.pal @@ -3,14 +3,14 @@ JASC-PAL 16 152 208 160 11 11 11 -124 56 72 +102 46 59 182 65 92 191 69 98 227 81 116 55 55 55 79 79 79 -26 95 77 20 140 80 +26 95 77 22 177 116 55 106 55 224 172 35 diff --git a/graphics/pokemon/venipede/overworld_shiny.pal b/graphics/pokemon/venipede/overworld_shiny.pal index 97a17fdcd9..2630f4f61f 100644 --- a/graphics/pokemon/venipede/overworld_shiny.pal +++ b/graphics/pokemon/venipede/overworld_shiny.pal @@ -3,16 +3,16 @@ JASC-PAL 16 152 208 160 11 11 11 -64 64 16 -96 72 40 -144 80 48 -55 55 55 +87 39 36 +152 96 75 +158 103 81 +193 125 98 40 40 40 -40 72 8 -80 112 0 -96 144 0 -55 106 55 -182 65 92 +74 70 71 +113 145 61 +76 105 27 +150 196 80 +80 96 40 224 172 35 0 0 0 0 0 0 diff --git a/graphics/pokemon/vibrava/overworld.png b/graphics/pokemon/vibrava/overworld.png index feea84430f..d7186ae88d 100644 Binary files a/graphics/pokemon/vibrava/overworld.png and b/graphics/pokemon/vibrava/overworld.png differ diff --git a/graphics/pokemon/victini/overworld.png b/graphics/pokemon/victini/overworld.png index 3c76017a13..9a003032b0 100644 Binary files a/graphics/pokemon/victini/overworld.png and b/graphics/pokemon/victini/overworld.png differ diff --git a/graphics/pokemon/vulpix/overworld.png b/graphics/pokemon/vulpix/overworld.png index e8db777a00..2f28125d8b 100644 Binary files a/graphics/pokemon/vulpix/overworld.png and b/graphics/pokemon/vulpix/overworld.png differ diff --git a/graphics/pokemon/walking_wake/overworld.png b/graphics/pokemon/walking_wake/overworld.png new file mode 100644 index 0000000000..12ffb1bfd6 Binary files /dev/null and b/graphics/pokemon/walking_wake/overworld.png differ diff --git a/graphics/pokemon/walking_wake/overworld_normal.pal b/graphics/pokemon/walking_wake/overworld_normal.pal new file mode 100644 index 0000000000..a2580fab8d --- /dev/null +++ b/graphics/pokemon/walking_wake/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +43 21 64 +0 0 0 +160 96 176 +26 54 73 +59 112 140 +96 152 192 +152 40 40 +112 56 136 +80 80 96 +184 200 200 +232 232 248 +239 228 176 +24 56 88 +48 96 136 +251 155 60 diff --git a/graphics/pokemon/walking_wake/overworld_shiny.pal b/graphics/pokemon/walking_wake/overworld_shiny.pal new file mode 100644 index 0000000000..06cefaba45 --- /dev/null +++ b/graphics/pokemon/walking_wake/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +2 46 77 +0 0 0 +96 160 216 +18 67 58 +56 200 176 +144 200 232 +152 40 40 +8 88 152 +80 80 96 +184 200 200 +232 232 248 +239 228 176 +48 112 176 +96 160 216 +251 155 60 diff --git a/graphics/pokemon/wartortle/overworld.png b/graphics/pokemon/wartortle/overworld.png index 53c5c24a05..ea85252376 100644 Binary files a/graphics/pokemon/wartortle/overworld.png and b/graphics/pokemon/wartortle/overworld.png differ diff --git a/graphics/pokemon/wattrel/back.png b/graphics/pokemon/wattrel/back.png index 2a5bc640b5..5df11376f3 100755 Binary files a/graphics/pokemon/wattrel/back.png and b/graphics/pokemon/wattrel/back.png differ diff --git a/graphics/pokemon/wattrel/front.png b/graphics/pokemon/wattrel/front.png index 72981aa44e..c2527bab8b 100755 Binary files a/graphics/pokemon/wattrel/front.png and b/graphics/pokemon/wattrel/front.png differ diff --git a/graphics/pokemon/wattrel/overworld.png b/graphics/pokemon/wattrel/overworld.png new file mode 100644 index 0000000000..a73b63e0fb Binary files /dev/null and b/graphics/pokemon/wattrel/overworld.png differ diff --git a/graphics/pokemon/wattrel/overworld_normal.pal b/graphics/pokemon/wattrel/overworld_normal.pal new file mode 100644 index 0000000000..00a331333a --- /dev/null +++ b/graphics/pokemon/wattrel/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +17 18 19 +55 57 65 +0 0 0 +255 205 55 +232 232 248 +194 119 65 +190 143 41 +115 187 191 +241 161 86 +168 168 176 +100 60 40 +130 100 38 +63 66 77 +145 165 195 +109 118 142 diff --git a/graphics/pokemon/wattrel/overworld_shiny.pal b/graphics/pokemon/wattrel/overworld_shiny.pal new file mode 100644 index 0000000000..4b43c1a237 --- /dev/null +++ b/graphics/pokemon/wattrel/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +80 47 43 +114 67 87 +0 0 0 +255 205 55 +232 232 248 +194 119 65 +190 143 41 +115 187 191 +241 161 86 +168 168 176 +100 60 40 +130 100 38 +67 72 84 +145 165 195 +109 118 142 diff --git a/graphics/pokemon/weezing/galarian/overworld.png b/graphics/pokemon/weezing/galarian/overworld.png index 883a3637de..869fd482d1 100644 Binary files a/graphics/pokemon/weezing/galarian/overworld.png and b/graphics/pokemon/weezing/galarian/overworld.png differ diff --git a/graphics/pokemon/weezing/galarian/overworld_normal.pal b/graphics/pokemon/weezing/galarian/overworld_normal.pal index 84ad50f8bd..70db757710 100644 --- a/graphics/pokemon/weezing/galarian/overworld_normal.pal +++ b/graphics/pokemon/weezing/galarian/overworld_normal.pal @@ -1,10 +1,10 @@ JASC-PAL 0100 16 -106 44 156 -0 0 0 +152 208 160 0 0 0 148 145 148 +148 145 148 106 56 65 98 101 98 205 202 205 diff --git a/graphics/pokemon/weezing/galarian/overworld_shiny.pal b/graphics/pokemon/weezing/galarian/overworld_shiny.pal index 84ad50f8bd..009cae37fb 100644 --- a/graphics/pokemon/weezing/galarian/overworld_shiny.pal +++ b/graphics/pokemon/weezing/galarian/overworld_shiny.pal @@ -3,17 +3,17 @@ JASC-PAL 16 106 44 156 0 0 0 -0 0 0 148 145 148 +192 144 128 106 56 65 -98 101 98 +112 80 72 205 202 205 57 165 65 82 190 90 -57 60 57 +48 32 24 238 234 255 106 198 115 115 113 115 -164 161 131 +171 170 151 230 226 230 -123 125 123 +168 120 104 diff --git a/graphics/pokemon/wiglett/overworld.png b/graphics/pokemon/wiglett/overworld.png new file mode 100644 index 0000000000..510566c98c Binary files /dev/null and b/graphics/pokemon/wiglett/overworld.png differ diff --git a/graphics/pokemon/wiglett/overworld_normal.pal b/graphics/pokemon/wiglett/overworld_normal.pal new file mode 100644 index 0000000000..d050ef424b --- /dev/null +++ b/graphics/pokemon/wiglett/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +115 107 120 +245 243 241 +210 207 210 +137 58 80 +182 184 207 +0 0 0 +233 95 116 +238 132 148 +87 92 132 +166 71 96 +102 143 125 +83 111 99 +154 186 172 +83 111 99 +179 203 192 diff --git a/graphics/pokemon/wiglett/overworld_shiny.pal b/graphics/pokemon/wiglett/overworld_shiny.pal new file mode 100644 index 0000000000..b4787f3624 --- /dev/null +++ b/graphics/pokemon/wiglett/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +105 66 31 +255 220 80 +239 174 39 +41 37 126 +31 28 94 +0 0 0 +77 89 247 +121 131 255 +15 13 45 +64 64 208 +103 152 130 +83 111 99 +154 186 172 +83 77 72 +179 203 192 diff --git a/graphics/pokemon/wo_chien/overworld.png b/graphics/pokemon/wo_chien/overworld.png new file mode 100644 index 0000000000..65178388fb Binary files /dev/null and b/graphics/pokemon/wo_chien/overworld.png differ diff --git a/graphics/pokemon/wo_chien/overworld_normal.pal b/graphics/pokemon/wo_chien/overworld_normal.pal new file mode 100644 index 0000000000..f638363e94 --- /dev/null +++ b/graphics/pokemon/wo_chien/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +123 114 83 +72 75 63 +162 139 118 +140 151 157 +77 60 55 +185 156 96 +184 190 189 +118 180 88 +249 124 32 +97 128 68 +253 253 253 +23 31 16 +123 114 83 +0 0 0 +49 52 48 diff --git a/graphics/pokemon/wo_chien/overworld_shiny.pal b/graphics/pokemon/wo_chien/overworld_shiny.pal new file mode 100644 index 0000000000..d8bd63a48e --- /dev/null +++ b/graphics/pokemon/wo_chien/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +123 114 83 +72 75 63 +162 139 118 +140 151 157 +77 60 55 +185 156 96 +184 190 189 +239 80 96 +249 124 32 +184 63 84 +253 253 253 +23 31 16 +123 114 83 +0 0 0 +49 52 48 diff --git a/graphics/pokemon/woobat/overworld.png b/graphics/pokemon/woobat/overworld.png index 2035262ed4..1d14a5c43d 100644 Binary files a/graphics/pokemon/woobat/overworld.png and b/graphics/pokemon/woobat/overworld.png differ diff --git a/graphics/pokemon/woobat/overworld_shiny.pal b/graphics/pokemon/woobat/overworld_shiny.pal index 9f71bce45f..5f72b7825a 100644 --- a/graphics/pokemon/woobat/overworld_shiny.pal +++ b/graphics/pokemon/woobat/overworld_shiny.pal @@ -2,7 +2,7 @@ JASC-PAL 0100 16 152 208 160 -16 56 64 +24 64 16 192 232 160 0 0 0 120 184 56 @@ -11,7 +11,7 @@ JASC-PAL 192 104 120 136 72 80 240 168 176 -72 104 120 +72 120 74 252 188 219 0 0 0 0 0 0 diff --git a/graphics/pokemon/wooper/overworld.png b/graphics/pokemon/wooper/overworld.png index e41562eb17..471039362d 100644 Binary files a/graphics/pokemon/wooper/overworld.png and b/graphics/pokemon/wooper/overworld.png differ diff --git a/graphics/pokemon/wooper/wooper_paldean/overworld.png b/graphics/pokemon/wooper/wooper_paldean/overworld.png new file mode 100644 index 0000000000..f82da6a04d Binary files /dev/null and b/graphics/pokemon/wooper/wooper_paldean/overworld.png differ diff --git a/graphics/pokemon/wooper/wooper_paldean/overworld_normal.pal b/graphics/pokemon/wooper/wooper_paldean/overworld_normal.pal new file mode 100644 index 0000000000..714f15aa52 --- /dev/null +++ b/graphics/pokemon/wooper/wooper_paldean/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +99 73 120 +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 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/wooper/wooper_paldean/overworld_shiny.pal b/graphics/pokemon/wooper/wooper_paldean/overworld_shiny.pal new file mode 100644 index 0000000000..85ffcdee9f --- /dev/null +++ b/graphics/pokemon/wooper/wooper_paldean/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +120 80 48 +230 186 149 +102 96 146 +140 133 186 +16 16 16 +204 202 219 +171 167 198 +200 144 97 +255 255 255 +35 36 46 +180 65 65 +255 106 115 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/pokemon/wugtrio/overworld.png b/graphics/pokemon/wugtrio/overworld.png new file mode 100644 index 0000000000..c3d0619f1a Binary files /dev/null and b/graphics/pokemon/wugtrio/overworld.png differ diff --git a/graphics/pokemon/wugtrio/overworld_normal.pal b/graphics/pokemon/wugtrio/overworld_normal.pal new file mode 100644 index 0000000000..d71097d06a --- /dev/null +++ b/graphics/pokemon/wugtrio/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +218 54 87 +102 28 43 +200 200 200 +159 43 86 +128 16 48 +171 147 179 +213 199 224 +193 36 68 +112 94 119 +43 57 74 +64 87 113 +88 118 143 +130 173 176 +0 0 0 diff --git a/graphics/pokemon/wugtrio/overworld_shiny.pal b/graphics/pokemon/wugtrio/overworld_shiny.pal new file mode 100644 index 0000000000..782360162e --- /dev/null +++ b/graphics/pokemon/wugtrio/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +115 197 164 +0 0 0 +121 131 255 +41 37 126 +200 200 200 +77 89 247 +64 64 208 +217 153 34 +255 220 80 +100 112 255 +162 114 26 +43 57 74 +64 87 113 +88 118 143 +130 173 176 +0 0 0 diff --git a/graphics/pokemon/xatu/overworld.png b/graphics/pokemon/xatu/overworld.png index 70b4c85391..223ef93098 100644 Binary files a/graphics/pokemon/xatu/overworld.png and b/graphics/pokemon/xatu/overworld.png differ diff --git a/graphics/pokemon/xerneas/active/overworld.png b/graphics/pokemon/xerneas/active/overworld.png new file mode 100644 index 0000000000..c5bf3867ee Binary files /dev/null and b/graphics/pokemon/xerneas/active/overworld.png differ diff --git a/graphics/pokemon/xerneas/active/overworld_normal.pal b/graphics/pokemon/xerneas/active/overworld_normal.pal new file mode 100644 index 0000000000..cfa83f5465 --- /dev/null +++ b/graphics/pokemon/xerneas/active/overworld_normal.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +16 16 16 +32 34 38 +48 181 222 +84 63 30 +164 88 198 +212 193 126 +139 138 111 +218 52 55 +255 208 67 +55 64 205 +92 123 216 +55 57 65 +202 204 210 +84 63 30 +0 0 0 diff --git a/graphics/pokemon/xerneas/active/overworld_shiny.pal b/graphics/pokemon/xerneas/active/overworld_shiny.pal new file mode 100644 index 0000000000..cfa83f5465 --- /dev/null +++ b/graphics/pokemon/xerneas/active/overworld_shiny.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +153 211 165 +16 16 16 +32 34 38 +48 181 222 +84 63 30 +164 88 198 +212 193 126 +139 138 111 +218 52 55 +255 208 67 +55 64 205 +92 123 216 +55 57 65 +202 204 210 +84 63 30 +0 0 0 diff --git a/graphics/pokemon/xerneas/overworld.png b/graphics/pokemon/xerneas/overworld.png index 3c25137df4..ce548cd1ac 100644 Binary files a/graphics/pokemon/xerneas/overworld.png and b/graphics/pokemon/xerneas/overworld.png differ diff --git a/graphics/pokemon/xerneas/overworld_neutral.png b/graphics/pokemon/xerneas/overworld_neutral.png new file mode 100644 index 0000000000..9d40b9ff59 Binary files /dev/null and b/graphics/pokemon/xerneas/overworld_neutral.png differ diff --git a/graphics/pokemon/xerneas/overworld_normal.pal b/graphics/pokemon/xerneas/overworld_normal.pal index cfa83f5465..6ba56fe6c6 100644 --- a/graphics/pokemon/xerneas/overworld_normal.pal +++ b/graphics/pokemon/xerneas/overworld_normal.pal @@ -16,4 +16,4 @@ JASC-PAL 55 57 65 202 204 210 84 63 30 -0 0 0 +185 236 253 diff --git a/graphics/pokemon/xerneas/overworld_shiny.pal b/graphics/pokemon/xerneas/overworld_shiny.pal index 6b1dbf9941..6ba56fe6c6 100644 --- a/graphics/pokemon/xerneas/overworld_shiny.pal +++ b/graphics/pokemon/xerneas/overworld_shiny.pal @@ -3,7 +3,7 @@ JASC-PAL 16 153 211 165 16 16 16 -53 51 52 +32 34 38 48 181 222 84 63 30 164 88 198 @@ -11,9 +11,9 @@ JASC-PAL 139 138 111 218 52 55 255 208 67 -25 134 171 -38 199 254 -224 224 224 +55 64 205 +92 123 216 +55 57 65 202 204 210 -119 117 119 -0 0 0 +84 63 30 +185 236 253 diff --git a/graphics/pokemon/yamask/galarian/back.png b/graphics/pokemon/yamask/galarian/back.png index 06f46eae0b..ddc858a8d2 100644 Binary files a/graphics/pokemon/yamask/galarian/back.png and b/graphics/pokemon/yamask/galarian/back.png differ diff --git a/graphics/pokemon/yamask/galarian/overworld.png b/graphics/pokemon/yamask/galarian/overworld.png index 718654dd38..54276f9a04 100644 Binary files a/graphics/pokemon/yamask/galarian/overworld.png and b/graphics/pokemon/yamask/galarian/overworld.png differ diff --git a/graphics/pokemon/yamask/galarian/overworld_normal.pal b/graphics/pokemon/yamask/galarian/overworld_normal.pal index 0e81179680..af4005de75 100644 --- a/graphics/pokemon/yamask/galarian/overworld_normal.pal +++ b/graphics/pokemon/yamask/galarian/overworld_normal.pal @@ -6,14 +6,14 @@ JASC-PAL 24 24 24 56 56 56 159 83 188 -87 43 104 +98 48 117 77 71 72 128 128 128 235 93 91 194 184 185 136 126 127 179 56 54 -12 12 12 -13 13 13 -14 14 14 -15 15 15 +255 255 255 +255 255 255 +255 255 255 +255 255 255 diff --git a/graphics/pokemon/yamask/galarian/overworld_shiny.pal b/graphics/pokemon/yamask/galarian/overworld_shiny.pal index 0e81179680..7cc24b4ab8 100644 --- a/graphics/pokemon/yamask/galarian/overworld_shiny.pal +++ b/graphics/pokemon/yamask/galarian/overworld_shiny.pal @@ -3,17 +3,17 @@ JASC-PAL 16 140 78 78 0 0 0 -24 24 24 -56 56 56 -159 83 188 -87 43 104 +40 40 72 +72 72 128 +24 216 152 +24 128 88 77 71 72 128 128 128 -235 93 91 +209 105 192 194 184 185 136 126 127 -179 56 54 -12 12 12 -13 13 13 -14 14 14 -15 15 15 +173 55 152 +255 255 255 +255 255 255 +255 255 255 +255 255 255 diff --git a/graphics/pokemon/yamask/galarian/shiny.pal b/graphics/pokemon/yamask/galarian/shiny.pal index 7ab1ad8cb2..276ff7ab14 100644 --- a/graphics/pokemon/yamask/galarian/shiny.pal +++ b/graphics/pokemon/yamask/galarian/shiny.pal @@ -8,10 +8,10 @@ JASC-PAL 24 128 88 24 216 152 16 64 48 -200 64 72 +173 55 152 192 184 184 224 216 216 -208 96 104 +209 105 192 144 120 136 0 0 0 0 0 0 diff --git a/graphics/pokemon/yanma/overworld.png b/graphics/pokemon/yanma/overworld.png index 4f9e45ea95..fbd1be82bd 100644 Binary files a/graphics/pokemon/yanma/overworld.png and b/graphics/pokemon/yanma/overworld.png differ diff --git a/graphics/pokemon/yanmega/overworld.png b/graphics/pokemon/yanmega/overworld.png index 8ec817a0ea..5362dc419d 100644 Binary files a/graphics/pokemon/yanmega/overworld.png and b/graphics/pokemon/yanmega/overworld.png differ diff --git a/graphics/pokemon/zacian/crowned_sword/overworld.png b/graphics/pokemon/zacian/crowned_sword/overworld.png index b8069ecd51..887fa22ebd 100644 Binary files a/graphics/pokemon/zacian/crowned_sword/overworld.png and b/graphics/pokemon/zacian/crowned_sword/overworld.png differ diff --git a/graphics/pokemon/zacian/crowned_sword/overworld_shiny.pal b/graphics/pokemon/zacian/crowned_sword/overworld_shiny.pal index 906648fada..ea9e618a26 100644 --- a/graphics/pokemon/zacian/crowned_sword/overworld_shiny.pal +++ b/graphics/pokemon/zacian/crowned_sword/overworld_shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 131 129 131 -57 109 164 +40 136 160 197 145 65 -98 93 24 +48 88 176 16 36 41 -213 210 98 -213 76 49 -164 56 32 -246 226 189 +224 208 152 +48 88 176 +32 64 136 +248 224 192 0 0 0 74 68 16 -74 133 197 +102 193 209 230 226 230 -90 85 24 -32 68 106 -222 109 90 +120 78 20 +40 80 104 +64 112 240 diff --git a/graphics/pokemon/zamazenta/crowned_shield/overworld.png b/graphics/pokemon/zamazenta/crowned_shield/overworld.png index 8adba6b740..f0b482982d 100644 Binary files a/graphics/pokemon/zamazenta/crowned_shield/overworld.png and b/graphics/pokemon/zamazenta/crowned_shield/overworld.png differ diff --git a/graphics/pokemon/zamazenta/crowned_shield/overworld_normal.pal b/graphics/pokemon/zamazenta/crowned_shield/overworld_normal.pal index 54124216e5..0906c9bf94 100644 --- a/graphics/pokemon/zamazenta/crowned_shield/overworld_normal.pal +++ b/graphics/pokemon/zamazenta/crowned_shield/overworld_normal.pal @@ -6,7 +6,7 @@ JASC-PAL 16 28 57 164 153 41 148 28 32 -222 210 32 +232 48 56 205 44 57 213 210 106 74 72 16 diff --git a/graphics/pokemon/zamazenta/crowned_shield/overworld_shiny.pal b/graphics/pokemon/zamazenta/crowned_shield/overworld_shiny.pal index 54124216e5..57e6bf2744 100644 --- a/graphics/pokemon/zamazenta/crowned_shield/overworld_shiny.pal +++ b/graphics/pokemon/zamazenta/crowned_shield/overworld_shiny.pal @@ -2,18 +2,18 @@ JASC-PAL 0100 16 131 129 131 -41 64 148 +200 48 104 16 28 57 164 153 41 -148 28 32 -222 210 32 -205 44 57 -213 210 106 -74 72 16 +168 48 144 +232 80 192 +232 80 192 +224 208 152 +107 67 47 172 174 189 -24 44 98 +200 48 104 0 0 0 -32 48 115 +160 40 64 148 157 172 213 214 222 -205 194 57 +192 152 96 diff --git a/graphics/pokemon/zangoose/overworld.png b/graphics/pokemon/zangoose/overworld.png index 84fce3accb..97323cd969 100644 Binary files a/graphics/pokemon/zangoose/overworld.png and b/graphics/pokemon/zangoose/overworld.png differ diff --git a/graphics/pokemon/zapdos/galarian/overworld.png b/graphics/pokemon/zapdos/galarian/overworld.png index 648884dbe6..47321a67f4 100644 Binary files a/graphics/pokemon/zapdos/galarian/overworld.png and b/graphics/pokemon/zapdos/galarian/overworld.png differ diff --git a/graphics/pokemon/zapdos/galarian/overworld_shiny.pal b/graphics/pokemon/zapdos/galarian/overworld_shiny.pal index be143c0a1f..be66a806cf 100644 --- a/graphics/pokemon/zapdos/galarian/overworld_shiny.pal +++ b/graphics/pokemon/zapdos/galarian/overworld_shiny.pal @@ -11,9 +11,9 @@ JASC-PAL 32 32 32 255 255 255 255 255 255 -0 0 0 -0 0 0 -0 0 0 +248 136 16 +112 48 24 +216 112 48 0 0 0 0 0 0 0 0 0 diff --git a/graphics/pokemon/zapdos/overworld.png b/graphics/pokemon/zapdos/overworld.png index cac1899cdb..c1d3dc19ae 100644 Binary files a/graphics/pokemon/zapdos/overworld.png and b/graphics/pokemon/zapdos/overworld.png differ diff --git a/graphics/pokemon/zebstrika/overworld.png b/graphics/pokemon/zebstrika/overworld.png index fbe6fa8f56..36f7228a62 100644 Binary files a/graphics/pokemon/zebstrika/overworld.png and b/graphics/pokemon/zebstrika/overworld.png differ diff --git a/graphics/pokemon/zebstrika/overworld_normal.pal b/graphics/pokemon/zebstrika/overworld_normal.pal index fa9c14b6c0..653eafbda3 100644 --- a/graphics/pokemon/zebstrika/overworld_normal.pal +++ b/graphics/pokemon/zebstrika/overworld_normal.pal @@ -3,7 +3,7 @@ JASC-PAL 16 152 208 160 57 65 65 -57 65 65 +29 41 41 244 245 247 204 204 204 7 7 7 @@ -13,7 +13,7 @@ JASC-PAL 57 65 65 112 112 112 116 168 95 -7 7 7 -7 7 7 +248 224 0 +0 168 216 7 7 7 0 0 0 diff --git a/graphics/pokemon/zebstrika/overworld_shiny.pal b/graphics/pokemon/zebstrika/overworld_shiny.pal index 27178df2c1..4f52aeaad0 100644 --- a/graphics/pokemon/zebstrika/overworld_shiny.pal +++ b/graphics/pokemon/zebstrika/overworld_shiny.pal @@ -11,9 +11,9 @@ JASC-PAL 0 0 0 164 164 164 30 109 89 -116 116 116 +104 98 115 134 216 33 -0 0 0 -0 0 0 +248 224 0 +0 192 88 0 0 0 0 0 0 diff --git a/graphics/pokemon/zigzagoon/galarian/overworld.png b/graphics/pokemon/zigzagoon/galarian/overworld.png index 2785e862ab..d351cbdc90 100644 Binary files a/graphics/pokemon/zigzagoon/galarian/overworld.png and b/graphics/pokemon/zigzagoon/galarian/overworld.png differ diff --git a/graphics/pokemon/zigzagoon/galarian/overworld_shiny.pal b/graphics/pokemon/zigzagoon/galarian/overworld_shiny.pal index 6b74af8455..0277759a9e 100644 --- a/graphics/pokemon/zigzagoon/galarian/overworld_shiny.pal +++ b/graphics/pokemon/zigzagoon/galarian/overworld_shiny.pal @@ -4,16 +4,16 @@ JASC-PAL 52 87 191 31 43 44 36 36 36 -52 52 52 -96 101 106 -62 64 66 +82 9 36 +200 24 88 +144 8 48 163 164 163 245 245 246 0 0 0 178 179 178 -113 119 125 -238 150 178 -217 74 127 -110 59 81 +140 17 62 +152 248 240 +16 232 208 +46 79 75 64 72 80 168 184 208 diff --git a/graphics/pokemon/zorua/hisuian/overworld.png b/graphics/pokemon/zorua/hisuian/overworld.png index 9d98e3fd7a..1bc82dd88a 100644 Binary files a/graphics/pokemon/zorua/hisuian/overworld.png and b/graphics/pokemon/zorua/hisuian/overworld.png differ diff --git a/graphics/pokemon/zubat/overworld.png b/graphics/pokemon/zubat/overworld.png index 3b51b35c6c..cd1ba2a2ca 100644 Binary files a/graphics/pokemon/zubat/overworld.png and b/graphics/pokemon/zubat/overworld.png differ diff --git a/graphics/text_window/signpost.bin b/graphics/text_window/signpost.bin new file mode 100644 index 0000000000..6358e199db Binary files /dev/null and b/graphics/text_window/signpost.bin differ diff --git a/graphics/text_window/signpost.png b/graphics/text_window/signpost.png new file mode 100644 index 0000000000..45ab7c6764 Binary files /dev/null and b/graphics/text_window/signpost.png differ diff --git a/graphics/types/battle_icons1.pal b/graphics/types/battle_icons1.pal new file mode 100644 index 0000000000..972dfd02af --- /dev/null +++ b/graphics/types/battle_icons1.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +120 152 128 +49 49 49 +255 255 255 +164 82 57 +172 189 32 +184 160 90 +213 180 90 +98 98 180 +180 90 164 +172 164 148 +172 172 197 +152 172 246 diff --git a/graphics/types/battle_icons1.png b/graphics/types/battle_icons1.png new file mode 100644 index 0000000000..c47b07f117 Binary files /dev/null and b/graphics/types/battle_icons1.png differ diff --git a/graphics/types/battle_icons2.pal b/graphics/types/battle_icons2.pal new file mode 100644 index 0000000000..bddf49ad95 --- /dev/null +++ b/graphics/types/battle_icons2.pal @@ -0,0 +1,15 @@ +JASC-PAL +0100 +12 +120 152 128 +49 49 49 +255 255 255 +240 82 48 +120 200 80 +248 197 49 +80 120 136 +123 98 230 +248 115 164 +57 156 255 +90 205 230 +246 180 246 diff --git a/graphics/types/battle_icons2.png b/graphics/types/battle_icons2.png new file mode 100644 index 0000000000..44aa4f8954 Binary files /dev/null and b/graphics/types/battle_icons2.png differ diff --git a/include/battle.h b/include/battle.h index 1aa26a9470..7ccbcfbfe4 100644 --- a/include/battle.h +++ b/include/battle.h @@ -42,7 +42,7 @@ // Used to exclude moves learned temporarily by Transform or Mimic #define MOVE_IS_PERMANENT(battler, moveSlot) \ (!(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) \ - && !(gDisableStructs[battler].mimickedMoves & gBitTable[moveSlot])) + && !(gDisableStructs[battler].mimickedMoves & (1u << moveSlot))) // Battle Actions // These determine what each battler will do in a turn @@ -115,17 +115,15 @@ struct DisableStruct u8 disableTimer:4; u8 encoreTimer:4; u8 perishSongTimer:4; - u8 furyCutterCounter; u8 rolloutTimer:4; u8 rolloutTimerStartValue:4; - u8 chargeTimer:4; u8 tauntTimer:4; + u8 furyCutterCounter; u8 battlerPreventingEscape; u8 battlerWithSureHit; u8 isFirstTurn; - u8 truantCounter:1; - u8 truantSwitchInHack:1; u8 mimickedMoves:4; + u8 chargeTimer:4; u8 rechargeTimer; u8 autotomizeCount; u8 slowStartTimer; @@ -138,6 +136,8 @@ struct DisableStruct u8 wrapTurns; u8 tormentTimer:4; // used for G-Max Meltdown u8 usedMoves:4; + u8 truantCounter:1; + u8 truantSwitchInHack:1; u8 noRetreat:1; u8 tarShot:1; u8 octolock:1; @@ -221,7 +221,7 @@ struct SpecialStatus u8 faintedHasReplacement:1; u8 focusBanded:1; u8 focusSashed:1; - u8 unused:1; + u8 unused:2; // End of byte u8 sturdied:1; u8 stormDrainRedirected:1; @@ -600,12 +600,34 @@ struct LostItem u16 stolen:1; }; -#if HQ_RANDOM == TRUE struct BattleVideo { u32 battleTypeFlags; rng_value_t rngSeed; }; -#endif + +enum BattleIntroStates +{ + BATTLE_INTRO_STATE_GET_MON_DATA, + BATTLE_INTRO_STATE_LOOP_BATTLER_DATA, + BATTLE_INTRO_STATE_PREPARE_BG_SLIDE, + BATTLE_INTRO_STATE_WAIT_FOR_BG_SLIDE, + BATTLE_INTRO_STATE_DRAW_SPRITES, + BATTLE_INTRO_STATE_DRAW_PARTY_SUMMARY, + BATTLE_INTRO_STATE_WAIT_FOR_PARTY_SUMMARY, + BATTLE_INTRO_STATE_INTRO_TEXT, + BATTLE_INTRO_STATE_WAIT_FOR_INTRO_TEXT, + BATTLE_INTRO_STATE_TRAINER_SEND_OUT_TEXT, + BATTLE_INTRO_STATE_WAIT_FOR_TRAINER_SEND_OUT_TEXT, + BATTLE_INTRO_STATE_TRAINER_1_SEND_OUT_ANIM, + BATTLE_INTRO_STATE_TRAINER_2_SEND_OUT_ANIM, + BATTLE_INTRO_STATE_WAIT_FOR_TRAINER_2_SEND_OUT_ANIM, + BATTLE_INTRO_STATE_WAIT_FOR_WILD_BATTLE_TEXT, + BATTLE_INTRO_STATE_PRINT_PLAYER_SEND_OUT_TEXT, + BATTLE_INTRO_STATE_WAIT_FOR_PLAYER_SEND_OUT_TEXT, + BATTLE_INTRO_STATE_PRINT_PLAYER_1_SEND_OUT_TEXT, + BATTLE_INTRO_STATE_PRINT_PLAYER_2_SEND_OUT_TEXT, + BATTLE_INTRO_STATE_SET_DEX_AND_BATTLE_VARS +}; struct BattleStruct { @@ -676,18 +698,14 @@ struct BattleStruct u16 chosenItem[MAX_BATTLERS_COUNT]; u16 choicedMove[MAX_BATTLERS_COUNT]; u16 changedItems[MAX_BATTLERS_COUNT]; + u8 canPickupItem; u8 switchInBattlerCounter; u8 arenaTurnCounter; u8 turnSideTracker; u16 lastTakenMoveFrom[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT]; // a 2-D array [target][attacker] union { struct LinkBattlerHeader linkBattlerHeader; - - #if HQ_RANDOM == FALSE - u32 battleVideo[2]; - #else struct BattleVideo battleVideo; - #endif } multiBuffer; u8 wishPerishSongState; u8 wishPerishSongBattlerId; @@ -725,7 +743,7 @@ struct BattleStruct struct BattleGimmickData gimmick; const u8 *trainerSlideMsg; bool8 trainerSlideLowHpMsgDone; - u8 introState; + enum BattleIntroStates introState:8; u8 ateBerry[2]; // array id determined by side, each party pokemon as bit u8 stolenStats[NUM_BATTLE_STATS]; // hp byte is used for which stats to raise, other inform about by how many stages u8 lastMoveFailed; // as bits for each battler, for the sake of Stomping Tantrum @@ -763,7 +781,6 @@ 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][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. @@ -800,6 +817,8 @@ struct BattleStruct u8 distortedTypeMatchups; u8 categoryOverride; // for Z-Moves and Max Moves u32 stellarBoostFlags[NUM_BATTLE_SIDES]; // stored as a bitfield of flags for all types for each side + u8 fickleBeamBoosted:1; + u8 obedienceResult:3; }; // The palaceFlags member of struct BattleStruct contains 1 flag per move to indicate which moves the AI should consider, @@ -811,13 +830,6 @@ STATIC_ASSERT(sizeof(((struct BattleStruct *)0)->palaceFlags) * 8 >= MAX_BATTLER #define F_DYNAMIC_TYPE_IGNORE_PHYSICALITY (1 << 6) // If set, the dynamic type's physicality won't be used for certain move effects. #define F_DYNAMIC_TYPE_SET (1 << 7) // Set for all dynamic types to distinguish a dynamic type of Normal (0) from no dynamic type. -#define GET_MOVE_TYPE(move, typeArg) do { \ - if (gBattleStruct->dynamicMoveType) \ - typeArg = gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK; \ - else \ - typeArg = gMovesInfo[move].type; \ -} while(0) - #define IS_MOVE_PHYSICAL(move)(GetBattleMoveCategory(move) == DAMAGE_CATEGORY_PHYSICAL) #define IS_MOVE_SPECIAL(move)(GetBattleMoveCategory(move) == DAMAGE_CATEGORY_SPECIAL) #define IS_MOVE_STATUS(move)(gMovesInfo[move].category == DAMAGE_CATEGORY_STATUS) @@ -825,25 +837,25 @@ STATIC_ASSERT(sizeof(((struct BattleStruct *)0)->palaceFlags) * 8 >= MAX_BATTLER #define IS_MOVE_RECOIL(move)(gMovesInfo[move].recoil > 0 || gMovesInfo[move].effect == EFFECT_RECOIL_IF_MISS) #define BATTLER_MAX_HP(battlerId)(gBattleMons[battlerId].hp == gBattleMons[battlerId].maxHP) -#define TARGET_TURN_DAMAGED ((gSpecialStatuses[gBattlerTarget].physicalDmg != 0 || gSpecialStatuses[gBattlerTarget].specialDmg != 0) || (gBattleStruct->enduredDamage & gBitTable[gBattlerTarget])) -#define BATTLER_TURN_DAMAGED(battlerId) ((gSpecialStatuses[battlerId].physicalDmg != 0 || gSpecialStatuses[battlerId].specialDmg != 0) || (gBattleStruct->enduredDamage & gBitTable[battler])) +#define TARGET_TURN_DAMAGED ((gSpecialStatuses[gBattlerTarget].physicalDmg != 0 || gSpecialStatuses[gBattlerTarget].specialDmg != 0) || (gBattleStruct->enduredDamage & (1u << gBattlerTarget))) +#define BATTLER_TURN_DAMAGED(battlerId) ((gSpecialStatuses[battlerId].physicalDmg != 0 || gSpecialStatuses[battlerId].specialDmg != 0) || (gBattleStruct->enduredDamage & (1u << battler))) #define IS_BATTLER_OF_TYPE(battlerId, type)((GetBattlerType(battlerId, 0, FALSE) == type || GetBattlerType(battlerId, 1, FALSE) == type || (GetBattlerType(battlerId, 2, FALSE) != TYPE_MYSTERY && GetBattlerType(battlerId, 2, FALSE) == type))) #define IS_BATTLER_OF_BASE_TYPE(battlerId, type)((GetBattlerType(battlerId, 0, TRUE) == type || GetBattlerType(battlerId, 1, TRUE) == type || (GetBattlerType(battlerId, 2, TRUE) != TYPE_MYSTERY && GetBattlerType(battlerId, 2, TRUE) == type))) #define IS_BATTLER_TYPELESS(battlerId)(GetBattlerType(battlerId, 0, FALSE) == TYPE_MYSTERY && GetBattlerType(battlerId, 1, FALSE) == TYPE_MYSTERY && GetBattlerType(battlerId, 2, FALSE) == TYPE_MYSTERY) -#define SET_BATTLER_TYPE(battlerId, type) \ -{ \ - gBattleMons[battlerId].type1 = type; \ - gBattleMons[battlerId].type2 = type; \ - gBattleMons[battlerId].type3 = TYPE_MYSTERY; \ +#define SET_BATTLER_TYPE(battlerId, type) \ +{ \ + gBattleMons[battlerId].types[0] = type; \ + gBattleMons[battlerId].types[1] = type; \ + gBattleMons[battlerId].types[2] = TYPE_MYSTERY; \ } -#define RESTORE_BATTLER_TYPE(battlerId) \ -{ \ - gBattleMons[battlerId].type1 = gSpeciesInfo[gBattleMons[battlerId].species].types[0]; \ - gBattleMons[battlerId].type2 = gSpeciesInfo[gBattleMons[battlerId].species].types[1]; \ - gBattleMons[battlerId].type3 = TYPE_MYSTERY; \ +#define RESTORE_BATTLER_TYPE(battlerId) \ +{ \ + gBattleMons[battlerId].types[0] = gSpeciesInfo[gBattleMons[battlerId].species].types[0]; \ + gBattleMons[battlerId].types[1] = gSpeciesInfo[gBattleMons[battlerId].species].types[1]; \ + gBattleMons[battlerId].types[2] = TYPE_MYSTERY; \ } #define IS_BATTLER_PROTECTED(battlerId)(gProtectStructs[battlerId].protected \ @@ -967,7 +979,10 @@ struct BattleHealthboxInfo u8 animationState; u8 partyStatusDelayTimer; u8 matrixNum; - u8 shadowSpriteId; + + u8 shadowSpriteIdPrimary; + u8 shadowSpriteIdSecondary; + u8 soundTimer; u8 introEndDelay; u8 field_A; @@ -1138,6 +1153,12 @@ static inline u32 GetBattlerSide(u32 battler) return GetBattlerPosition(battler) & BIT_SIDE; } +static inline struct Pokemon* GetPartyBattlerData(u32 battler) +{ + u32 index = gBattlerPartyIndexes[battler]; + return (GetBattlerSide(battler) == B_SIDE_OPPONENT) ? &gEnemyParty[index] : &gPlayerParty[index]; +} + static inline struct Pokemon *GetSideParty(u32 side) { return (side == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty; @@ -1148,4 +1169,10 @@ static inline struct Pokemon *GetBattlerParty(u32 battler) return GetSideParty(GetBattlerSide(battler)); } +static inline bool32 IsDoubleBattle(void) +{ + return gBattleTypeFlags & BATTLE_TYPE_DOUBLE; +} + #endif // GUARD_BATTLE_H + diff --git a/include/battle_ai_switch_items.h b/include/battle_ai_switch_items.h index b52e792612..3c70132afe 100644 --- a/include/battle_ai_switch_items.h +++ b/include/battle_ai_switch_items.h @@ -5,5 +5,6 @@ void GetAIPartyIndexes(u32 battlerId, s32 *firstId, s32 *lastId); void AI_TrySwitchOrUseItem(u32 battler); u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd); bool32 ShouldSwitch(u32 battler, bool32 emitResult); +bool32 IsMonGrounded(u16 heldItemEffect, u32 ability, u8 type1, u8 type2); #endif // GUARD_BATTLE_AI_SWITCH_ITEMS_H diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 94d895e8fd..5fecdd5f47 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -72,7 +72,6 @@ bool32 CanKnockOffItem(u32 battler, u32 item); bool32 IsAbilityOfRating(u32 ability, s8 rating); bool32 AI_IsAbilityOnSide(u32 battlerId, u32 ability); bool32 AI_MoveMakesContact(u32 ability, u32 holdEffect, u32 move); -u32 AI_GetBattlerMoveTargetType(u32 battlerId, u32 move); bool32 ShouldUseZMove(u32 battlerAtk, u32 battlerDef, u32 chosenMove); // stat stage checks @@ -115,6 +114,7 @@ bool32 HasMoveEffectANDArg(u32 battlerId, u32 effect, u32 argument); bool32 HasMoveWithAdditionalEffect(u32 battlerId, u32 moveEffect); bool32 HasMoveWithCriticalHitChance(u32 battlerId); bool32 HasMoveWithMoveEffectExcept(u32 battlerId, u32 moveEffect, u32 exception); +bool32 HasMoveThatLowersOwnStats(u32 battlerId); bool32 HasMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef, u32 accCheck, bool32 ignoreStatus, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect); bool32 HasAnyKnownMove(u32 battlerId); bool32 IsAromaVeilProtectedMove(u32 move); @@ -139,6 +139,7 @@ bool32 ShouldFakeOut(u32 battlerAtk, u32 battlerDef, u32 move); bool32 HasThawingMove(u32 battler); bool32 IsStatRaisingEffect(u32 effect); bool32 IsStatLoweringEffect(u32 effect); +bool32 IsSelfStatLoweringEffect(u32 effect); bool32 IsAttackBoostMoveEffect(u32 effect); bool32 IsUngroundingEffect(u32 effect); bool32 IsSemiInvulnerable(u32 battlerDef, u32 move); @@ -205,5 +206,6 @@ bool32 AI_ShouldCopyStatChanges(u32 battlerAtk, u32 battlerDef); bool32 AI_ShouldSetUpHazards(u32 battlerAtk, u32 battlerDef, struct AiLogicData *aiData); void IncreaseTidyUpScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score); bool32 AI_ShouldSpicyExtract(u32 battlerAtk, u32 battlerAtkPartner, u32 move, struct AiLogicData *aiData); +void IncreaseSubstituteMoveScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score); #endif //GUARD_BATTLE_AI_UTIL_H diff --git a/include/battle_anim.h b/include/battle_anim.h index ce9749685e..71f494c87b 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -194,7 +194,6 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId); bool8 IsBattlerSpritePresent(u8 battlerId); void ClearBattleAnimBg(u32 bgId); u8 GetAnimBattlerSpriteId(u8 wantedBattler); -bool8 IsDoubleBattle(void); u8 GetBattleBgPaletteNum(void); u8 GetBattlerSpriteBGPriorityRank(u8 battlerId); void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*spriteCallback)(struct Sprite *)); @@ -253,6 +252,7 @@ void AnimParticleBurst(struct Sprite *); void AnimPowerAbsorptionOrb(struct Sprite *sprite); void AnimNeedleArmSpike(struct Sprite *); void AnimTask_CompressTargetHorizontally(u8 taskId); +void AnimTask_CompressTargetHorizontallyFast(u8 taskId); void AnimSporeParticle(struct Sprite *sprite); void AnimAbsorptionOrb(struct Sprite *sprite); void AnimPetalDanceSmallFlower(struct Sprite *sprite); @@ -557,4 +557,7 @@ void CoreEnforcerLoadBeamTarget(struct Sprite *sprite); void SpriteCB_RandomCentredHits(struct Sprite *sprite); void InitSpritePosToAnimTargetsCentre(struct Sprite *sprite, bool32 respectMonPicOffsets); +// battle_anim_bug.c +void AnimTranslateStinger(struct Sprite *sprite); + #endif // GUARD_BATTLE_ANIM_H diff --git a/include/battle_anim_scripts.h b/include/battle_anim_scripts.h index d97aaa421d..6c49788975 100644 --- a/include/battle_anim_scripts.h +++ b/include/battle_anim_scripts.h @@ -1,940 +1,1018 @@ #ifndef GUARD_BATTLE_ANIM_SCRIPTS_H #define GUARD_BATTLE_ANIM_SCRIPTS_H -extern const u8 Move_NONE[]; -extern const u8 Move_POUND[]; -extern const u8 Move_KARATE_CHOP[]; -extern const u8 Move_DOUBLE_SLAP[]; -extern const u8 Move_COMET_PUNCH[]; -extern const u8 Move_MEGA_PUNCH[]; -extern const u8 Move_PAY_DAY[]; -extern const u8 Move_FIRE_PUNCH[]; -extern const u8 Move_ICE_PUNCH[]; -extern const u8 Move_THUNDER_PUNCH[]; -extern const u8 Move_SCRATCH[]; -extern const u8 Move_VISE_GRIP[]; -extern const u8 Move_GUILLOTINE[]; -extern const u8 Move_RAZOR_WIND[]; -extern const u8 Move_SWORDS_DANCE[]; -extern const u8 Move_CUT[]; -extern const u8 Move_GUST[]; -extern const u8 Move_WING_ATTACK[]; -extern const u8 Move_WHIRLWIND[]; -extern const u8 Move_FLY[]; -extern const u8 Move_BIND[]; -extern const u8 Move_SLAM[]; -extern const u8 Move_VINE_WHIP[]; -extern const u8 Move_STOMP[]; -extern const u8 Move_DOUBLE_KICK[]; -extern const u8 Move_MEGA_KICK[]; -extern const u8 Move_JUMP_KICK[]; -extern const u8 Move_ROLLING_KICK[]; -extern const u8 Move_SAND_ATTACK[]; -extern const u8 Move_HEADBUTT[]; -extern const u8 Move_HORN_ATTACK[]; -extern const u8 Move_FURY_ATTACK[]; -extern const u8 Move_HORN_DRILL[]; -extern const u8 Move_TACKLE[]; -extern const u8 Move_BODY_SLAM[]; -extern const u8 Move_WRAP[]; -extern const u8 Move_TAKE_DOWN[]; -extern const u8 Move_THRASH[]; -extern const u8 Move_DOUBLE_EDGE[]; -extern const u8 Move_TAIL_WHIP[]; -extern const u8 Move_POISON_STING[]; -extern const u8 Move_TWINEEDLE[]; -extern const u8 Move_PIN_MISSILE[]; -extern const u8 Move_LEER[]; -extern const u8 Move_BITE[]; -extern const u8 Move_GROWL[]; -extern const u8 Move_ROAR[]; -extern const u8 Move_SING[]; -extern const u8 Move_SUPERSONIC[]; -extern const u8 Move_SONIC_BOOM[]; -extern const u8 Move_DISABLE[]; -extern const u8 Move_ACID[]; -extern const u8 Move_EMBER[]; -extern const u8 Move_FLAMETHROWER[]; -extern const u8 Move_MIST[]; -extern const u8 Move_WATER_GUN[]; -extern const u8 Move_HYDRO_PUMP[]; -extern const u8 Move_SURF[]; -extern const u8 Move_ICE_BEAM[]; -extern const u8 Move_BLIZZARD[]; -extern const u8 Move_PSYBEAM[]; -extern const u8 Move_BUBBLE_BEAM[]; -extern const u8 Move_AURORA_BEAM[]; -extern const u8 Move_HYPER_BEAM[]; -extern const u8 Move_PECK[]; -extern const u8 Move_DRILL_PECK[]; -extern const u8 Move_SUBMISSION[]; -extern const u8 Move_LOW_KICK[]; -extern const u8 Move_COUNTER[]; -extern const u8 Move_SEISMIC_TOSS[]; -extern const u8 Move_STRENGTH[]; -extern const u8 Move_ABSORB[]; -extern const u8 Move_MEGA_DRAIN[]; -extern const u8 Move_LEECH_SEED[]; -extern const u8 Move_GROWTH[]; -extern const u8 Move_RAZOR_LEAF[]; -extern const u8 Move_SOLAR_BEAM[]; -extern const u8 Move_POISON_POWDER[]; -extern const u8 Move_STUN_SPORE[]; -extern const u8 Move_SLEEP_POWDER[]; -extern const u8 Move_PETAL_DANCE[]; -extern const u8 Move_STRING_SHOT[]; -extern const u8 Move_DRAGON_RAGE[]; -extern const u8 Move_FIRE_SPIN[]; -extern const u8 Move_THUNDER_SHOCK[]; -extern const u8 Move_THUNDERBOLT[]; -extern const u8 Move_THUNDER_WAVE[]; -extern const u8 Move_THUNDER[]; -extern const u8 Move_ROCK_THROW[]; -extern const u8 Move_EARTHQUAKE[]; -extern const u8 Move_FISSURE[]; -extern const u8 Move_DIG[]; -extern const u8 Move_TOXIC[]; -extern const u8 Move_CONFUSION[]; -extern const u8 Move_PSYCHIC[]; -extern const u8 Move_HYPNOSIS[]; -extern const u8 Move_MEDITATE[]; -extern const u8 Move_AGILITY[]; -extern const u8 Move_QUICK_ATTACK[]; -extern const u8 Move_RAGE[]; -extern const u8 Move_TELEPORT[]; -extern const u8 Move_NIGHT_SHADE[]; -extern const u8 Move_MIMIC[]; -extern const u8 Move_SCREECH[]; -extern const u8 Move_DOUBLE_TEAM[]; -extern const u8 Move_RECOVER[]; -extern const u8 Move_HARDEN[]; -extern const u8 Move_MINIMIZE[]; -extern const u8 Move_SMOKESCREEN[]; -extern const u8 Move_CONFUSE_RAY[]; -extern const u8 Move_WITHDRAW[]; -extern const u8 Move_DEFENSE_CURL[]; -extern const u8 Move_BARRIER[]; -extern const u8 Move_LIGHT_SCREEN[]; -extern const u8 Move_HAZE[]; -extern const u8 Move_REFLECT[]; -extern const u8 Move_FOCUS_ENERGY[]; -extern const u8 Move_BIDE[]; -extern const u8 Move_METRONOME[]; -extern const u8 Move_MIRROR_MOVE[]; -extern const u8 Move_SELF_DESTRUCT[]; -extern const u8 Move_EGG_BOMB[]; -extern const u8 Move_LICK[]; -extern const u8 Move_SMOG[]; -extern const u8 Move_SLUDGE[]; -extern const u8 Move_BONE_CLUB[]; -extern const u8 Move_FIRE_BLAST[]; -extern const u8 Move_WATERFALL[]; -extern const u8 Move_CLAMP[]; -extern const u8 Move_SWIFT[]; -extern const u8 Move_SKULL_BASH[]; -extern const u8 Move_SPIKE_CANNON[]; -extern const u8 Move_CONSTRICT[]; -extern const u8 Move_AMNESIA[]; -extern const u8 Move_KINESIS[]; -extern const u8 Move_SOFT_BOILED[]; -extern const u8 Move_HIGH_JUMP_KICK[]; -extern const u8 Move_GLARE[]; -extern const u8 Move_DREAM_EATER[]; -extern const u8 Move_POISON_GAS[]; -extern const u8 Move_BARRAGE[]; -extern const u8 Move_LEECH_LIFE[]; -extern const u8 Move_LOVELY_KISS[]; -extern const u8 Move_SKY_ATTACK[]; -extern const u8 Move_TRANSFORM[]; -extern const u8 Move_BUBBLE[]; -extern const u8 Move_DIZZY_PUNCH[]; -extern const u8 Move_SPORE[]; -extern const u8 Move_FLASH[]; -extern const u8 Move_PSYWAVE[]; -extern const u8 Move_SPLASH[]; -extern const u8 Move_ACID_ARMOR[]; -extern const u8 Move_CRABHAMMER[]; -extern const u8 Move_EXPLOSION[]; -extern const u8 Move_FURY_SWIPES[]; -extern const u8 Move_BONEMERANG[]; -extern const u8 Move_REST[]; -extern const u8 Move_ROCK_SLIDE[]; -extern const u8 Move_HYPER_FANG[]; -extern const u8 Move_SHARPEN[]; -extern const u8 Move_CONVERSION[]; -extern const u8 Move_TRI_ATTACK[]; -extern const u8 Move_SUPER_FANG[]; -extern const u8 Move_SLASH[]; -extern const u8 Move_SUBSTITUTE[]; -extern const u8 Move_STRUGGLE[]; -extern const u8 Move_SKETCH[]; -extern const u8 Move_TRIPLE_KICK[]; -extern const u8 Move_THIEF[]; -extern const u8 Move_SPIDER_WEB[]; -extern const u8 Move_MIND_READER[]; -extern const u8 Move_NIGHTMARE[]; -extern const u8 Move_FLAME_WHEEL[]; -extern const u8 Move_SNORE[]; -extern const u8 Move_CURSE[]; -extern const u8 Move_FLAIL[]; -extern const u8 Move_CONVERSION_2[]; -extern const u8 Move_AEROBLAST[]; -extern const u8 Move_COTTON_SPORE[]; -extern const u8 Move_REVERSAL[]; -extern const u8 Move_SPITE[]; -extern const u8 Move_POWDER_SNOW[]; -extern const u8 Move_PROTECT[]; -extern const u8 Move_MACH_PUNCH[]; -extern const u8 Move_SCARY_FACE[]; -extern const u8 Move_FEINT_ATTACK[]; -extern const u8 Move_SWEET_KISS[]; -extern const u8 Move_BELLY_DRUM[]; -extern const u8 Move_SLUDGE_BOMB[]; -extern const u8 Move_MUD_SLAP[]; -extern const u8 Move_OCTAZOOKA[]; -extern const u8 Move_SPIKES[]; -extern const u8 Move_ZAP_CANNON[]; -extern const u8 Move_FORESIGHT[]; -extern const u8 Move_DESTINY_BOND[]; -extern const u8 Move_PERISH_SONG[]; -extern const u8 Move_ICY_WIND[]; -extern const u8 Move_DETECT[]; -extern const u8 Move_BONE_RUSH[]; -extern const u8 Move_LOCK_ON[]; -extern const u8 Move_OUTRAGE[]; -extern const u8 Move_SANDSTORM[]; -extern const u8 Move_GIGA_DRAIN[]; -extern const u8 Move_ENDURE[]; -extern const u8 Move_CHARM[]; -extern const u8 Move_ROLLOUT[]; -extern const u8 Move_FALSE_SWIPE[]; -extern const u8 Move_SWAGGER[]; -extern const u8 Move_MILK_DRINK[]; -extern const u8 Move_SPARK[]; -extern const u8 Move_FURY_CUTTER[]; -extern const u8 Move_STEEL_WING[]; -extern const u8 Move_MEAN_LOOK[]; -extern const u8 Move_ATTRACT[]; -extern const u8 Move_SLEEP_TALK[]; -extern const u8 Move_HEAL_BELL[]; -extern const u8 Move_RETURN[]; -extern const u8 Move_PRESENT[]; -extern const u8 Move_FRUSTRATION[]; -extern const u8 Move_SAFEGUARD[]; -extern const u8 Move_PAIN_SPLIT[]; -extern const u8 Move_SACRED_FIRE[]; -extern const u8 Move_MAGNITUDE[]; -extern const u8 Move_DYNAMIC_PUNCH[]; -extern const u8 Move_MEGAHORN[]; -extern const u8 Move_DRAGON_BREATH[]; -extern const u8 Move_BATON_PASS[]; -extern const u8 Move_ENCORE[]; -extern const u8 Move_PURSUIT[]; -extern const u8 Move_RAPID_SPIN[]; -extern const u8 Move_SWEET_SCENT[]; -extern const u8 Move_IRON_TAIL[]; -extern const u8 Move_METAL_CLAW[]; -extern const u8 Move_VITAL_THROW[]; -extern const u8 Move_MORNING_SUN[]; -extern const u8 Move_SYNTHESIS[]; -extern const u8 Move_MOONLIGHT[]; -extern const u8 Move_HIDDEN_POWER[]; -extern const u8 Move_CROSS_CHOP[]; -extern const u8 Move_TWISTER[]; -extern const u8 Move_RAIN_DANCE[]; -extern const u8 Move_SUNNY_DAY[]; -extern const u8 Move_CRUNCH[]; -extern const u8 Move_MIRROR_COAT[]; -extern const u8 Move_PSYCH_UP[]; -extern const u8 Move_EXTREME_SPEED[]; -extern const u8 Move_ANCIENT_POWER[]; -extern const u8 Move_SHADOW_BALL[]; -extern const u8 Move_FUTURE_SIGHT[]; -extern const u8 Move_ROCK_SMASH[]; -extern const u8 Move_WHIRLPOOL[]; -extern const u8 Move_BEAT_UP[]; -extern const u8 Move_FAKE_OUT[]; -extern const u8 Move_UPROAR[]; -extern const u8 Move_STOCKPILE[]; -extern const u8 Move_SPIT_UP[]; -extern const u8 Move_SWALLOW[]; -extern const u8 Move_HEAT_WAVE[]; -extern const u8 Move_HAIL[]; -extern const u8 Move_TORMENT[]; -extern const u8 Move_FLATTER[]; -extern const u8 Move_WILL_O_WISP[]; -extern const u8 Move_MEMENTO[]; -extern const u8 Move_FACADE[]; -extern const u8 Move_FOCUS_PUNCH[]; -extern const u8 Move_SMELLING_SALTS[]; -extern const u8 Move_FOLLOW_ME[]; -extern const u8 Move_NATURE_POWER[]; -extern const u8 Move_CHARGE[]; -extern const u8 Move_TAUNT[]; -extern const u8 Move_HELPING_HAND[]; -extern const u8 Move_TRICK[]; -extern const u8 Move_ROLE_PLAY[]; -extern const u8 Move_WISH[]; -extern const u8 Move_ASSIST[]; -extern const u8 Move_INGRAIN[]; -extern const u8 Move_SUPERPOWER[]; -extern const u8 Move_MAGIC_COAT[]; -extern const u8 Move_RECYCLE[]; -extern const u8 Move_REVENGE[]; -extern const u8 Move_BRICK_BREAK[]; -extern const u8 Move_YAWN[]; -extern const u8 Move_KNOCK_OFF[]; -extern const u8 Move_ENDEAVOR[]; -extern const u8 Move_ERUPTION[]; -extern const u8 Move_SKILL_SWAP[]; -extern const u8 Move_IMPRISON[]; -extern const u8 Move_REFRESH[]; -extern const u8 Move_GRUDGE[]; -extern const u8 Move_SNATCH[]; -extern const u8 Move_SECRET_POWER[]; -extern const u8 Move_DIVE[]; -extern const u8 Move_ARM_THRUST[]; -extern const u8 Move_CAMOUFLAGE[]; -extern const u8 Move_TAIL_GLOW[]; -extern const u8 Move_LUSTER_PURGE[]; -extern const u8 Move_MIST_BALL[]; -extern const u8 Move_FEATHER_DANCE[]; -extern const u8 Move_TEETER_DANCE[]; -extern const u8 Move_BLAZE_KICK[]; -extern const u8 Move_MUD_SPORT[]; -extern const u8 Move_ICE_BALL[]; -extern const u8 Move_NEEDLE_ARM[]; -extern const u8 Move_SLACK_OFF[]; -extern const u8 Move_HYPER_VOICE[]; -extern const u8 Move_POISON_FANG[]; -extern const u8 Move_CRUSH_CLAW[]; -extern const u8 Move_BLAST_BURN[]; -extern const u8 Move_HYDRO_CANNON[]; -extern const u8 Move_METEOR_MASH[]; -extern const u8 Move_ASTONISH[]; -extern const u8 Move_WEATHER_BALL[]; -extern const u8 Move_AROMATHERAPY[]; -extern const u8 Move_FAKE_TEARS[]; -extern const u8 Move_AIR_CUTTER[]; -extern const u8 Move_OVERHEAT[]; -extern const u8 Move_ODOR_SLEUTH[]; -extern const u8 Move_ROCK_TOMB[]; -extern const u8 Move_SILVER_WIND[]; -extern const u8 Move_METAL_SOUND[]; -extern const u8 Move_GRASS_WHISTLE[]; -extern const u8 Move_TICKLE[]; -extern const u8 Move_COSMIC_POWER[]; -extern const u8 Move_WATER_SPOUT[]; -extern const u8 Move_SIGNAL_BEAM[]; -extern const u8 Move_SHADOW_PUNCH[]; -extern const u8 Move_EXTRASENSORY[]; -extern const u8 Move_SKY_UPPERCUT[]; -extern const u8 Move_SAND_TOMB[]; -extern const u8 Move_SHEER_COLD[]; -extern const u8 Move_MUDDY_WATER[]; -extern const u8 Move_BULLET_SEED[]; -extern const u8 Move_AERIAL_ACE[]; -extern const u8 Move_ICICLE_SPEAR[]; -extern const u8 Move_IRON_DEFENSE[]; -extern const u8 Move_BLOCK[]; -extern const u8 Move_HOWL[]; -extern const u8 Move_DRAGON_CLAW[]; -extern const u8 Move_FRENZY_PLANT[]; -extern const u8 Move_BULK_UP[]; -extern const u8 Move_BOUNCE[]; -extern const u8 Move_MUD_SHOT[]; -extern const u8 Move_POISON_TAIL[]; -extern const u8 Move_COVET[]; -extern const u8 Move_VOLT_TACKLE[]; -extern const u8 Move_MAGICAL_LEAF[]; -extern const u8 Move_WATER_SPORT[]; -extern const u8 Move_CALM_MIND[]; -extern const u8 Move_LEAF_BLADE[]; -extern const u8 Move_DRAGON_DANCE[]; -extern const u8 Move_ROCK_BLAST[]; -extern const u8 Move_SHOCK_WAVE[]; -extern const u8 Move_WATER_PULSE[]; -extern const u8 Move_DOOM_DESIRE[]; -extern const u8 Move_PSYCHO_BOOST[]; -extern const u8 Move_ROOST[]; -extern const u8 Move_GRAVITY[]; -extern const u8 Move_MIRACLE_EYE[]; -extern const u8 Move_WAKE_UP_SLAP[]; -extern const u8 Move_HAMMER_ARM[]; -extern const u8 Move_GYRO_BALL[]; -extern const u8 Move_HEALING_WISH[]; -extern const u8 Move_BRINE[]; -extern const u8 Move_NATURAL_GIFT[]; -extern const u8 Move_FEINT[]; -extern const u8 Move_PLUCK[]; -extern const u8 Move_TAILWIND[]; -extern const u8 Move_ACUPRESSURE[]; -extern const u8 Move_METAL_BURST[]; -extern const u8 Move_U_TURN[]; -extern const u8 Move_CLOSE_COMBAT[]; -extern const u8 Move_PAYBACK[]; -extern const u8 Move_ASSURANCE[]; -extern const u8 Move_EMBARGO[]; -extern const u8 Move_FLING[]; -extern const u8 Move_PSYCHO_SHIFT[]; -extern const u8 Move_TRUMP_CARD[]; -extern const u8 Move_HEAL_BLOCK[]; -extern const u8 Move_WRING_OUT[]; -extern const u8 Move_POWER_TRICK[]; -extern const u8 Move_GASTRO_ACID[]; -extern const u8 Move_LUCKY_CHANT[]; -extern const u8 Move_ME_FIRST[]; -extern const u8 Move_COPYCAT[]; -extern const u8 Move_POWER_SWAP[]; -extern const u8 Move_GUARD_SWAP[]; -extern const u8 Move_PUNISHMENT[]; -extern const u8 Move_LAST_RESORT[]; -extern const u8 Move_WORRY_SEED[]; -extern const u8 Move_SUCKER_PUNCH[]; -extern const u8 Move_TOXIC_SPIKES[]; -extern const u8 Move_HEART_SWAP[]; -extern const u8 Move_AQUA_RING[]; -extern const u8 Move_MAGNET_RISE[]; -extern const u8 Move_FLARE_BLITZ[]; -extern const u8 Move_FORCE_PALM[]; -extern const u8 Move_AURA_SPHERE[]; -extern const u8 Move_ROCK_POLISH[]; -extern const u8 Move_POISON_JAB[]; -extern const u8 Move_DARK_PULSE[]; -extern const u8 Move_NIGHT_SLASH[]; -extern const u8 Move_AQUA_TAIL[]; -extern const u8 Move_SEED_BOMB[]; -extern const u8 Move_AIR_SLASH[]; -extern const u8 Move_X_SCISSOR[]; -extern const u8 Move_BUG_BUZZ[]; -extern const u8 Move_DRAGON_PULSE[]; -extern const u8 Move_DRAGON_RUSH[]; -extern const u8 Move_POWER_GEM[]; -extern const u8 Move_DRAIN_PUNCH[]; -extern const u8 Move_VACUUM_WAVE[]; -extern const u8 Move_FOCUS_BLAST[]; -extern const u8 Move_ENERGY_BALL[]; -extern const u8 Move_BRAVE_BIRD[]; -extern const u8 Move_EARTH_POWER[]; -extern const u8 Move_SWITCHEROO[]; -extern const u8 Move_GIGA_IMPACT[]; -extern const u8 Move_NASTY_PLOT[]; -extern const u8 Move_BULLET_PUNCH[]; -extern const u8 Move_AVALANCHE[]; -extern const u8 Move_ICE_SHARD[]; -extern const u8 Move_SHADOW_CLAW[]; -extern const u8 Move_THUNDER_FANG[]; -extern const u8 Move_ICE_FANG[]; -extern const u8 Move_FIRE_FANG[]; -extern const u8 Move_SHADOW_SNEAK[]; -extern const u8 Move_MUD_BOMB[]; -extern const u8 Move_PSYCHO_CUT[]; -extern const u8 Move_ZEN_HEADBUTT[]; -extern const u8 Move_MIRROR_SHOT[]; -extern const u8 Move_FLASH_CANNON[]; -extern const u8 Move_ROCK_CLIMB[]; -extern const u8 Move_DEFOG[]; -extern const u8 Move_TRICK_ROOM[]; -extern const u8 Move_DRACO_METEOR[]; -extern const u8 Move_DISCHARGE[]; -extern const u8 Move_LAVA_PLUME[]; -extern const u8 Move_LEAF_STORM[]; -extern const u8 Move_POWER_WHIP[]; -extern const u8 Move_ROCK_WRECKER[]; -extern const u8 Move_CROSS_POISON[]; -extern const u8 Move_GUNK_SHOT[]; -extern const u8 Move_IRON_HEAD[]; -extern const u8 Move_MAGNET_BOMB[]; -extern const u8 Move_STONE_EDGE[]; -extern const u8 Move_CAPTIVATE[]; -extern const u8 Move_STEALTH_ROCK[]; -extern const u8 Move_GRASS_KNOT[]; -extern const u8 Move_CHATTER[]; -extern const u8 Move_JUDGMENT[]; -extern const u8 Move_BUG_BITE[]; -extern const u8 Move_CHARGE_BEAM[]; -extern const u8 Move_WOOD_HAMMER[]; -extern const u8 Move_AQUA_JET[]; -extern const u8 Move_ATTACK_ORDER[]; -extern const u8 Move_DEFEND_ORDER[]; -extern const u8 Move_HEAL_ORDER[]; -extern const u8 Move_HEAD_SMASH[]; -extern const u8 Move_DOUBLE_HIT[]; -extern const u8 Move_ROAR_OF_TIME[]; -extern const u8 Move_SPACIAL_REND[]; -extern const u8 Move_LUNAR_DANCE[]; -extern const u8 Move_CRUSH_GRIP[]; -extern const u8 Move_MAGMA_STORM[]; -extern const u8 Move_DARK_VOID[]; -extern const u8 Move_SEED_FLARE[]; -extern const u8 Move_OMINOUS_WIND[]; -extern const u8 Move_SHADOW_FORCE[]; -extern const u8 Move_HONE_CLAWS[]; -extern const u8 Move_WIDE_GUARD[]; -extern const u8 Move_GUARD_SPLIT[]; -extern const u8 Move_POWER_SPLIT[]; -extern const u8 Move_WONDER_ROOM[]; -extern const u8 Move_PSYSHOCK[]; -extern const u8 Move_VENOSHOCK[]; -extern const u8 Move_AUTOTOMIZE[]; -extern const u8 Move_RAGE_POWDER[]; -extern const u8 Move_TELEKINESIS[]; -extern const u8 Move_MAGIC_ROOM[]; -extern const u8 Move_SMACK_DOWN[]; -extern const u8 Move_STORM_THROW[]; -extern const u8 Move_FLAME_BURST[]; -extern const u8 Move_SLUDGE_WAVE[]; -extern const u8 Move_QUIVER_DANCE[]; -extern const u8 Move_HEAVY_SLAM[]; -extern const u8 Move_SYNCHRONOISE[]; -extern const u8 Move_ELECTRO_BALL[]; -extern const u8 Move_SOAK[]; -extern const u8 Move_FLAME_CHARGE[]; -extern const u8 Move_COIL[]; -extern const u8 Move_LOW_SWEEP[]; -extern const u8 Move_ACID_SPRAY[]; -extern const u8 Move_FOUL_PLAY[]; -extern const u8 Move_SIMPLE_BEAM[]; -extern const u8 Move_ENTRAINMENT[]; -extern const u8 Move_AFTER_YOU[]; -extern const u8 Move_ROUND[]; -extern const u8 Move_ECHOED_VOICE[]; -extern const u8 Move_CHIP_AWAY[]; -extern const u8 Move_CLEAR_SMOG[]; -extern const u8 Move_STORED_POWER[]; -extern const u8 Move_QUICK_GUARD[]; -extern const u8 Move_ALLY_SWITCH[]; -extern const u8 Move_SCALD[]; -extern const u8 Move_SHELL_SMASH[]; -extern const u8 Move_HEAL_PULSE[]; -extern const u8 Move_HEX[]; -extern const u8 Move_SKY_DROP[]; -extern const u8 Move_SHIFT_GEAR[]; -extern const u8 Move_CIRCLE_THROW[]; -extern const u8 Move_INCINERATE[]; -extern const u8 Move_QUASH[]; -extern const u8 Move_ACROBATICS[]; -extern const u8 Move_REFLECT_TYPE[]; -extern const u8 Move_RETALIATE[]; -extern const u8 Move_FINAL_GAMBIT[]; -extern const u8 Move_BESTOW[]; -extern const u8 Move_INFERNO[]; -extern const u8 Move_WATER_PLEDGE[]; -extern const u8 Move_FIRE_PLEDGE[]; -extern const u8 Move_GRASS_PLEDGE[]; -extern const u8 Move_VOLT_SWITCH[]; -extern const u8 Move_STRUGGLE_BUG[]; -extern const u8 Move_BULLDOZE[]; -extern const u8 Move_FROST_BREATH[]; -extern const u8 Move_DRAGON_TAIL[]; -extern const u8 Move_WORK_UP[]; -extern const u8 Move_ELECTROWEB[]; -extern const u8 Move_WILD_CHARGE[]; -extern const u8 Move_DRILL_RUN[]; -extern const u8 Move_DUAL_CHOP[]; -extern const u8 Move_HEART_STAMP[]; -extern const u8 Move_HORN_LEECH[]; -extern const u8 Move_SACRED_SWORD[]; -extern const u8 Move_RAZOR_SHELL[]; -extern const u8 Move_HEAT_CRASH[]; -extern const u8 Move_LEAF_TORNADO[]; -extern const u8 Move_STEAMROLLER[]; -extern const u8 Move_COTTON_GUARD[]; -extern const u8 Move_NIGHT_DAZE[]; -extern const u8 Move_PSYSTRIKE[]; -extern const u8 Move_TAIL_SLAP[]; -extern const u8 Move_HURRICANE[]; -extern const u8 Move_HEAD_CHARGE[]; -extern const u8 Move_GEAR_GRIND[]; -extern const u8 Move_SEARING_SHOT[]; -extern const u8 Move_TECHNO_BLAST[]; -extern const u8 Move_RELIC_SONG[]; -extern const u8 Move_SECRET_SWORD[]; -extern const u8 Move_GLACIATE[]; -extern const u8 Move_BOLT_STRIKE[]; -extern const u8 Move_BLUE_FLARE[]; -extern const u8 Move_FIERY_DANCE[]; -extern const u8 Move_FREEZE_SHOCK[]; -extern const u8 Move_ICE_BURN[]; -extern const u8 Move_SNARL[]; -extern const u8 Move_ICICLE_CRASH[]; -extern const u8 Move_V_CREATE[]; -extern const u8 Move_FUSION_FLARE[]; -extern const u8 Move_FUSION_BOLT[]; -extern const u8 Move_FLYING_PRESS[]; -extern const u8 Move_MAT_BLOCK[]; -extern const u8 Move_BELCH[]; -extern const u8 Move_ROTOTILLER[]; -extern const u8 Move_STICKY_WEB[]; -extern const u8 Move_FELL_STINGER[]; -extern const u8 Move_PHANTOM_FORCE[]; -extern const u8 Move_TRICK_OR_TREAT[]; -extern const u8 Move_NOBLE_ROAR[]; -extern const u8 Move_ION_DELUGE[]; -extern const u8 Move_PARABOLIC_CHARGE[]; -extern const u8 Move_FORESTS_CURSE[]; -extern const u8 Move_PETAL_BLIZZARD[]; -extern const u8 Move_FREEZE_DRY[]; -extern const u8 Move_DISARMING_VOICE[]; -extern const u8 Move_PARTING_SHOT[]; -extern const u8 Move_TOPSY_TURVY[]; -extern const u8 Move_DRAINING_KISS[]; -extern const u8 Move_CRAFTY_SHIELD[]; -extern const u8 Move_FLOWER_SHIELD[]; -extern const u8 Move_GRASSY_TERRAIN[]; -extern const u8 Move_MISTY_TERRAIN[]; -extern const u8 Move_ELECTRIFY[]; -extern const u8 Move_PLAY_ROUGH[]; -extern const u8 Move_FAIRY_WIND[]; -extern const u8 Move_MOONBLAST[]; -extern const u8 Move_BOOMBURST[]; -extern const u8 Move_FAIRY_LOCK[]; -extern const u8 Move_KINGS_SHIELD[]; -extern const u8 Move_PLAY_NICE[]; -extern const u8 Move_CONFIDE[]; -extern const u8 Move_DIAMOND_STORM[]; -extern const u8 Move_STEAM_ERUPTION[]; -extern const u8 Move_HYPERSPACE_HOLE[]; -extern const u8 Move_WATER_SHURIKEN[]; -extern const u8 Move_MYSTICAL_FIRE[]; -extern const u8 Move_SPIKY_SHIELD[]; -extern const u8 Move_AROMATIC_MIST[]; -extern const u8 Move_EERIE_IMPULSE[]; -extern const u8 Move_VENOM_DRENCH[]; -extern const u8 Move_POWDER[]; -extern const u8 Move_GEOMANCY[]; -extern const u8 Move_MAGNETIC_FLUX[]; -extern const u8 Move_HAPPY_HOUR[]; -extern const u8 Move_ELECTRIC_TERRAIN[]; -extern const u8 Move_DAZZLING_GLEAM[]; -extern const u8 Move_CELEBRATE[]; -extern const u8 Move_HOLD_HANDS[]; -extern const u8 Move_BABY_DOLL_EYES[]; -extern const u8 Move_NUZZLE[]; -extern const u8 Move_HOLD_BACK[]; -extern const u8 Move_INFESTATION[]; -extern const u8 Move_POWER_UP_PUNCH[]; -extern const u8 Move_OBLIVION_WING[]; -extern const u8 Move_THOUSAND_ARROWS[]; -extern const u8 Move_THOUSAND_WAVES[]; -extern const u8 Move_LANDS_WRATH[]; -extern const u8 Move_LIGHT_OF_RUIN[]; -extern const u8 Move_ORIGIN_PULSE[]; -extern const u8 Move_PRECIPICE_BLADES[]; -extern const u8 Move_DRAGON_ASCENT[]; -extern const u8 Move_HYPERSPACE_FURY[]; -extern const u8 Move_SHORE_UP[]; -extern const u8 Move_FIRST_IMPRESSION[]; -extern const u8 Move_BANEFUL_BUNKER[]; -extern const u8 Move_SPIRIT_SHACKLE[]; -extern const u8 Move_DARKEST_LARIAT[]; -extern const u8 Move_SPARKLING_ARIA[]; -extern const u8 Move_ICE_HAMMER[]; -extern const u8 Move_FLORAL_HEALING[]; -extern const u8 Move_HIGH_HORSEPOWER[]; -extern const u8 Move_STRENGTH_SAP[]; -extern const u8 Move_SOLAR_BLADE[]; -extern const u8 Move_LEAFAGE[]; -extern const u8 Move_SPOTLIGHT[]; -extern const u8 Move_TOXIC_THREAD[]; -extern const u8 Move_LASER_FOCUS[]; -extern const u8 Move_GEAR_UP[]; -extern const u8 Move_THROAT_CHOP[]; -extern const u8 Move_POLLEN_PUFF[]; -extern const u8 Move_ANCHOR_SHOT[]; -extern const u8 Move_PSYCHIC_TERRAIN[]; -extern const u8 Move_LUNGE[]; -extern const u8 Move_FIRE_LASH[]; -extern const u8 Move_POWER_TRIP[]; -extern const u8 Move_BURN_UP[]; -extern const u8 Move_SPEED_SWAP[]; -extern const u8 Move_SMART_STRIKE[]; -extern const u8 Move_PURIFY[]; -extern const u8 Move_REVELATION_DANCE[]; -extern const u8 Move_CORE_ENFORCER[]; -extern const u8 Move_TROP_KICK[]; -extern const u8 Move_INSTRUCT[]; -extern const u8 Move_BEAK_BLAST[]; -extern const u8 Move_CLANGING_SCALES[]; -extern const u8 Move_DRAGON_HAMMER[]; -extern const u8 Move_BRUTAL_SWING[]; -extern const u8 Move_AURORA_VEIL[]; -extern const u8 Move_SHELL_TRAP[]; -extern const u8 Move_FLEUR_CANNON[]; -extern const u8 Move_PSYCHIC_FANGS[]; -extern const u8 Move_STOMPING_TANTRUM[]; -extern const u8 Move_SHADOW_BONE[]; -extern const u8 Move_ACCELEROCK[]; -extern const u8 Move_LIQUIDATION[]; -extern const u8 Move_PRISMATIC_LASER[]; -extern const u8 Move_SPECTRAL_THIEF[]; -extern const u8 Move_SUNSTEEL_STRIKE[]; -extern const u8 Move_MOONGEIST_BEAM[]; -extern const u8 Move_TEARFUL_LOOK[]; -extern const u8 Move_ZING_ZAP[]; -extern const u8 Move_NATURES_MADNESS[]; -extern const u8 Move_MULTI_ATTACK[]; -extern const u8 Move_MIND_BLOWN[]; -extern const u8 Move_PLASMA_FISTS[]; -extern const u8 Move_PHOTON_GEYSER[]; -extern const u8 Move_ZIPPY_ZAP[]; -extern const u8 Move_SPLISHY_SPLASH[]; -extern const u8 Move_FLOATY_FALL[]; -extern const u8 Move_PIKA_PAPOW[]; -extern const u8 Move_BOUNCY_BUBBLE[]; -extern const u8 Move_BUZZY_BUZZ[]; -extern const u8 Move_SIZZLY_SLIDE[]; -extern const u8 Move_GLITZY_GLOW[]; -extern const u8 Move_BADDY_BAD[]; -extern const u8 Move_SAPPY_SEED[]; -extern const u8 Move_FREEZY_FROST[]; -extern const u8 Move_SPARKLY_SWIRL[]; -extern const u8 Move_VEEVEE_VOLLEY[]; -extern const u8 Move_DOUBLE_IRON_BASH[]; -extern const u8 Move_DYNAMAX_CANNON[]; -extern const u8 Move_SNIPE_SHOT[]; -extern const u8 Move_JAW_LOCK[]; -extern const u8 Move_STUFF_CHEEKS[]; -extern const u8 Move_NO_RETREAT[]; -extern const u8 Move_TAR_SHOT[]; -extern const u8 Move_MAGIC_POWDER[]; -extern const u8 Move_DRAGON_DARTS[]; -extern const u8 Move_TEATIME[]; -extern const u8 Move_OCTOLOCK[]; -extern const u8 Move_BOLT_BEAK[]; -extern const u8 Move_FISHIOUS_REND[]; -extern const u8 Move_COURT_CHANGE[]; -extern const u8 Move_CLANGOROUS_SOUL[]; -extern const u8 Move_BODY_PRESS[]; -extern const u8 Move_DECORATE[]; -extern const u8 Move_DRUM_BEATING[]; -extern const u8 Move_SNAP_TRAP[]; -extern const u8 Move_PYRO_BALL[]; -extern const u8 Move_BEHEMOTH_BLADE[]; -extern const u8 Move_BEHEMOTH_BASH[]; -extern const u8 Move_AURA_WHEEL[]; -extern const u8 Move_BREAKING_SWIPE[]; -extern const u8 Move_BRANCH_POKE[]; -extern const u8 Move_OVERDRIVE[]; -extern const u8 Move_APPLE_ACID[]; -extern const u8 Move_GRAV_APPLE[]; -extern const u8 Move_SPIRIT_BREAK[]; -extern const u8 Move_STRANGE_STEAM[]; -extern const u8 Move_LIFE_DEW[]; -extern const u8 Move_OBSTRUCT[]; -extern const u8 Move_FALSE_SURRENDER[]; -extern const u8 Move_METEOR_ASSAULT[]; -extern const u8 Move_ETERNABEAM[]; -extern const u8 Move_STEEL_BEAM[]; -extern const u8 Move_EXPANDING_FORCE[]; -extern const u8 Move_STEEL_ROLLER[]; -extern const u8 Move_SCALE_SHOT[]; -extern const u8 Move_METEOR_BEAM[]; -extern const u8 Move_SHELL_SIDE_ARM[]; -extern const u8 Move_MISTY_EXPLOSION[]; -extern const u8 Move_GRASSY_GLIDE[]; -extern const u8 Move_RISING_VOLTAGE[]; -extern const u8 Move_TERRAIN_PULSE[]; -extern const u8 Move_SKITTER_SMACK[]; -extern const u8 Move_BURNING_JEALOUSY[]; -extern const u8 Move_LASH_OUT[]; -extern const u8 Move_POLTERGEIST[]; -extern const u8 Move_CORROSIVE_GAS[]; -extern const u8 Move_COACHING[]; -extern const u8 Move_FLIP_TURN[]; -extern const u8 Move_TRIPLE_AXEL[]; -extern const u8 Move_DUAL_WINGBEAT[]; -extern const u8 Move_SCORCHING_SANDS[]; -extern const u8 Move_JUNGLE_HEALING[]; -extern const u8 Move_WICKED_BLOW[]; -extern const u8 Move_SURGING_STRIKES[]; -extern const u8 Move_THUNDER_CAGE[]; -extern const u8 Move_DRAGON_ENERGY[]; -extern const u8 Move_FREEZING_GLARE[]; -extern const u8 Move_FIERY_WRATH[]; -extern const u8 Move_THUNDEROUS_KICK[]; -extern const u8 Move_GLACIAL_LANCE[]; -extern const u8 Move_ASTRAL_BARRAGE[]; -extern const u8 Move_EERIE_SPELL[]; -extern const u8 Move_DIRE_CLAW[]; -extern const u8 Move_PSYSHIELD_BASH[]; -extern const u8 Move_POWER_SHIFT[]; -extern const u8 Move_STONE_AXE[]; -extern const u8 Move_SPRINGTIDE_STORM[]; -extern const u8 Move_MYSTICAL_POWER[]; -extern const u8 Move_RAGING_FURY[]; -extern const u8 Move_WAVE_CRASH[]; -extern const u8 Move_CHLOROBLAST[]; -extern const u8 Move_MOUNTAIN_GALE[]; -extern const u8 Move_VICTORY_DANCE[]; -extern const u8 Move_HEADLONG_RUSH[]; -extern const u8 Move_BARB_BARRAGE[]; -extern const u8 Move_ESPER_WING[]; -extern const u8 Move_BITTER_MALICE[]; -extern const u8 Move_SHELTER[]; -extern const u8 Move_TRIPLE_ARROWS[]; -extern const u8 Move_INFERNAL_PARADE[]; -extern const u8 Move_CEASELESS_EDGE[]; -extern const u8 Move_BLEAKWIND_STORM[]; -extern const u8 Move_WILDBOLT_STORM[]; -extern const u8 Move_SANDSEAR_STORM[]; -extern const u8 Move_LUNAR_BLESSING[]; -extern const u8 Move_TAKE_HEART[]; -extern const u8 Move_TERA_BLAST[]; -extern const u8 Move_SILK_TRAP[]; -extern const u8 Move_AXE_KICK[]; -extern const u8 Move_LAST_RESPECTS[]; -extern const u8 Move_LUMINA_CRASH[]; -extern const u8 Move_ORDER_UP[]; -extern const u8 Move_JET_PUNCH[]; -extern const u8 Move_SPICY_EXTRACT[]; -extern const u8 Move_SPIN_OUT[]; -extern const u8 Move_POPULATION_BOMB[]; -extern const u8 Move_ICE_SPINNER[]; -extern const u8 Move_GLAIVE_RUSH[]; -extern const u8 Move_REVIVAL_BLESSING[]; -extern const u8 Move_SALT_CURE[]; -extern const u8 Move_TRIPLE_DIVE[]; -extern const u8 Move_MORTAL_SPIN[]; -extern const u8 Move_DOODLE[]; -extern const u8 Move_FILLET_AWAY[]; -extern const u8 Move_KOWTOW_CLEAVE[]; -extern const u8 Move_FLOWER_TRICK[]; -extern const u8 Move_TORCH_SONG[]; -extern const u8 Move_AQUA_STEP[]; -extern const u8 Move_RAGING_BULL[]; -extern const u8 Move_MAKE_IT_RAIN[]; -extern const u8 Move_RUINATION[]; -extern const u8 Move_COLLISION_COURSE[]; -extern const u8 Move_ELECTRO_DRIFT[]; -extern const u8 Move_SHED_TAIL[]; -extern const u8 Move_CHILLY_RECEPTION[]; -extern const u8 Move_TIDY_UP[]; -extern const u8 Move_SNOWSCAPE[]; -extern const u8 Move_POUNCE[]; -extern const u8 Move_TRAILBLAZE[]; -extern const u8 Move_CHILLING_WATER[]; -extern const u8 Move_HYPER_DRILL[]; -extern const u8 Move_TWIN_BEAM[]; -extern const u8 Move_RAGE_FIST[]; -extern const u8 Move_ARMOR_CANNON[]; -extern const u8 Move_BITTER_BLADE[]; -extern const u8 Move_DOUBLE_SHOCK[]; -extern const u8 Move_GIGATON_HAMMER[]; -extern const u8 Move_COMEUPPANCE[]; -extern const u8 Move_AQUA_CUTTER[]; -extern const u8 Move_BLAZING_TORQUE[]; -extern const u8 Move_WICKED_TORQUE[]; -extern const u8 Move_NOXIOUS_TORQUE[]; -extern const u8 Move_COMBAT_TORQUE[]; -extern const u8 Move_MAGICAL_TORQUE[]; -extern const u8 Move_PSYBLADE[]; -extern const u8 Move_HYDRO_STEAM[]; -extern const u8 Move_BLOOD_MOON[]; -extern const u8 Move_MATCHA_GOTCHA[]; -extern const u8 Move_SYRUP_BOMB[]; -extern const u8 Move_IVY_CUDGEL[]; -extern const u8 Move_ELECTRO_SHOT[]; -extern const u8 Move_TERA_STARSTORM[]; -extern const u8 Move_FICKLE_BEAM[]; -extern const u8 Move_BURNING_BULWARK[]; -extern const u8 Move_THUNDERCLAP[]; -extern const u8 Move_MIGHTY_CLEAVE[]; -extern const u8 Move_TACHYON_CUTTER[]; -extern const u8 Move_HARD_PRESS[]; -extern const u8 Move_DRAGON_CHEER[]; -extern const u8 Move_ALLURING_VOICE[]; -extern const u8 Move_TEMPER_FLARE[]; -extern const u8 Move_SUPERCELL_SLAM[]; -extern const u8 Move_PSYCHIC_NOISE[]; -extern const u8 Move_UPPER_HAND[]; -extern const u8 Move_MALIGNANT_CHAIN[]; -extern const u8 Move_BREAKNECK_BLITZ[]; -extern const u8 Move_ALL_OUT_PUMMELING[]; -extern const u8 Move_SUPERSONIC_SKYSTRIKE[]; -extern const u8 Move_ACID_DOWNPOUR[]; -extern const u8 Move_TECTONIC_RAGE[]; -extern const u8 Move_CONTINENTAL_CRUSH[]; -extern const u8 Move_SAVAGE_SPIN_OUT[]; -extern const u8 Move_NEVER_ENDING_NIGHTMARE[]; -extern const u8 Move_CORKSCREW_CRASH[]; -extern const u8 Move_INFERNO_OVERDRIVE[]; -extern const u8 Move_HYDRO_VORTEX[]; -extern const u8 Move_BLOOM_DOOM[]; -extern const u8 Move_GIGAVOLT_HAVOC[]; -extern const u8 Move_SHATTERED_PSYCHE[]; -extern const u8 Move_SUBZERO_SLAMMER[]; -extern const u8 Move_DEVASTATING_DRAKE[]; -extern const u8 Move_BLACK_HOLE_ECLIPSE[]; -extern const u8 Move_TWINKLE_TACKLE[]; -extern const u8 Move_CATASTROPIKA[]; -extern const u8 Move_10000000_VOLT_THUNDERBOLT[]; -extern const u8 Move_STOKED_SPARKSURFER[]; -extern const u8 Move_EXTREME_EVOBOOST[]; -extern const u8 Move_PULVERIZING_PANCAKE[]; -extern const u8 Move_GENESIS_SUPERNOVA[]; -extern const u8 Move_SINISTER_ARROW_RAID[]; -extern const u8 Move_MALICIOUS_MOONSAULT[]; -extern const u8 Move_OCEANIC_OPERETTA[]; -extern const u8 Move_SPLINTERED_STORMSHARDS[]; -extern const u8 Move_LETS_SNUGGLE_FOREVER[]; -extern const u8 Move_CLANGOROUS_SOULBLAZE[]; -extern const u8 Move_GUARDIAN_OF_ALOLA[]; -extern const u8 Move_SEARING_SUNRAZE_SMASH[]; -extern const u8 Move_MENACING_MOONRAZE_MAELSTROM[]; -extern const u8 Move_LIGHT_THAT_BURNS_THE_SKY[]; -extern const u8 Move_SOUL_STEALING_7_STAR_STRIKE[]; -extern const u8 Move_MAX_GUARD[]; -extern const u8 Move_MAX_FLARE[]; -extern const u8 Move_MAX_FLUTTERBY[]; -extern const u8 Move_MAX_LIGHTNING[]; -extern const u8 Move_MAX_STRIKE[]; -extern const u8 Move_MAX_KNUCKLE[]; -extern const u8 Move_MAX_PHANTASM[]; -extern const u8 Move_MAX_HAILSTORM[]; -extern const u8 Move_MAX_OOZE[]; -extern const u8 Move_MAX_GEYSER[]; -extern const u8 Move_MAX_AIRSTREAM[]; -extern const u8 Move_MAX_STARFALL[]; -extern const u8 Move_MAX_WYRMWIND[]; -extern const u8 Move_MAX_MINDSTORM[]; -extern const u8 Move_MAX_ROCKFALL[]; -extern const u8 Move_MAX_QUAKE[]; -extern const u8 Move_MAX_DARKNESS[]; -extern const u8 Move_MAX_OVERGROWTH[]; -extern const u8 Move_MAX_STEELSPIKE[]; -extern const u8 Move_G_MAX_VINE_LASH[]; -extern const u8 Move_G_MAX_WILDFIRE[]; -extern const u8 Move_G_MAX_CANNONADE[]; -extern const u8 Move_G_MAX_BEFUDDLE[]; -extern const u8 Move_G_MAX_VOLT_CRASH[]; -extern const u8 Move_G_MAX_GOLD_RUSH[]; -extern const u8 Move_G_MAX_CHI_STRIKE[]; -extern const u8 Move_G_MAX_TERROR[]; -extern const u8 Move_G_MAX_FOAM_BURST[]; -extern const u8 Move_G_MAX_RESONANCE[]; -extern const u8 Move_G_MAX_CUDDLE[]; -extern const u8 Move_G_MAX_REPLENISH[]; -extern const u8 Move_G_MAX_MALODOR[]; -extern const u8 Move_G_MAX_MELTDOWN[]; -extern const u8 Move_G_MAX_DRUM_SOLO[]; -extern const u8 Move_G_MAX_FIREBALL[]; -extern const u8 Move_G_MAX_HYDROSNIPE[]; -extern const u8 Move_G_MAX_WIND_RAGE[]; -extern const u8 Move_G_MAX_GRAVITAS[]; -extern const u8 Move_G_MAX_STONESURGE[]; -extern const u8 Move_G_MAX_VOLCALITH[]; -extern const u8 Move_G_MAX_TARTNESS[]; -extern const u8 Move_G_MAX_SWEETNESS[]; -extern const u8 Move_G_MAX_SANDBLAST[]; -extern const u8 Move_G_MAX_STUN_SHOCK[]; -extern const u8 Move_G_MAX_CENTIFERNO[]; -extern const u8 Move_G_MAX_SMITE[]; -extern const u8 Move_G_MAX_SNOOZE[]; -extern const u8 Move_G_MAX_FINALE[]; -extern const u8 Move_G_MAX_STEELSURGE[]; -extern const u8 Move_G_MAX_DEPLETION[]; -extern const u8 Move_G_MAX_ONE_BLOW[]; -extern const u8 Move_G_MAX_RAPID_FLOW[]; +// move animations +extern const u8 gBattleAnimMove_None[]; +extern const u8 gBattleAnimMove_Pound[]; +extern const u8 gBattleAnimMove_KarateChop[]; +extern const u8 gBattleAnimMove_DoubleSlap[]; +extern const u8 gBattleAnimMove_CometPunch[]; +extern const u8 gBattleAnimMove_MegaPunch[]; +extern const u8 gBattleAnimMove_PayDay[]; +extern const u8 gBattleAnimMove_FirePunch[]; +extern const u8 gBattleAnimMove_IcePunch[]; +extern const u8 gBattleAnimMove_ThunderPunch[]; +extern const u8 gBattleAnimMove_Scratch[]; +extern const u8 gBattleAnimMove_ViseGrip[]; +extern const u8 gBattleAnimMove_Guillotine[]; +extern const u8 gBattleAnimMove_RazorWind[]; +extern const u8 gBattleAnimMove_SwordsDance[]; +extern const u8 gBattleAnimMove_Cut[]; +extern const u8 gBattleAnimMove_Gust[]; +extern const u8 gBattleAnimMove_WingAttack[]; +extern const u8 gBattleAnimMove_Whirlwind[]; +extern const u8 gBattleAnimMove_Fly[]; +extern const u8 gBattleAnimMove_Bind[]; +extern const u8 gBattleAnimMove_Slam[]; +extern const u8 gBattleAnimMove_VineWhip[]; +extern const u8 gBattleAnimMove_Stomp[]; +extern const u8 gBattleAnimMove_DoubleKick[]; +extern const u8 gBattleAnimMove_MegaKick[]; +extern const u8 gBattleAnimMove_JumpKick[]; +extern const u8 gBattleAnimMove_RollingKick[]; +extern const u8 gBattleAnimMove_SandAttack[]; +extern const u8 gBattleAnimMove_Headbutt[]; +extern const u8 gBattleAnimMove_HornAttack[]; +extern const u8 gBattleAnimMove_FuryAttack[]; +extern const u8 gBattleAnimMove_HornDrill[]; +extern const u8 gBattleAnimMove_Tackle[]; +extern const u8 gBattleAnimMove_BodySlam[]; +extern const u8 gBattleAnimMove_Wrap[]; +extern const u8 gBattleAnimMove_TakeDown[]; +extern const u8 gBattleAnimMove_Thrash[]; +extern const u8 gBattleAnimMove_DoubleEdge[]; +extern const u8 gBattleAnimMove_TailWhip[]; +extern const u8 gBattleAnimMove_PoisonSting[]; +extern const u8 gBattleAnimMove_Twineedle[]; +extern const u8 gBattleAnimMove_PinMissile[]; +extern const u8 gBattleAnimMove_Leer[]; +extern const u8 gBattleAnimMove_Bite[]; +extern const u8 gBattleAnimMove_Growl[]; +extern const u8 gBattleAnimMove_Roar[]; +extern const u8 gBattleAnimMove_Sing[]; +extern const u8 gBattleAnimMove_Supersonic[]; +extern const u8 gBattleAnimMove_SonicBoom[]; +extern const u8 gBattleAnimMove_Disable[]; +extern const u8 gBattleAnimMove_Acid[]; +extern const u8 gBattleAnimMove_Ember[]; +extern const u8 gBattleAnimMove_Flamethrower[]; +extern const u8 gBattleAnimMove_Mist[]; +extern const u8 gBattleAnimMove_WaterGun[]; +extern const u8 gBattleAnimMove_HydroPump[]; +extern const u8 gBattleAnimMove_Surf[]; +extern const u8 gBattleAnimMove_IceBeam[]; +extern const u8 gBattleAnimMove_Blizzard[]; +extern const u8 gBattleAnimMove_Psybeam[]; +extern const u8 gBattleAnimMove_BubbleBeam[]; +extern const u8 gBattleAnimMove_AuroraBeam[]; +extern const u8 gBattleAnimMove_HyperBeam[]; +extern const u8 gBattleAnimMove_Peck[]; +extern const u8 gBattleAnimMove_DrillPeck[]; +extern const u8 gBattleAnimMove_Submission[]; +extern const u8 gBattleAnimMove_LowKick[]; +extern const u8 gBattleAnimMove_Counter[]; +extern const u8 gBattleAnimMove_SeismicToss[]; +extern const u8 gBattleAnimMove_Strength[]; +extern const u8 gBattleAnimMove_Absorb[]; +extern const u8 gBattleAnimMove_MegaDrain[]; +extern const u8 gBattleAnimMove_LeechSeed[]; +extern const u8 gBattleAnimMove_Growth[]; +extern const u8 gBattleAnimMove_RazorLeaf[]; +extern const u8 gBattleAnimMove_SolarBeam[]; +extern const u8 gBattleAnimMove_PoisonPowder[]; +extern const u8 gBattleAnimMove_StunSpore[]; +extern const u8 gBattleAnimMove_SleepPowder[]; +extern const u8 gBattleAnimMove_PetalDance[]; +extern const u8 gBattleAnimMove_StringShot[]; +extern const u8 gBattleAnimMove_DragonRage[]; +extern const u8 gBattleAnimMove_FireSpin[]; +extern const u8 gBattleAnimMove_ThunderShock[]; +extern const u8 gBattleAnimMove_Thunderbolt[]; +extern const u8 gBattleAnimMove_ThunderWave[]; +extern const u8 gBattleAnimMove_Thunder[]; +extern const u8 gBattleAnimMove_RockThrow[]; +extern const u8 gBattleAnimMove_Earthquake[]; +extern const u8 gBattleAnimMove_Fissure[]; +extern const u8 gBattleAnimMove_Dig[]; +extern const u8 gBattleAnimMove_Toxic[]; +extern const u8 gBattleAnimMove_Confusion[]; +extern const u8 gBattleAnimMove_Psychic[]; +extern const u8 gBattleAnimMove_Hypnosis[]; +extern const u8 gBattleAnimMove_Meditate[]; +extern const u8 gBattleAnimMove_Agility[]; +extern const u8 gBattleAnimMove_QuickAttack[]; +extern const u8 gBattleAnimMove_Rage[]; +extern const u8 gBattleAnimMove_Teleport[]; +extern const u8 gBattleAnimMove_NightShade[]; +extern const u8 gBattleAnimMove_Mimic[]; +extern const u8 gBattleAnimMove_Screech[]; +extern const u8 gBattleAnimMove_DoubleTeam[]; +extern const u8 gBattleAnimMove_Recover[]; +extern const u8 gBattleAnimMove_Harden[]; +extern const u8 gBattleAnimMove_Minimize[]; +extern const u8 gBattleAnimMove_Smokescreen[]; +extern const u8 gBattleAnimMove_ConfuseRay[]; +extern const u8 gBattleAnimMove_Withdraw[]; +extern const u8 gBattleAnimMove_DefenseCurl[]; +extern const u8 gBattleAnimMove_Barrier[]; +extern const u8 gBattleAnimMove_LightScreen[]; +extern const u8 gBattleAnimMove_Haze[]; +extern const u8 gBattleAnimMove_Reflect[]; +extern const u8 gBattleAnimMove_FocusEnergy[]; +extern const u8 gBattleAnimMove_Bide[]; +extern const u8 gBattleAnimMove_Metronome[]; +extern const u8 gBattleAnimMove_MirrorMove[]; +extern const u8 gBattleAnimMove_SelfDestruct[]; +extern const u8 gBattleAnimMove_EggBomb[]; +extern const u8 gBattleAnimMove_Lick[]; +extern const u8 gBattleAnimMove_Smog[]; +extern const u8 gBattleAnimMove_Sludge[]; +extern const u8 gBattleAnimMove_BoneClub[]; +extern const u8 gBattleAnimMove_FireBlast[]; +extern const u8 gBattleAnimMove_Waterfall[]; +extern const u8 gBattleAnimMove_Clamp[]; +extern const u8 gBattleAnimMove_Swift[]; +extern const u8 gBattleAnimMove_SkullBash[]; +extern const u8 gBattleAnimMove_SpikeCannon[]; +extern const u8 gBattleAnimMove_Constrict[]; +extern const u8 gBattleAnimMove_Amnesia[]; +extern const u8 gBattleAnimMove_Kinesis[]; +extern const u8 gBattleAnimMove_SoftBoiled[]; +extern const u8 gBattleAnimMove_HighJumpKick[]; +extern const u8 gBattleAnimMove_Glare[]; +extern const u8 gBattleAnimMove_DreamEater[]; +extern const u8 gBattleAnimMove_PoisonGas[]; +extern const u8 gBattleAnimMove_Barrage[]; +extern const u8 gBattleAnimMove_LeechLife[]; +extern const u8 gBattleAnimMove_LovelyKiss[]; +extern const u8 gBattleAnimMove_SkyAttack[]; +extern const u8 gBattleAnimMove_Transform[]; +extern const u8 gBattleAnimMove_Bubble[]; +extern const u8 gBattleAnimMove_DizzyPunch[]; +extern const u8 gBattleAnimMove_Spore[]; +extern const u8 gBattleAnimMove_Flash[]; +extern const u8 gBattleAnimMove_Psywave[]; +extern const u8 gBattleAnimMove_Splash[]; +extern const u8 gBattleAnimMove_AcidArmor[]; +extern const u8 gBattleAnimMove_Crabhammer[]; +extern const u8 gBattleAnimMove_Explosion[]; +extern const u8 gBattleAnimMove_FurySwipes[]; +extern const u8 gBattleAnimMove_Bonemerang[]; +extern const u8 gBattleAnimMove_Rest[]; +extern const u8 gBattleAnimMove_RockSlide[]; +extern const u8 gBattleAnimMove_HyperFang[]; +extern const u8 gBattleAnimMove_Sharpen[]; +extern const u8 gBattleAnimMove_Conversion[]; +extern const u8 gBattleAnimMove_TriAttack[]; +extern const u8 gBattleAnimMove_SuperFang[]; +extern const u8 gBattleAnimMove_Slash[]; +extern const u8 gBattleAnimMove_Substitute[]; +extern const u8 gBattleAnimMove_Struggle[]; +extern const u8 gBattleAnimMove_Sketch[]; +extern const u8 gBattleAnimMove_TripleKick[]; +extern const u8 gBattleAnimMove_Thief[]; +extern const u8 gBattleAnimMove_SpiderWeb[]; +extern const u8 gBattleAnimMove_MindReader[]; +extern const u8 gBattleAnimMove_Nightmare[]; +extern const u8 gBattleAnimMove_FlameWheel[]; +extern const u8 gBattleAnimMove_Snore[]; +extern const u8 gBattleAnimMove_Curse[]; +extern const u8 gBattleAnimMove_Flail[]; +extern const u8 gBattleAnimMove_Conversion2[]; +extern const u8 gBattleAnimMove_Aeroblast[]; +extern const u8 gBattleAnimMove_CottonSpore[]; +extern const u8 gBattleAnimMove_Reversal[]; +extern const u8 gBattleAnimMove_Spite[]; +extern const u8 gBattleAnimMove_PowderSnow[]; +extern const u8 gBattleAnimMove_Protect[]; +extern const u8 gBattleAnimMove_MachPunch[]; +extern const u8 gBattleAnimMove_ScaryFace[]; +extern const u8 gBattleAnimMove_FeintAttack[]; +extern const u8 gBattleAnimMove_SweetKiss[]; +extern const u8 gBattleAnimMove_BellyDrum[]; +extern const u8 gBattleAnimMove_SludgeBomb[]; +extern const u8 gBattleAnimMove_MudSlap[]; +extern const u8 gBattleAnimMove_Octazooka[]; +extern const u8 gBattleAnimMove_Spikes[]; +extern const u8 gBattleAnimMove_ZapCannon[]; +extern const u8 gBattleAnimMove_Foresight[]; +extern const u8 gBattleAnimMove_DestinyBond[]; +extern const u8 gBattleAnimMove_PerishSong[]; +extern const u8 gBattleAnimMove_IcyWind[]; +extern const u8 gBattleAnimMove_Detect[]; +extern const u8 gBattleAnimMove_BoneRush[]; +extern const u8 gBattleAnimMove_LockOn[]; +extern const u8 gBattleAnimMove_Outrage[]; +extern const u8 gBattleAnimMove_Sandstorm[]; +extern const u8 gBattleAnimMove_GigaDrain[]; +extern const u8 gBattleAnimMove_Endure[]; +extern const u8 gBattleAnimMove_Charm[]; +extern const u8 gBattleAnimMove_Rollout[]; +extern const u8 gBattleAnimMove_FalseSwipe[]; +extern const u8 gBattleAnimMove_Swagger[]; +extern const u8 gBattleAnimMove_MilkDrink[]; +extern const u8 gBattleAnimMove_Spark[]; +extern const u8 gBattleAnimMove_FuryCutter[]; +extern const u8 gBattleAnimMove_SteelWing[]; +extern const u8 gBattleAnimMove_MeanLook[]; +extern const u8 gBattleAnimMove_Attract[]; +extern const u8 gBattleAnimMove_SleepTalk[]; +extern const u8 gBattleAnimMove_HealBell[]; +extern const u8 gBattleAnimMove_Return[]; +extern const u8 gBattleAnimMove_Present[]; +extern const u8 gBattleAnimMove_Frustration[]; +extern const u8 gBattleAnimMove_Safeguard[]; +extern const u8 gBattleAnimMove_PainSplit[]; +extern const u8 gBattleAnimMove_SacredFire[]; +extern const u8 gBattleAnimMove_Magnitude[]; +extern const u8 gBattleAnimMove_DynamicPunch[]; +extern const u8 gBattleAnimMove_Megahorn[]; +extern const u8 gBattleAnimMove_DragonBreath[]; +extern const u8 gBattleAnimMove_BatonPass[]; +extern const u8 gBattleAnimMove_Encore[]; +extern const u8 gBattleAnimMove_Pursuit[]; +extern const u8 gBattleAnimMove_RapidSpin[]; +extern const u8 gBattleAnimMove_SweetScent[]; +extern const u8 gBattleAnimMove_IronTail[]; +extern const u8 gBattleAnimMove_MetalClaw[]; +extern const u8 gBattleAnimMove_VitalThrow[]; +extern const u8 gBattleAnimMove_MorningSun[]; +extern const u8 gBattleAnimMove_Synthesis[]; +extern const u8 gBattleAnimMove_Moonlight[]; +extern const u8 gBattleAnimMove_HiddenPower[]; +extern const u8 gBattleAnimMove_CrossChop[]; +extern const u8 gBattleAnimMove_Twister[]; +extern const u8 gBattleAnimMove_RainDance[]; +extern const u8 gBattleAnimMove_SunnyDay[]; +extern const u8 gBattleAnimMove_Crunch[]; +extern const u8 gBattleAnimMove_MirrorCoat[]; +extern const u8 gBattleAnimMove_PsychUp[]; +extern const u8 gBattleAnimMove_ExtremeSpeed[]; +extern const u8 gBattleAnimMove_AncientPower[]; +extern const u8 gBattleAnimMove_ShadowBall[]; +extern const u8 gBattleAnimMove_FutureSight[]; +extern const u8 gBattleAnimMove_RockSmash[]; +extern const u8 gBattleAnimMove_Whirlpool[]; +extern const u8 gBattleAnimMove_BeatUp[]; +extern const u8 gBattleAnimMove_FakeOut[]; +extern const u8 gBattleAnimMove_Uproar[]; +extern const u8 gBattleAnimMove_Stockpile[]; +extern const u8 gBattleAnimMove_SpitUp[]; +extern const u8 gBattleAnimMove_Swallow[]; +extern const u8 gBattleAnimMove_HeatWave[]; +extern const u8 gBattleAnimMove_Hail[]; +extern const u8 gBattleAnimMove_Torment[]; +extern const u8 gBattleAnimMove_Flatter[]; +extern const u8 gBattleAnimMove_WillOWisp[]; +extern const u8 gBattleAnimMove_Memento[]; +extern const u8 gBattleAnimMove_Facade[]; +extern const u8 gBattleAnimMove_FocusPunch[]; +extern const u8 gBattleAnimMove_SmellingSalts[]; +extern const u8 gBattleAnimMove_FollowMe[]; +extern const u8 gBattleAnimMove_NaturePower[]; +extern const u8 gBattleAnimMove_Charge[]; +extern const u8 gBattleAnimMove_Taunt[]; +extern const u8 gBattleAnimMove_HelpingHand[]; +extern const u8 gBattleAnimMove_Trick[]; +extern const u8 gBattleAnimMove_RolePlay[]; +extern const u8 gBattleAnimMove_Wish[]; +extern const u8 gBattleAnimMove_Assist[]; +extern const u8 gBattleAnimMove_Ingrain[]; +extern const u8 gBattleAnimMove_Superpower[]; +extern const u8 gBattleAnimMove_MagicCoat[]; +extern const u8 gBattleAnimMove_Recycle[]; +extern const u8 gBattleAnimMove_Revenge[]; +extern const u8 gBattleAnimMove_BrickBreak[]; +extern const u8 gBattleAnimMove_Yawn[]; +extern const u8 gBattleAnimMove_KnockOff[]; +extern const u8 gBattleAnimMove_Endeavor[]; +extern const u8 gBattleAnimMove_Eruption[]; +extern const u8 gBattleAnimMove_SkillSwap[]; +extern const u8 gBattleAnimMove_Imprison[]; +extern const u8 gBattleAnimMove_Refresh[]; +extern const u8 gBattleAnimMove_Grudge[]; +extern const u8 gBattleAnimMove_Snatch[]; +extern const u8 gBattleAnimMove_SecretPower[]; +extern const u8 gBattleAnimMove_Dive[]; +extern const u8 gBattleAnimMove_ArmThrust[]; +extern const u8 gBattleAnimMove_Camouflage[]; +extern const u8 gBattleAnimMove_TailGlow[]; +extern const u8 gBattleAnimMove_LusterPurge[]; +extern const u8 gBattleAnimMove_MistBall[]; +extern const u8 gBattleAnimMove_FeatherDance[]; +extern const u8 gBattleAnimMove_TeeterDance[]; +extern const u8 gBattleAnimMove_BlazeKick[]; +extern const u8 gBattleAnimMove_MudSport[]; +extern const u8 gBattleAnimMove_IceBall[]; +extern const u8 gBattleAnimMove_NeedleArm[]; +extern const u8 gBattleAnimMove_SlackOff[]; +extern const u8 gBattleAnimMove_HyperVoice[]; +extern const u8 gBattleAnimMove_PoisonFang[]; +extern const u8 gBattleAnimMove_CrushClaw[]; +extern const u8 gBattleAnimMove_BlastBurn[]; +extern const u8 gBattleAnimMove_HydroCannon[]; +extern const u8 gBattleAnimMove_MeteorMash[]; +extern const u8 gBattleAnimMove_Astonish[]; +extern const u8 gBattleAnimMove_WeatherBall[]; +extern const u8 gBattleAnimMove_Aromatherapy[]; +extern const u8 gBattleAnimMove_FakeTears[]; +extern const u8 gBattleAnimMove_AirCutter[]; +extern const u8 gBattleAnimMove_Overheat[]; +extern const u8 gBattleAnimMove_OdorSleuth[]; +extern const u8 gBattleAnimMove_RockTomb[]; +extern const u8 gBattleAnimMove_SilverWind[]; +extern const u8 gBattleAnimMove_MetalSound[]; +extern const u8 gBattleAnimMove_GrassWhistle[]; +extern const u8 gBattleAnimMove_Tickle[]; +extern const u8 gBattleAnimMove_CosmicPower[]; +extern const u8 gBattleAnimMove_WaterSpout[]; +extern const u8 gBattleAnimMove_SignalBeam[]; +extern const u8 gBattleAnimMove_ShadowPunch[]; +extern const u8 gBattleAnimMove_Extrasensory[]; +extern const u8 gBattleAnimMove_SkyUppercut[]; +extern const u8 gBattleAnimMove_SandTomb[]; +extern const u8 gBattleAnimMove_SheerCold[]; +extern const u8 gBattleAnimMove_MuddyWater[]; +extern const u8 gBattleAnimMove_BulletSeed[]; +extern const u8 gBattleAnimMove_AerialAce[]; +extern const u8 gBattleAnimMove_IcicleSpear[]; +extern const u8 gBattleAnimMove_IronDefense[]; +extern const u8 gBattleAnimMove_Block[]; +extern const u8 gBattleAnimMove_Howl[]; +extern const u8 gBattleAnimMove_DragonClaw[]; +extern const u8 gBattleAnimMove_FrenzyPlant[]; +extern const u8 gBattleAnimMove_BulkUp[]; +extern const u8 gBattleAnimMove_Bounce[]; +extern const u8 gBattleAnimMove_MudShot[]; +extern const u8 gBattleAnimMove_PoisonTail[]; +extern const u8 gBattleAnimMove_Covet[]; +extern const u8 gBattleAnimMove_VoltTackle[]; +extern const u8 gBattleAnimMove_MagicalLeaf[]; +extern const u8 gBattleAnimMove_WaterSport[]; +extern const u8 gBattleAnimMove_CalmMind[]; +extern const u8 gBattleAnimMove_LeafBlade[]; +extern const u8 gBattleAnimMove_DragonDance[]; +extern const u8 gBattleAnimMove_RockBlast[]; +extern const u8 gBattleAnimMove_ShockWave[]; +extern const u8 gBattleAnimMove_WaterPulse[]; +extern const u8 gBattleAnimMove_DoomDesire[]; +extern const u8 gBattleAnimMove_PsychoBoost[]; +extern const u8 gBattleAnimMove_Roost[]; +extern const u8 gBattleAnimMove_Gravity[]; +extern const u8 gBattleAnimMove_MiracleEye[]; +extern const u8 gBattleAnimMove_WakeUpSlap[]; +extern const u8 gBattleAnimMove_HammerArm[]; +extern const u8 gBattleAnimMove_GyroBall[]; +extern const u8 gBattleAnimMove_HealingWish[]; +extern const u8 gBattleAnimMove_Brine[]; +extern const u8 gBattleAnimMove_NaturalGift[]; +extern const u8 gBattleAnimMove_Feint[]; +extern const u8 gBattleAnimMove_Pluck[]; +extern const u8 gBattleAnimMove_Tailwind[]; +extern const u8 gBattleAnimMove_Acupressure[]; +extern const u8 gBattleAnimMove_MetalBurst[]; +extern const u8 gBattleAnimMove_UTurn[]; +extern const u8 gBattleAnimMove_CloseCombat[]; +extern const u8 gBattleAnimMove_Payback[]; +extern const u8 gBattleAnimMove_Assurance[]; +extern const u8 gBattleAnimMove_Embargo[]; +extern const u8 gBattleAnimMove_Fling[]; +extern const u8 gBattleAnimMove_PsychoShift[]; +extern const u8 gBattleAnimMove_TrumpCard[]; +extern const u8 gBattleAnimMove_HealBlock[]; +extern const u8 gBattleAnimMove_WringOut[]; +extern const u8 gBattleAnimMove_PowerTrick[]; +extern const u8 gBattleAnimMove_GastroAcid[]; +extern const u8 gBattleAnimMove_LuckyChant[]; +extern const u8 gBattleAnimMove_MeFirst[]; +extern const u8 gBattleAnimMove_Copycat[]; +extern const u8 gBattleAnimMove_PowerSwap[]; +extern const u8 gBattleAnimMove_GuardSwap[]; +extern const u8 gBattleAnimMove_Punishment[]; +extern const u8 gBattleAnimMove_LastResort[]; +extern const u8 gBattleAnimMove_WorrySeed[]; +extern const u8 gBattleAnimMove_SuckerPunch[]; +extern const u8 gBattleAnimMove_ToxicSpikes[]; +extern const u8 gBattleAnimMove_HeartSwap[]; +extern const u8 gBattleAnimMove_AquaRing[]; +extern const u8 gBattleAnimMove_MagnetRise[]; +extern const u8 gBattleAnimMove_FlareBlitz[]; +extern const u8 gBattleAnimMove_ForcePalm[]; +extern const u8 gBattleAnimMove_AuraSphere[]; +extern const u8 gBattleAnimMove_RockPolish[]; +extern const u8 gBattleAnimMove_PoisonJab[]; +extern const u8 gBattleAnimMove_DarkPulse[]; +extern const u8 gBattleAnimMove_NightSlash[]; +extern const u8 gBattleAnimMove_AquaTail[]; +extern const u8 gBattleAnimMove_SeedBomb[]; +extern const u8 gBattleAnimMove_AirSlash[]; +extern const u8 gBattleAnimMove_XScissor[]; +extern const u8 gBattleAnimMove_BugBuzz[]; +extern const u8 gBattleAnimMove_DragonPulse[]; +extern const u8 gBattleAnimMove_DragonRush[]; +extern const u8 gBattleAnimMove_PowerGem[]; +extern const u8 gBattleAnimMove_DrainPunch[]; +extern const u8 gBattleAnimMove_VacuumWave[]; +extern const u8 gBattleAnimMove_FocusBlast[]; +extern const u8 gBattleAnimMove_EnergyBall[]; +extern const u8 gBattleAnimMove_BraveBird[]; +extern const u8 gBattleAnimMove_EarthPower[]; +extern const u8 gBattleAnimMove_Switcheroo[]; +extern const u8 gBattleAnimMove_GigaImpact[]; +extern const u8 gBattleAnimMove_NastyPlot[]; +extern const u8 gBattleAnimMove_BulletPunch[]; +extern const u8 gBattleAnimMove_Avalanche[]; +extern const u8 gBattleAnimMove_IceShard[]; +extern const u8 gBattleAnimMove_ShadowClaw[]; +extern const u8 gBattleAnimMove_ThunderFang[]; +extern const u8 gBattleAnimMove_IceFang[]; +extern const u8 gBattleAnimMove_FireFang[]; +extern const u8 gBattleAnimMove_ShadowSneak[]; +extern const u8 gBattleAnimMove_MudBomb[]; +extern const u8 gBattleAnimMove_PsychoCut[]; +extern const u8 gBattleAnimMove_ZenHeadbutt[]; +extern const u8 gBattleAnimMove_MirrorShot[]; +extern const u8 gBattleAnimMove_FlashCannon[]; +extern const u8 gBattleAnimMove_RockClimb[]; +extern const u8 gBattleAnimMove_Defog[]; +extern const u8 gBattleAnimMove_TrickRoom[]; +extern const u8 gBattleAnimMove_DracoMeteor[]; +extern const u8 gBattleAnimMove_Discharge[]; +extern const u8 gBattleAnimMove_LavaPlume[]; +extern const u8 gBattleAnimMove_LeafStorm[]; +extern const u8 gBattleAnimMove_PowerWhip[]; +extern const u8 gBattleAnimMove_RockWrecker[]; +extern const u8 gBattleAnimMove_CrossPoison[]; +extern const u8 gBattleAnimMove_GunkShot[]; +extern const u8 gBattleAnimMove_IronHead[]; +extern const u8 gBattleAnimMove_MagnetBomb[]; +extern const u8 gBattleAnimMove_StoneEdge[]; +extern const u8 gBattleAnimMove_Captivate[]; +extern const u8 gBattleAnimMove_StealthRock[]; +extern const u8 gBattleAnimMove_GrassKnot[]; +extern const u8 gBattleAnimMove_Chatter[]; +extern const u8 gBattleAnimMove_Judgment[]; +extern const u8 gBattleAnimMove_BugBite[]; +extern const u8 gBattleAnimMove_ChargeBeam[]; +extern const u8 gBattleAnimMove_WoodHammer[]; +extern const u8 gBattleAnimMove_AquaJet[]; +extern const u8 gBattleAnimMove_AttackOrder[]; +extern const u8 gBattleAnimMove_DefendOrder[]; +extern const u8 gBattleAnimMove_HealOrder[]; +extern const u8 gBattleAnimMove_HeadSmash[]; +extern const u8 gBattleAnimMove_DoubleHit[]; +extern const u8 gBattleAnimMove_RoarOfTime[]; +extern const u8 gBattleAnimMove_SpacialRend[]; +extern const u8 gBattleAnimMove_LunarDance[]; +extern const u8 gBattleAnimMove_CrushGrip[]; +extern const u8 gBattleAnimMove_MagmaStorm[]; +extern const u8 gBattleAnimMove_DarkVoid[]; +extern const u8 gBattleAnimMove_SeedFlare[]; +extern const u8 gBattleAnimMove_OminousWind[]; +extern const u8 gBattleAnimMove_ShadowForce[]; +extern const u8 gBattleAnimMove_HoneClaws[]; +extern const u8 gBattleAnimMove_WideGuard[]; +extern const u8 gBattleAnimMove_GuardSplit[]; +extern const u8 gBattleAnimMove_PowerSplit[]; +extern const u8 gBattleAnimMove_WonderRoom[]; +extern const u8 gBattleAnimMove_Psyshock[]; +extern const u8 gBattleAnimMove_Venoshock[]; +extern const u8 gBattleAnimMove_Autotomize[]; +extern const u8 gBattleAnimMove_RagePowder[]; +extern const u8 gBattleAnimMove_Telekinesis[]; +extern const u8 gBattleAnimMove_MagicRoom[]; +extern const u8 gBattleAnimMove_SmackDown[]; +extern const u8 gBattleAnimMove_StormThrow[]; +extern const u8 gBattleAnimMove_FlameBurst[]; +extern const u8 gBattleAnimMove_SludgeWave[]; +extern const u8 gBattleAnimMove_QuiverDance[]; +extern const u8 gBattleAnimMove_HeavySlam[]; +extern const u8 gBattleAnimMove_Synchronoise[]; +extern const u8 gBattleAnimMove_ElectroBall[]; +extern const u8 gBattleAnimMove_Soak[]; +extern const u8 gBattleAnimMove_FlameCharge[]; +extern const u8 gBattleAnimMove_Coil[]; +extern const u8 gBattleAnimMove_LowSweep[]; +extern const u8 gBattleAnimMove_AcidSpray[]; +extern const u8 gBattleAnimMove_FoulPlay[]; +extern const u8 gBattleAnimMove_SimpleBeam[]; +extern const u8 gBattleAnimMove_Entrainment[]; +extern const u8 gBattleAnimMove_AfterYou[]; +extern const u8 gBattleAnimMove_Round[]; +extern const u8 gBattleAnimMove_EchoedVoice[]; +extern const u8 gBattleAnimMove_ChipAway[]; +extern const u8 gBattleAnimMove_ClearSmog[]; +extern const u8 gBattleAnimMove_StoredPower[]; +extern const u8 gBattleAnimMove_QuickGuard[]; +extern const u8 gBattleAnimMove_AllySwitch[]; +extern const u8 gBattleAnimMove_Scald[]; +extern const u8 gBattleAnimMove_ShellSmash[]; +extern const u8 gBattleAnimMove_HealPulse[]; +extern const u8 gBattleAnimMove_Hex[]; +extern const u8 gBattleAnimMove_SkyDrop[]; +extern const u8 gBattleAnimMove_ShiftGear[]; +extern const u8 gBattleAnimMove_CircleThrow[]; +extern const u8 gBattleAnimMove_Incinerate[]; +extern const u8 gBattleAnimMove_Quash[]; +extern const u8 gBattleAnimMove_Acrobatics[]; +extern const u8 gBattleAnimMove_ReflectType[]; +extern const u8 gBattleAnimMove_Retaliate[]; +extern const u8 gBattleAnimMove_FinalGambit[]; +extern const u8 gBattleAnimMove_Bestow[]; +extern const u8 gBattleAnimMove_Inferno[]; +extern const u8 gBattleAnimMove_WaterPledge[]; +extern const u8 gBattleAnimMove_FirePledge[]; +extern const u8 gBattleAnimMove_GrassPledge[]; +extern const u8 gBattleAnimMove_VoltSwitch[]; +extern const u8 gBattleAnimMove_StruggleBug[]; +extern const u8 gBattleAnimMove_Bulldoze[]; +extern const u8 gBattleAnimMove_FrostBreath[]; +extern const u8 gBattleAnimMove_DragonTail[]; +extern const u8 gBattleAnimMove_WorkUp[]; +extern const u8 gBattleAnimMove_Electroweb[]; +extern const u8 gBattleAnimMove_WildCharge[]; +extern const u8 gBattleAnimMove_DrillRun[]; +extern const u8 gBattleAnimMove_DualChop[]; +extern const u8 gBattleAnimMove_HeartStamp[]; +extern const u8 gBattleAnimMove_HornLeech[]; +extern const u8 gBattleAnimMove_SacredSword[]; +extern const u8 gBattleAnimMove_RazorShell[]; +extern const u8 gBattleAnimMove_HeatCrash[]; +extern const u8 gBattleAnimMove_LeafTornado[]; +extern const u8 gBattleAnimMove_Steamroller[]; +extern const u8 gBattleAnimMove_CottonGuard[]; +extern const u8 gBattleAnimMove_NightDaze[]; +extern const u8 gBattleAnimMove_Psystrike[]; +extern const u8 gBattleAnimMove_TailSlap[]; +extern const u8 gBattleAnimMove_Hurricane[]; +extern const u8 gBattleAnimMove_HeadCharge[]; +extern const u8 gBattleAnimMove_GearGrind[]; +extern const u8 gBattleAnimMove_SearingShot[]; +extern const u8 gBattleAnimMove_TechnoBlast[]; +extern const u8 gBattleAnimMove_RelicSong[]; +extern const u8 gBattleAnimMove_SecretSword[]; +extern const u8 gBattleAnimMove_Glaciate[]; +extern const u8 gBattleAnimMove_BoltStrike[]; +extern const u8 gBattleAnimMove_BlueFlare[]; +extern const u8 gBattleAnimMove_FieryDance[]; +extern const u8 gBattleAnimMove_FreezeShock[]; +extern const u8 gBattleAnimMove_IceBurn[]; +extern const u8 gBattleAnimMove_Snarl[]; +extern const u8 gBattleAnimMove_IcicleCrash[]; +extern const u8 gBattleAnimMove_VCreate[]; +extern const u8 gBattleAnimMove_FusionFlare[]; +extern const u8 gBattleAnimMove_FusionBolt[]; +extern const u8 gBattleAnimMove_FlyingPress[]; +extern const u8 gBattleAnimMove_MatBlock[]; +extern const u8 gBattleAnimMove_Belch[]; +extern const u8 gBattleAnimMove_Rototiller[]; +extern const u8 gBattleAnimMove_StickyWeb[]; +extern const u8 gBattleAnimMove_FellStinger[]; +extern const u8 gBattleAnimMove_PhantomForce[]; +extern const u8 gBattleAnimMove_TrickOrTreat[]; +extern const u8 gBattleAnimMove_NobleRoar[]; +extern const u8 gBattleAnimMove_IonDeluge[]; +extern const u8 gBattleAnimMove_ParabolicCharge[]; +extern const u8 gBattleAnimMove_ForestsCurse[]; +extern const u8 gBattleAnimMove_PetalBlizzard[]; +extern const u8 gBattleAnimMove_FreezeDry[]; +extern const u8 gBattleAnimMove_DisarmingVoice[]; +extern const u8 gBattleAnimMove_PartingShot[]; +extern const u8 gBattleAnimMove_TopsyTurvy[]; +extern const u8 gBattleAnimMove_DrainingKiss[]; +extern const u8 gBattleAnimMove_CraftyShield[]; +extern const u8 gBattleAnimMove_FlowerShield[]; +extern const u8 gBattleAnimMove_GrassyTerrain[]; +extern const u8 gBattleAnimMove_MistyTerrain[]; +extern const u8 gBattleAnimMove_Electrify[]; +extern const u8 gBattleAnimMove_PlayRough[]; +extern const u8 gBattleAnimMove_FairyWind[]; +extern const u8 gBattleAnimMove_Moonblast[]; +extern const u8 gBattleAnimMove_Boomburst[]; +extern const u8 gBattleAnimMove_FairyLock[]; +extern const u8 gBattleAnimMove_KingsShield[]; +extern const u8 gBattleAnimMove_PlayNice[]; +extern const u8 gBattleAnimMove_Confide[]; +extern const u8 gBattleAnimMove_DiamondStorm[]; +extern const u8 gBattleAnimMove_SteamEruption[]; +extern const u8 gBattleAnimMove_HyperspaceHole[]; +extern const u8 gBattleAnimMove_WaterShuriken[]; +extern const u8 gBattleAnimMove_MysticalFire[]; +extern const u8 gBattleAnimMove_SpikyShield[]; +extern const u8 gBattleAnimMove_AromaticMist[]; +extern const u8 gBattleAnimMove_EerieImpulse[]; +extern const u8 gBattleAnimMove_VenomDrench[]; +extern const u8 gBattleAnimMove_Powder[]; +extern const u8 gBattleAnimMove_Geomancy[]; +extern const u8 gBattleAnimMove_MagneticFlux[]; +extern const u8 gBattleAnimMove_HappyHour[]; +extern const u8 gBattleAnimMove_ElectricTerrain[]; +extern const u8 gBattleAnimMove_DazzlingGleam[]; +extern const u8 gBattleAnimMove_Celebrate[]; +extern const u8 gBattleAnimMove_HoldHands[]; +extern const u8 gBattleAnimMove_BabyDollEyes[]; +extern const u8 gBattleAnimMove_Nuzzle[]; +extern const u8 gBattleAnimMove_HoldBack[]; +extern const u8 gBattleAnimMove_Infestation[]; +extern const u8 gBattleAnimMove_PowerUpPunch[]; +extern const u8 gBattleAnimMove_OblivionWing[]; +extern const u8 gBattleAnimMove_ThousandArrows[]; +extern const u8 gBattleAnimMove_ThousandWaves[]; +extern const u8 gBattleAnimMove_LandsWrath[]; +extern const u8 gBattleAnimMove_LightOfRuin[]; +extern const u8 gBattleAnimMove_OriginPulse[]; +extern const u8 gBattleAnimMove_PrecipiceBlades[]; +extern const u8 gBattleAnimMove_DragonAscent[]; +extern const u8 gBattleAnimMove_HyperspaceFury[]; +extern const u8 gBattleAnimMove_ShoreUp[]; +extern const u8 gBattleAnimMove_FirstImpression[]; +extern const u8 gBattleAnimMove_BanefulBunker[]; +extern const u8 gBattleAnimMove_SpiritShackle[]; +extern const u8 gBattleAnimMove_DarkestLariat[]; +extern const u8 gBattleAnimMove_SparklingAria[]; +extern const u8 gBattleAnimMove_IceHammer[]; +extern const u8 gBattleAnimMove_FloralHealing[]; +extern const u8 gBattleAnimMove_HighHorsepower[]; +extern const u8 gBattleAnimMove_StrengthSap[]; +extern const u8 gBattleAnimMove_SolarBlade[]; +extern const u8 gBattleAnimMove_Leafage[]; +extern const u8 gBattleAnimMove_Spotlight[]; +extern const u8 gBattleAnimMove_ToxicThread[]; +extern const u8 gBattleAnimMove_LaserFocus[]; +extern const u8 gBattleAnimMove_GearUp[]; +extern const u8 gBattleAnimMove_ThroatChop[]; +extern const u8 gBattleAnimMove_PollenPuff[]; +extern const u8 gBattleAnimMove_AnchorShot[]; +extern const u8 gBattleAnimMove_PsychicTerrain[]; +extern const u8 gBattleAnimMove_Lunge[]; +extern const u8 gBattleAnimMove_FireLash[]; +extern const u8 gBattleAnimMove_PowerTrip[]; +extern const u8 gBattleAnimMove_BurnUp[]; +extern const u8 gBattleAnimMove_SpeedSwap[]; +extern const u8 gBattleAnimMove_SmartStrike[]; +extern const u8 gBattleAnimMove_Purify[]; +extern const u8 gBattleAnimMove_RevelationDance[]; +extern const u8 gBattleAnimMove_CoreEnforcer[]; +extern const u8 gBattleAnimMove_TropKick[]; +extern const u8 gBattleAnimMove_Instruct[]; +extern const u8 gBattleAnimMove_BeakBlast[]; +extern const u8 gBattleAnimMove_ClangingScales[]; +extern const u8 gBattleAnimMove_DragonHammer[]; +extern const u8 gBattleAnimMove_BrutalSwing[]; +extern const u8 gBattleAnimMove_AuroraVeil[]; +extern const u8 gBattleAnimMove_ShellTrap[]; +extern const u8 gBattleAnimMove_FleurCannon[]; +extern const u8 gBattleAnimMove_PsychicFangs[]; +extern const u8 gBattleAnimMove_StompingTantrum[]; +extern const u8 gBattleAnimMove_ShadowBone[]; +extern const u8 gBattleAnimMove_Accelerock[]; +extern const u8 gBattleAnimMove_Liquidation[]; +extern const u8 gBattleAnimMove_PrismaticLaser[]; +extern const u8 gBattleAnimMove_SpectralThief[]; +extern const u8 gBattleAnimMove_SunsteelStrike[]; +extern const u8 gBattleAnimMove_MoongeistBeam[]; +extern const u8 gBattleAnimMove_TearfulLook[]; +extern const u8 gBattleAnimMove_ZingZap[]; +extern const u8 gBattleAnimMove_NaturesMadness[]; +extern const u8 gBattleAnimMove_MultiAttack[]; +extern const u8 gBattleAnimMove_MindBlown[]; +extern const u8 gBattleAnimMove_PlasmaFists[]; +extern const u8 gBattleAnimMove_PhotonGeyser[]; +extern const u8 gBattleAnimMove_ZippyZap[]; +extern const u8 gBattleAnimMove_SplishySplash[]; +extern const u8 gBattleAnimMove_FloatyFall[]; +extern const u8 gBattleAnimMove_PikaPapow[]; +extern const u8 gBattleAnimMove_BouncyBubble[]; +extern const u8 gBattleAnimMove_BuzzyBuzz[]; +extern const u8 gBattleAnimMove_SizzlySlide[]; +extern const u8 gBattleAnimMove_GlitzyGlow[]; +extern const u8 gBattleAnimMove_BaddyBad[]; +extern const u8 gBattleAnimMove_SappySeed[]; +extern const u8 gBattleAnimMove_FreezyFrost[]; +extern const u8 gBattleAnimMove_SparklySwirl[]; +extern const u8 gBattleAnimMove_VeeveeVolley[]; +extern const u8 gBattleAnimMove_DoubleIronBash[]; +extern const u8 gBattleAnimMove_DynamaxCannon[]; +extern const u8 gBattleAnimMove_SnipeShot[]; +extern const u8 gBattleAnimMove_JawLock[]; +extern const u8 gBattleAnimMove_StuffCheeks[]; +extern const u8 gBattleAnimMove_NoRetreat[]; +extern const u8 gBattleAnimMove_TarShot[]; +extern const u8 gBattleAnimMove_MagicPowder[]; +extern const u8 gBattleAnimMove_DragonDarts[]; +extern const u8 gBattleAnimMove_Teatime[]; +extern const u8 gBattleAnimMove_Octolock[]; +extern const u8 gBattleAnimMove_BoltBeak[]; +extern const u8 gBattleAnimMove_FishiousRend[]; +extern const u8 gBattleAnimMove_CourtChange[]; +extern const u8 gBattleAnimMove_ClangorousSoul[]; +extern const u8 gBattleAnimMove_BodyPress[]; +extern const u8 gBattleAnimMove_Decorate[]; +extern const u8 gBattleAnimMove_DrumBeating[]; +extern const u8 gBattleAnimMove_SnapTrap[]; +extern const u8 gBattleAnimMove_PyroBall[]; +extern const u8 gBattleAnimMove_BehemothBlade[]; +extern const u8 gBattleAnimMove_BehemothBash[]; +extern const u8 gBattleAnimMove_AuraWheel[]; +extern const u8 gBattleAnimMove_BreakingSwipe[]; +extern const u8 gBattleAnimMove_BranchPoke[]; +extern const u8 gBattleAnimMove_Overdrive[]; +extern const u8 gBattleAnimMove_AppleAcid[]; +extern const u8 gBattleAnimMove_GravApple[]; +extern const u8 gBattleAnimMove_SpiritBreak[]; +extern const u8 gBattleAnimMove_StrangeSteam[]; +extern const u8 gBattleAnimMove_LifeDew[]; +extern const u8 gBattleAnimMove_Obstruct[]; +extern const u8 gBattleAnimMove_FalseSurrender[]; +extern const u8 gBattleAnimMove_MeteorAssault[]; +extern const u8 gBattleAnimMove_Eternabeam[]; +extern const u8 gBattleAnimMove_SteelBeam[]; +extern const u8 gBattleAnimMove_ExpandingForce[]; +extern const u8 gBattleAnimMove_SteelRoller[]; +extern const u8 gBattleAnimMove_ScaleShot[]; +extern const u8 gBattleAnimMove_MeteorBeam[]; +extern const u8 gBattleAnimMove_ShellSideArm[]; +extern const u8 gBattleAnimMove_MistyExplosion[]; +extern const u8 gBattleAnimMove_GrassyGlide[]; +extern const u8 gBattleAnimMove_RisingVoltage[]; +extern const u8 gBattleAnimMove_TerrainPulse[]; +extern const u8 gBattleAnimMove_SkitterSmack[]; +extern const u8 gBattleAnimMove_BurningJealousy[]; +extern const u8 gBattleAnimMove_LashOut[]; +extern const u8 gBattleAnimMove_Poltergeist[]; +extern const u8 gBattleAnimMove_CorrosiveGas[]; +extern const u8 gBattleAnimMove_Coaching[]; +extern const u8 gBattleAnimMove_FlipTurn[]; +extern const u8 gBattleAnimMove_TripleAxel[]; +extern const u8 gBattleAnimMove_DualWingbeat[]; +extern const u8 gBattleAnimMove_ScorchingSands[]; +extern const u8 gBattleAnimMove_JungleHealing[]; +extern const u8 gBattleAnimMove_WickedBlow[]; +extern const u8 gBattleAnimMove_SurgingStrikes[]; +extern const u8 gBattleAnimMove_ThunderCage[]; +extern const u8 gBattleAnimMove_DragonEnergy[]; +extern const u8 gBattleAnimMove_FreezingGlare[]; +extern const u8 gBattleAnimMove_FieryWrath[]; +extern const u8 gBattleAnimMove_ThunderousKick[]; +extern const u8 gBattleAnimMove_GlacialLance[]; +extern const u8 gBattleAnimMove_AstralBarrage[]; +extern const u8 gBattleAnimMove_EerieSpell[]; +extern const u8 gBattleAnimMove_DireClaw[]; +extern const u8 gBattleAnimMove_PsyshieldBash[]; +extern const u8 gBattleAnimMove_PowerShift[]; +extern const u8 gBattleAnimMove_StoneAxe[]; +extern const u8 gBattleAnimMove_SpringtideStorm[]; +extern const u8 gBattleAnimMove_MysticalPower[]; +extern const u8 gBattleAnimMove_RagingFury[]; +extern const u8 gBattleAnimMove_WaveCrash[]; +extern const u8 gBattleAnimMove_Chloroblast[]; +extern const u8 gBattleAnimMove_MountainGale[]; +extern const u8 gBattleAnimMove_VictoryDance[]; +extern const u8 gBattleAnimMove_HeadlongRush[]; +extern const u8 gBattleAnimMove_BarbBarrage[]; +extern const u8 gBattleAnimMove_EsperWing[]; +extern const u8 gBattleAnimMove_BitterMalice[]; +extern const u8 gBattleAnimMove_Shelter[]; +extern const u8 gBattleAnimMove_TripleArrows[]; +extern const u8 gBattleAnimMove_InfernalParade[]; +extern const u8 gBattleAnimMove_CeaselessEdge[]; +extern const u8 gBattleAnimMove_BleakwindStorm[]; +extern const u8 gBattleAnimMove_WildboltStorm[]; +extern const u8 gBattleAnimMove_SandsearStorm[]; +extern const u8 gBattleAnimMove_LunarBlessing[]; +extern const u8 gBattleAnimMove_TakeHeart[]; +extern const u8 gBattleAnimMove_TeraBlast[]; +extern const u8 gBattleAnimMove_SilkTrap[]; +extern const u8 gBattleAnimMove_AxeKick[]; +extern const u8 gBattleAnimMove_LastRespects[]; +extern const u8 gBattleAnimMove_LuminaCrash[]; +extern const u8 gBattleAnimMove_OrderUp[]; +extern const u8 gBattleAnimMove_JetPunch[]; +extern const u8 gBattleAnimMove_SpicyExtract[]; +extern const u8 gBattleAnimMove_SpinOut[]; +extern const u8 gBattleAnimMove_PopulationBomb[]; +extern const u8 gBattleAnimMove_IceSpinner[]; +extern const u8 gBattleAnimMove_GlaiveRush[]; +extern const u8 gBattleAnimMove_RevivalBlessing[]; +extern const u8 gBattleAnimMove_SaltCure[]; +extern const u8 gBattleAnimMove_TripleDive[]; +extern const u8 gBattleAnimMove_MortalSpin[]; +extern const u8 gBattleAnimMove_Doodle[]; +extern const u8 gBattleAnimMove_FilletAway[]; +extern const u8 gBattleAnimMove_KowtowCleave[]; +extern const u8 gBattleAnimMove_FlowerTrick[]; +extern const u8 gBattleAnimMove_TorchSong[]; +extern const u8 gBattleAnimMove_AquaStep[]; +extern const u8 gBattleAnimMove_RagingBull[]; +extern const u8 gBattleAnimMove_MakeItRain[]; +extern const u8 gBattleAnimMove_Ruination[]; +extern const u8 gBattleAnimMove_CollisionCourse[]; +extern const u8 gBattleAnimMove_ElectroDrift[]; +extern const u8 gBattleAnimMove_ShedTail[]; +extern const u8 gBattleAnimMove_ChillyReception[]; +extern const u8 gBattleAnimMove_TidyUp[]; +extern const u8 gBattleAnimMove_Snowscape[]; +extern const u8 gBattleAnimMove_Pounce[]; +extern const u8 gBattleAnimMove_Trailblaze[]; +extern const u8 gBattleAnimMove_ChillingWater[]; +extern const u8 gBattleAnimMove_HyperDrill[]; +extern const u8 gBattleAnimMove_TwinBeam[]; +extern const u8 gBattleAnimMove_RageFist[]; +extern const u8 gBattleAnimMove_ArmorCannon[]; +extern const u8 gBattleAnimMove_BitterBlade[]; +extern const u8 gBattleAnimMove_DoubleShock[]; +extern const u8 gBattleAnimMove_GigatonHammer[]; +extern const u8 gBattleAnimMove_Comeuppance[]; +extern const u8 gBattleAnimMove_AquaCutter[]; +extern const u8 gBattleAnimMove_BlazingTorque[]; +extern const u8 gBattleAnimMove_WickedTorque[]; +extern const u8 gBattleAnimMove_NoxiousTorque[]; +extern const u8 gBattleAnimMove_CombatTorque[]; +extern const u8 gBattleAnimMove_MagicalTorque[]; +extern const u8 gBattleAnimMove_Psyblade[]; +extern const u8 gBattleAnimMove_HydroSteam[]; +extern const u8 gBattleAnimMove_BloodMoon[]; +extern const u8 gBattleAnimMove_MatchaGotcha[]; +extern const u8 gBattleAnimMove_SyrupBomb[]; +extern const u8 gBattleAnimMove_IvyCudgel[]; +extern const u8 gBattleAnimMove_ElectroShot[]; +extern const u8 gBattleAnimMove_TeraStarstorm[]; +extern const u8 gBattleAnimMove_FickleBeam[]; +extern const u8 gBattleAnimMove_BurningBulwark[]; +extern const u8 gBattleAnimMove_Thunderclap[]; +extern const u8 gBattleAnimMove_MightyCleave[]; +extern const u8 gBattleAnimMove_TachyonCutter[]; +extern const u8 gBattleAnimMove_HardPress[]; +extern const u8 gBattleAnimMove_DragonCheer[]; +extern const u8 gBattleAnimMove_AlluringVoice[]; +extern const u8 gBattleAnimMove_TemperFlare[]; +extern const u8 gBattleAnimMove_SupercellSlam[]; +extern const u8 gBattleAnimMove_PsychicNoise[]; +extern const u8 gBattleAnimMove_UpperHand[]; +extern const u8 gBattleAnimMove_MalignantChain[]; +extern const u8 gBattleAnimMove_BreakneckBlitz[]; +extern const u8 gBattleAnimMove_AllOutPummeling[]; +extern const u8 gBattleAnimMove_SupersonicSkystrike[]; +extern const u8 gBattleAnimMove_AcidDownpour[]; +extern const u8 gBattleAnimMove_TectonicRage[]; +extern const u8 gBattleAnimMove_ContinentalCrush[]; +extern const u8 gBattleAnimMove_SavageSpinOut[]; +extern const u8 gBattleAnimMove_NeverEndingNightmare[]; +extern const u8 gBattleAnimMove_CorkscrewCrash[]; +extern const u8 gBattleAnimMove_InfernoOverdrive[]; +extern const u8 gBattleAnimMove_HydroVortex[]; +extern const u8 gBattleAnimMove_BloomDoom[]; +extern const u8 gBattleAnimMove_GigavoltHavoc[]; +extern const u8 gBattleAnimMove_ShatteredPsyche[]; +extern const u8 gBattleAnimMove_SubzeroSlammer[]; +extern const u8 gBattleAnimMove_DevastatingDrake[]; +extern const u8 gBattleAnimMove_BlackHoleEclipse[]; +extern const u8 gBattleAnimMove_TwinkleTackle[]; +extern const u8 gBattleAnimMove_Catastropika[]; +extern const u8 gBattleAnimMove_10000000VoltThunderbolt[]; +extern const u8 gBattleAnimMove_StokedSparksurfer[]; +extern const u8 gBattleAnimMove_ExtremeEvoboost[]; +extern const u8 gBattleAnimMove_PulverizingPancake[]; +extern const u8 gBattleAnimMove_GenesisSupernova[]; +extern const u8 gBattleAnimMove_SinisterArrowRaid[]; +extern const u8 gBattleAnimMove_MaliciousMoonsault[]; +extern const u8 gBattleAnimMove_OceanicOperetta[]; +extern const u8 gBattleAnimMove_SplinteredStormshards[]; +extern const u8 gBattleAnimMove_LetsSnuggleForever[]; +extern const u8 gBattleAnimMove_ClangorousSoulblaze[]; +extern const u8 gBattleAnimMove_GuardianOfAlola[]; +extern const u8 gBattleAnimMove_SearingSunrazeSmash[]; +extern const u8 gBattleAnimMove_MenacingMoonrazeMaelstrom[]; +extern const u8 gBattleAnimMove_LightThatBurnsTheSky[]; +extern const u8 gBattleAnimMove_SoulStealing7StarStrike[]; +extern const u8 gBattleAnimMove_MaxGuard[]; +extern const u8 gBattleAnimMove_MaxFlare[]; +extern const u8 gBattleAnimMove_MaxFlutterby[]; +extern const u8 gBattleAnimMove_MaxLightning[]; +extern const u8 gBattleAnimMove_MaxStrike[]; +extern const u8 gBattleAnimMove_MaxKnuckle[]; +extern const u8 gBattleAnimMove_MaxPhantasm[]; +extern const u8 gBattleAnimMove_MaxHailstorm[]; +extern const u8 gBattleAnimMove_MaxOoze[]; +extern const u8 gBattleAnimMove_MaxGeyser[]; +extern const u8 gBattleAnimMove_MaxAirstream[]; +extern const u8 gBattleAnimMove_MaxStarfall[]; +extern const u8 gBattleAnimMove_MaxWyrmwind[]; +extern const u8 gBattleAnimMove_MaxMindstorm[]; +extern const u8 gBattleAnimMove_MaxRockfall[]; +extern const u8 gBattleAnimMove_MaxQuake[]; +extern const u8 gBattleAnimMove_MaxDarkness[]; +extern const u8 gBattleAnimMove_MaxOvergrowth[]; +extern const u8 gBattleAnimMove_MaxSteelspike[]; +extern const u8 gBattleAnimMove_GMaxVineLash[]; +extern const u8 gBattleAnimMove_GMaxWildfire[]; +extern const u8 gBattleAnimMove_GMaxCannonade[]; +extern const u8 gBattleAnimMove_GMaxBefuddle[]; +extern const u8 gBattleAnimMove_GMaxVoltCrash[]; +extern const u8 gBattleAnimMove_GMaxGoldRush[]; +extern const u8 gBattleAnimMove_GMaxChiStrike[]; +extern const u8 gBattleAnimMove_GMaxTerror[]; +extern const u8 gBattleAnimMove_GMaxFoamBurst[]; +extern const u8 gBattleAnimMove_GMaxResonance[]; +extern const u8 gBattleAnimMove_GMaxCuddle[]; +extern const u8 gBattleAnimMove_GMaxReplenish[]; +extern const u8 gBattleAnimMove_GMaxMalodor[]; +extern const u8 gBattleAnimMove_GMaxMeltdown[]; +extern const u8 gBattleAnimMove_GMaxDrumSolo[]; +extern const u8 gBattleAnimMove_GMaxFireball[]; +extern const u8 gBattleAnimMove_GMaxHydrosnipe[]; +extern const u8 gBattleAnimMove_GMaxWindRage[]; +extern const u8 gBattleAnimMove_GMaxGravitas[]; +extern const u8 gBattleAnimMove_GMaxStonesurge[]; +extern const u8 gBattleAnimMove_GMaxVolcalith[]; +extern const u8 gBattleAnimMove_GMaxTartness[]; +extern const u8 gBattleAnimMove_GMaxSweetness[]; +extern const u8 gBattleAnimMove_GMaxSandblast[]; +extern const u8 gBattleAnimMove_GMaxStunShock[]; +extern const u8 gBattleAnimMove_GMaxCentiferno[]; +extern const u8 gBattleAnimMove_GMaxSmite[]; +extern const u8 gBattleAnimMove_GMaxSnooze[]; +extern const u8 gBattleAnimMove_GMaxFinale[]; +extern const u8 gBattleAnimMove_GMaxSteelsurge[]; +extern const u8 gBattleAnimMove_GMaxDepletion[]; +extern const u8 gBattleAnimMove_GMaxOneBlow[]; +extern const u8 gBattleAnimMove_GMaxRapidFlow[]; + +// status animations +extern const u8 gBattleAnimStatus_Poison[]; +extern const u8 gBattleAnimStatus_Confusion[]; +extern const u8 gBattleAnimStatus_Burn[]; +extern const u8 gBattleAnimStatus_Infatuation[]; +extern const u8 gBattleAnimStatus_Sleep[]; +extern const u8 gBattleAnimStatus_Paralysis[]; +extern const u8 gBattleAnimStatus_Freeze[]; +extern const u8 gBattleAnimStatus_Curse[]; +extern const u8 gBattleAnimStatus_Nightmare[]; + +// general animations +extern const u8 gBattleAnimGeneral_StatsChange[]; +extern const u8 gBattleAnimGeneral_SubstituteFade[]; +extern const u8 gBattleAnimGeneral_SubstituteAppear[]; +extern const u8 gBattleAnimGeneral_PokeblockThrow[]; +extern const u8 gBattleAnimGeneral_ItemKnockoff[]; +extern const u8 gBattleAnimGeneral_TurnTrap[]; +extern const u8 gBattleAnimGeneral_HeldItemEffect[]; +extern const u8 gBattleAnimGeneral_SmokeballEscape[]; +extern const u8 gBattleAnimGeneral_HangedOn[]; +extern const u8 gBattleAnimGeneral_Rain[]; +extern const u8 gBattleAnimGeneral_Sun[]; +extern const u8 gBattleAnimGeneral_Sandstorm[]; +extern const u8 gBattleAnimGeneral_Hail[]; +extern const u8 gBattleAnimGeneral_LeechSeedDrain[]; +extern const u8 gBattleAnimGeneral_MonHit[]; +extern const u8 gBattleAnimGeneral_ItemSteal[]; +extern const u8 gBattleAnimGeneral_SnatchMove[]; +extern const u8 gBattleAnimGeneral_FutureSightHit[]; +extern const u8 gBattleAnimGeneral_DoomDesireHit[]; +extern const u8 gBattleAnimGeneral_FocusPunchSetUp[]; +extern const u8 gBattleAnimGeneral_IngrainHeal[]; +extern const u8 gBattleAnimGeneral_WishHeal[]; +extern const u8 gBattleAnimGeneral_MegaEvolution[]; +extern const u8 gBattleAnimGeneral_IllusionOff[]; +extern const u8 gBattleAnimGeneral_FormChange[]; +extern const u8 gBattleAnimGeneral_SlideOffScreen[]; +extern const u8 gBattleAnimGeneral_RestoreBg[]; +extern const u8 gBattleAnimGeneral_TotemFlare[]; +extern const u8 gBattleAnimGeneral_GulpMissile[]; +extern const u8 gBattleAnimGeneral_StrongWinds[]; +extern const u8 gBattleAnimGeneral_PrimalReversion[]; +extern const u8 gBattleAnimGeneral_AquaRingHeal[]; +extern const u8 gBattleAnimGeneral_BeakBlastSetUp[]; +extern const u8 gBattleAnimGeneral_ShellTrapSetUp[]; +extern const u8 gBattleAnimGeneral_ZMoveActivate[]; +extern const u8 gBattleAnimGeneral_AffectionHangedOn[]; +extern const u8 gBattleAnimGeneral_Snow[]; +extern const u8 gBattleAnimGeneral_UltraBurst[]; +extern const u8 gBattleAnimGeneral_SaltCureDamage[]; +extern const u8 gBattleAnimGeneral_DynamaxGrowth[]; +extern const u8 gBattleAnimGeneral_SetWeather[]; +extern const u8 gBattleAnimGeneral_SyrupBombSpeedDrop[]; +extern const u8 gBattleAnimGeneral_Rainbow[]; +extern const u8 gBattleAnimGeneral_SeaOfFire[]; +extern const u8 gBattleAnimGeneral_Swamp[]; +extern const u8 gBattleAnimGeneral_TrickRoom[]; +extern const u8 gBattleAnimGeneral_WonderRoom[]; +extern const u8 gBattleAnimGeneral_MagicRoom[]; +extern const u8 gBattleAnimGeneral_Tailwind[]; +extern const u8 gBattleAnimGeneral_Fog[]; +extern const u8 gBattleAnimGeneral_TeraCharge[]; +extern const u8 gBattleAnimGeneral_TeraActivate[]; +extern const u8 gBattleAnimGeneral_SimpleHeal[]; + +// special animations +extern const u8 gBattleAnimSpecial_LevelUp[]; +extern const u8 gBattleAnimSpecial_SwitchOutPlayerMon[]; +extern const u8 gBattleAnimSpecial_SwitchOutOpponentMon[]; +extern const u8 gBattleAnimSpecial_BallThrow[]; +extern const u8 gBattleAnimSpecial_BallThrowWithTrainer[]; +extern const u8 gBattleAnimSpecial_SubstituteToMon[]; +extern const u8 gBattleAnimSpecial_MonToSubstitute[]; +extern const u8 gBattleAnimSpecial_CriticalCaptureBallThrow[]; + #endif // GUARD_BATTLE_ANIM_SCRIPTS_H diff --git a/include/battle_controllers.h b/include/battle_controllers.h index a670113bc7..5e92cac763 100644 --- a/include/battle_controllers.h +++ b/include/battle_controllers.h @@ -125,9 +125,7 @@ struct ChooseMoveStruct u8 currentPp[MAX_MON_MOVES]; u8 maxPp[MAX_MON_MOVES]; u16 species; - u8 monType1; - u8 monType2; - u8 monType3; + u8 monTypes[3]; struct ZMoveData zmove; }; @@ -312,6 +310,13 @@ void ActionSelectionDestroyCursorAt(u8 cursorPos); void InitMoveSelectionsVarsAndStrings(u32 battler); void MoveSelectionCreateCursorAt(u8 cursorPos, u8 arg1); void MoveSelectionDestroyCursorAt(u8 cursorPosition); +void PlayerHandleChooseMove(u32 battler); +void HandleInputChooseMove(u32 battler); +void HandleInputChooseTarget(u32 battler); +void HandleInputShowEntireFieldTargets(u32 battler); +void HandleInputShowTargets(u32 battler); +void HandleMoveSwitching(u32 battler); +void HandleChooseMoveAfterDma3(u32 battler); // recorded player controller void SetControllerToRecordedPlayer(u32 battler); diff --git a/include/battle_interface.h b/include/battle_interface.h index 6635298dc1..3280826ff7 100644 --- a/include/battle_interface.h +++ b/include/battle_interface.h @@ -47,6 +47,9 @@ enum #define TAG_HEALTHBAR_PAL TAG_HEALTHBAR_PLAYER1_TILE #define TAG_HEALTHBOX_PAL TAG_HEALTHBOX_PLAYER1_TILE +#define TAG_SHADOW_PAL TAG_HEALTHBOX_PLAYER1_TILE + +#define TAG_SHADOW_TILE 0xD759 #define TAG_GIMMICK_TRIGGER_TILE 0xD777 #define TAG_MEGA_INDICATOR_TILE 0xD778 diff --git a/include/battle_main.h b/include/battle_main.h index eb0af5aa77..7e3206c554 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -80,6 +80,7 @@ s32 GetWhichBattlerFaster(u32 battler1, u32 battler2, bool32 ignoreChosenMoves); void RunBattleScriptCommands_PopCallbacksStack(void); void RunBattleScriptCommands(void); void SpecialStatusesClear(void); +u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost); void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk); bool32 IsWildMonSmart(void); u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer *trainer, bool32 firstTrainer, u32 battleTypeFlags); diff --git a/include/battle_scripts.h b/include/battle_scripts.h index 0c9f72c276..fb1e72af24 100644 --- a/include/battle_scripts.h +++ b/include/battle_scripts.h @@ -263,7 +263,6 @@ extern const u8 BattleScript_EmbargoEndTurn[]; extern const u8 BattleScript_TelekinesisEndTurn[]; extern const u8 BattleScript_BufferEndTurn[]; extern const u8 BattleScript_AquaRingHeal[]; -extern const u8 BattleScript_AuroraVeilEnds[]; extern const u8 BattleScript_LuckyChantEnds[]; extern const u8 BattleScript_TailwindEnds[]; extern const u8 BattleScript_TrickRoomEnds[]; @@ -295,6 +294,7 @@ extern const u8 BattleScript_WeakArmorActivates[]; extern const u8 BattleScript_FellStingerRaisesStat[]; extern const u8 BattleScript_SnowWarningActivatesHail[]; extern const u8 BattleScript_SnowWarningActivatesSnow[]; +extern const u8 BattleScript_PickupActivates[]; extern const u8 BattleScript_HarvestActivates[]; extern const u8 BattleScript_ImposterActivates[]; extern const u8 BattleScript_SelectingNotAllowedMoveAssaultVest[]; @@ -468,7 +468,6 @@ extern const u8 BattleScript_AngerShellActivates[]; extern const u8 BattleScript_WellBakedBodyActivates[]; extern const u8 BattleScript_WindRiderActivatesMoveEnd[]; extern const u8 BattleScript_WindPowerActivates[]; -extern const u8 BattleScript_WindPowerActivatesEnd2[]; extern const u8 BattleScript_ProtosynthesisActivates[]; extern const u8 BattleScript_QuarkDriveActivates[]; extern const u8 BattleScript_GoodAsGoldActivates[]; @@ -843,5 +842,7 @@ extern const u8 BattleScript_EffectUpperHand[]; extern const u8 BattleScript_EffectTidyUp[]; extern const u8 BattleScript_EffectSpicyExtract[]; extern const u8 BattleScript_DamageToQuarterTargetHP[]; +extern const u8 BattleScript_EffectFickleBeam[]; +extern const u8 BattleScript_FickleBeamDoubled[]; #endif // GUARD_BATTLE_SCRIPTS_H diff --git a/include/battle_tower.h b/include/battle_tower.h index 074fccf3a5..45c9d683ff 100644 --- a/include/battle_tower.h +++ b/include/battle_tower.h @@ -27,9 +27,9 @@ struct BattleFrontierTrainer }; extern const u8 gTowerMaleFacilityClasses[30]; -extern const u8 gTowerMaleTrainerGfxIds[30]; +extern const u16 gTowerMaleTrainerGfxIds[30]; extern const u8 gTowerFemaleFacilityClasses[20]; -extern const u8 gTowerFemaleTrainerGfxIds[20]; +extern const u16 gTowerFemaleTrainerGfxIds[20]; extern const struct TrainerMon gBattleFrontierMons[]; extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; extern const struct TrainerMon gSlateportBattleTentMons[]; diff --git a/include/battle_util.h b/include/battle_util.h index 8eadf47c98..82f49da525 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -106,6 +106,15 @@ enum CANCELLER_END2, }; +enum { + OBEYS, + DISOBEYS_LOAFS, + DISOBEYS_HITS_SELF, + DISOBEYS_FALL_ASLEEP, + DISOBEYS_WHILE_ASLEEP, + DISOBEYS_RANDOM_MOVE, +}; + extern const struct TypePower gNaturalGiftTable[]; void HandleAction_ThrowBall(void); @@ -171,7 +180,7 @@ void ClearVariousBattlerFlags(u32 battler); void HandleAction_RunBattleScript(void); u32 SetRandomTarget(u32 battler); u32 GetMoveTarget(u16 move, u8 setTarget); -u8 IsMonDisobedient(void); +u8 GetAttackerObedienceForAction(); u32 GetBattlerHoldEffect(u32 battler, bool32 checkNegating); u32 GetBattlerHoldEffectIgnoreAbility(u32 battler, bool32 checkNegating); u32 GetBattlerHoldEffectInternal(u32 battler, bool32 checkNegating, bool32 checkAbility); @@ -231,6 +240,8 @@ bool32 TryRoomService(u32 battler); void BufferStatChange(u32 battler, u8 statId, u8 stringId); bool32 BlocksPrankster(u16 move, u32 battlerPrankster, u32 battlerDef, bool32 checkTarget); u16 GetUsedHeldItem(u32 battler); +bool32 PickupHasValidTarget(u32 battler); +bool32 CantPickupItem(u32 battler); bool32 IsBattlerWeatherAffected(u32 battler, u32 weatherFlags); u32 GetBattlerMoveTargetType(u32 battler, u32 move); bool32 CanTargetBattler(u32 battlerAtk, u32 battlerDef, u16 move); @@ -268,5 +279,6 @@ u8 GetBattlerType(u32 battler, u8 typeIndex, bool32 ignoreTera); bool8 CanMonParticipateInSkyBattle(struct Pokemon *mon); bool8 IsMonBannedFromSkyBattles(u16 species); void RemoveBattlerType(u32 battler, u8 type); +u32 GetMoveType(u32 move); #endif // GUARD_BATTLE_UTIL_H diff --git a/include/config/battle.h b/include/config/battle.h index 881e8a2715..a60d9cdd9b 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -39,7 +39,6 @@ #define B_MULTIPLE_TARGETS_DMG GEN_LATEST // In Gen4+, damage dealt by moves that hit multiple targets at once is reduced to 75%. Before, it was 50%. // Type settings -#define B_EXPANDED_TYPE_NAMES TRUE // If TRUE, type names are increased from 6 characters to 8 characters. #define B_GHOSTS_ESCAPE GEN_LATEST // In Gen6+, abilities like Shadow Tag or moves like Mean Look fail on Ghost-type Pokémon. They can also escape any Wild Battle. #define B_PARALYZE_ELECTRIC GEN_LATEST // In Gen6+, Electric-type Pokémon can't be paralyzed. #define B_POWDER_GRASS GEN_LATEST // In Gen6+, Grass-type Pokémon are immune to powder and spore moves. @@ -110,7 +109,7 @@ #define B_BURN_HIT_THAW GEN_LATEST // In Gen6+, damaging moves with a chance of burn will thaw the target, regardless if they're fire-type moves or not. #define B_HEALING_WISH_SWITCH GEN_LATEST // In Gen5+, the mon receiving Healing Wish is sent out at the end of the turn. // Additionally, in gen8+ the Healing Wish's effect will be stored until the user switches into a statused or hurt mon. -#define B_DEFOG_CLEARS_TERRAIN GEN_LATEST // In Gen8+, Defog also clears active Terrain. +#define B_DEFOG_EFFECT_CLEARING GEN_LATEST // In Gen6+, Defog clears Spikes, Toxic Spikes, Stealth Rock and Sticky Web from both sides. In Gen8+, Defog also clears active Terrain. #define B_STOCKPILE_RAISES_DEFS GEN_LATEST // In Gen4+, Stockpile also raises Defense and Sp. Defense stats. Once Spit Up / Swallow is used, these stat changes are lost. #define B_TRANSFORM_SHINY GEN_LATEST // In Gen4+, Transform will copy the shiny state of the opponent instead of maintaining its own shiny state. #define B_TRANSFORM_FORM_CHANGES GEN_LATEST // In Gen5+, Transformed Pokemon cannot change forms. @@ -121,9 +120,9 @@ #define B_SKETCH_BANS GEN_LATEST // In Gen9+, Sketch is unable to copy more moves than in previous generations. #define B_KNOCK_OFF_REMOVAL GEN_LATEST // In Gen5+, Knock Off removes the foe's item instead of rendering it unusable. #define B_HEAL_BELL_SOUNDPROOF GEN_LATEST // In Gen5, Heal Bell affects all mons with Soundproof. In Gen6-8 it affects inactive mons, but not battlers. In Gen9 it always affects the user. +#define B_CHARGE GEN_LATEST // In Gen8-, Charge status is lost regardless of the typing of the next move. // Ability settings -#define B_EXPANDED_ABILITY_NAMES TRUE // If TRUE, ability names are increased from 12 characters to 16 characters. #define B_ABILITY_WEATHER GEN_LATEST // In Gen6+, ability-induced weather lasts 5 turns. Before, it lasted until the battle ended or until it was changed by a move or a different weather-affecting ability. #define B_GALE_WINGS GEN_LATEST // In Gen7+ requires full HP to trigger. #define B_STANCE_CHANGE_FAIL GEN_LATEST // In Gen7+, Stance Change fails if the Pokémon is unable to use a move because of confusion, paralysis, etc. In Gen6, it doesn't. @@ -204,6 +203,9 @@ // Flag and Var settings #define B_RESET_FLAGS_VARS_AFTER_WHITEOUT TRUE // If TRUE, Overworld_ResetBattleFlagsAndVars will reset battle-related Flags and Vars when the player whites out. +// Ingame partner flag +#define B_SHOW_PARTNER_TARGET FALSE // Shows the battler partner will target. + // Terrain settings #define B_TERRAIN_BG_CHANGE TRUE // If set to TRUE, terrain moves permanently change the default battle background until the effect fades. #define B_THUNDERSTORM_TERRAIN TRUE // If TRUE, overworld Thunderstorm generates Rain and Electric Terrain as in Gen 8. @@ -219,9 +221,8 @@ #define B_FAST_HP_DRAIN TRUE // If set to TRUE, HP bars will move faster. #define B_FAST_EXP_GROW TRUE // If set to TRUE, EXP bars will move faster. #define B_SHOW_TARGETS TRUE // If set to TRUE, all available targets, for moves hitting 2 or 3 Pokémon, will be shown before selecting a move. -#define B_SHOW_CATEGORY_ICON TRUE // If set to TRUE, it will show an icon in the summary showing the move's category. +#define B_SHOW_CATEGORY_ICON TRUE // If set to TRUE, it will show an icon in the summary and move relearner showing the move's category. #define B_HIDE_HEALTHBOX_IN_ANIMS TRUE // If set to TRUE, hides healthboxes during move animations. -#define B_EXPANDED_MOVE_NAMES TRUE // If set to FALSE, move names are decreased from 16 characters to 12 characters. #define B_WAIT_TIME_MULTIPLIER 16 // This determines how long text pauses in battle last. Vanilla is 16. Lower values result in faster battles. #define B_QUICK_MOVE_CURSOR_TO_RUN FALSE // If set to TRUE, pushing B in the battle options against a wild encounter will move the cursor to the run option #define B_MOVE_DESCRIPTION_BUTTON L_BUTTON // If set to a button other than B_LAST_USED_BALL_BUTTON, pressing this button will open the move description menu @@ -251,26 +252,34 @@ #define B_TRY_CATCH_TRAINER_BALL GEN_LATEST // In Gen4+, trying to catch a Trainer's Pokémon does not consume the Poké Ball. // Animation Settings -#define B_NEW_SWORD_PARTICLE TRUE // If set to TRUE, it updates Swords Dance's particle. -#define B_NEW_LEECH_SEED_PARTICLE TRUE // If set to TRUE, it updates Leech Seed's animation particle. -#define B_NEW_HORN_ATTACK_PARTICLE TRUE // If set to TRUE, it updates Horn Attack's horn particle. -#define B_NEW_ROCKS_PARTICLE TRUE // If set to TRUE, it updates rock particles. -#define B_NEW_LEAF_PARTICLE TRUE // If set to TRUE, it updates leaf particle. -#define B_NEW_EMBER_PARTICLES TRUE // If set to TRUE, it updates Ember's fire particle. -#define B_NEW_MEAN_LOOK_PARTICLE TRUE // If set to TRUE, it updates Mean Look's eye particle. -#define B_NEW_TEETH_PARTICLE TRUE // If set to TRUE, it updates Bite/Crunch teeth particle. -#define B_NEW_HANDS_FEET_PARTICLE TRUE // If set to TRUE, it updates chop/kick/punch particles. -#define B_NEW_SPIKES_PARTICLE TRUE // If set to TRUE, it updates Spikes particle. -#define B_NEW_FLY_BUBBLE_PARTICLE TRUE // If set to TRUE, it updates Fly's 'bubble' particle. -#define B_NEW_CURSE_NAIL_PARTICLE TRUE // If set to TRUE, it updates Curse's nail. -#define B_NEW_BATON_PASS_BALL_PARTICLE TRUE // If set to TRUE, it updates Baton Pass' Poké Ball sprite. -#define B_NEW_MORNING_SUN_STAR_PARTICLE TRUE // If set to TRUE, it updates Morning Sun's star particles. -#define B_NEW_IMPACT_PALETTE TRUE // If set to TRUE, it updates the basic 'hit' palette. -#define B_NEW_SURF_PARTICLE_PALETTE TRUE // If set to TRUE, it updates Surf's wave palette. +#define B_NEW_SWORD_PARTICLE FALSE // If set to TRUE, it updates Swords Dance's particle. +#define B_NEW_LEECH_SEED_PARTICLE FALSE // If set to TRUE, it updates Leech Seed's animation particle. +#define B_NEW_HORN_ATTACK_PARTICLE FALSE // If set to TRUE, it updates Horn Attack's horn particle. +#define B_NEW_ROCKS_PARTICLE FALSE // If set to TRUE, it updates rock particles. +#define B_NEW_LEAF_PARTICLE FALSE // If set to TRUE, it updates leaf particle. +#define B_NEW_EMBER_PARTICLES FALSE // If set to TRUE, it updates Ember's fire particle. +#define B_NEW_MEAN_LOOK_PARTICLE FALSE // If set to TRUE, it updates Mean Look's eye particle. +#define B_NEW_TEETH_PARTICLE FALSE // If set to TRUE, it updates Bite/Crunch teeth particle. +#define B_NEW_HANDS_FEET_PARTICLE FALSE // If set to TRUE, it updates chop/kick/punch particles. +#define B_NEW_SPIKES_PARTICLE FALSE // If set to TRUE, it updates Spikes particle. +#define B_NEW_FLY_BUBBLE_PARTICLE FALSE // If set to TRUE, it updates Fly's 'bubble' particle. +#define B_NEW_CURSE_NAIL_PARTICLE FALSE // If set to TRUE, it updates Curse's nail. +#define B_NEW_BATON_PASS_BALL_PARTICLE FALSE // If set to TRUE, it updates Baton Pass' Poké Ball sprite. +#define B_NEW_MORNING_SUN_STAR_PARTICLE FALSE // If set to TRUE, it updates Morning Sun's star particles. +#define B_NEW_IMPACT_PALETTE FALSE // If set to TRUE, it updates the basic 'hit' palette. +#define B_NEW_SURF_PARTICLE_PALETTE FALSE // If set to TRUE, it updates Surf's wave palette. // Poké Ball animation and sounds #define B_ENEMY_THROW_BALLS GEN_LATEST // In GEN_6+, enemy Trainers throw Poké Balls into battle instead of them just appearing on the ground and opening. #define B_ENEMY_THROW_BALLS_SOUND GEN_LATEST // In GEN_5+, enemy Trainer's Poké Balls make a sound when thrown to send out a Pokémon. This can only be used when B_ENEMY_THROW_BALLS is set to GEN_6 or later. #define B_PLAYER_THROW_BALLS_SOUND GEN_LATEST // In GEN_5+, the player's Poké Balls make a sound when thrown to send out a Pokémon. +#define SHOW_TYPES_NEVER 0 +#define SHOW_TYPES_ALWAYS 1 +#define SHOW_TYPES_CAUGHT 2 +#define B_SHOW_TYPES SHOW_TYPES_NEVER // When defined as SHOW_TYPES_ALWAYS, after selecting "Fight" in battle, the types of all Pokemon are revealed. Whe defined as SHOW_TYPES_OWN, types are only revealed if the player owns the mon in question. + +// Pokémon battle sprite settings +#define B_ENEMY_MON_SHADOW_STYLE GEN_LATEST // In Gen4+, all enemy Pokemon will have a shadow drawn beneath them. + #endif // GUARD_CONFIG_BATTLE_H diff --git a/include/config/ev_caps.h b/include/config/ev_caps.h new file mode 100644 index 0000000000..0513ff086e --- /dev/null +++ b/include/config/ev_caps.h @@ -0,0 +1,16 @@ +#ifndef GUARD_CONFIG_EV_CAP_H +#define GUARD_CONFIG_EV_CAP_H + +// Constants for EV Cap Types +#define EV_CAP_NONE 0 // Regular behavior, no EV caps are applied +#define EV_CAP_FLAG_LIST 1 // EV cap is chosen according to the first unset flag in `sEVCapFlagMap` +#define EV_CAP_VARIABLE 2 // EV cap is chosen according to the contents of the event variable specified by B_EV_CAP_VARIABLE +#define EV_CAP_NO_GAIN 3 // No EVs can be gained + +// Configs for EV Cap +#define B_EV_CAP_TYPE EV_CAP_NONE // [EV_CAP_NONE, EV_CAP_FLAG_LIST, EV_CAP_VARIABLE, EV_CAP_NO_GAIN] choose the type of EV cap to apply#define B_EV_CAP_VARIABLE 12 // event variable used to derive EV cap if B_EV_CAP_TYPE is set to EV_CAP_VARIABLE +#define B_EV_CAP_VARIABLE 8 // event variable used to derive EV cap if B_EV_CAP_TYPE is set to EV_CAP_VARIABLE + +#define B_EV_ITEMS_CAP FALSE // If set to true, EV-boosting items can't be used to go over the EV cap + +#endif /*GUARD_CONFIG_EV_CAP_H*/ diff --git a/include/config/general.h b/include/config/general.h index dc39f4919a..ac338a1f50 100644 --- a/include/config/general.h +++ b/include/config/general.h @@ -72,6 +72,9 @@ #define SUMMARY_SCREEN_NATURE_COLORS TRUE // If TRUE, nature-based stat boosts and reductions will be red and blue in the summary screen. #define HQ_RANDOM TRUE // If TRUE, replaces the default RNG with an implementation of SFC32 RNG. May break code that relies on RNG. #define COMPETITIVE_PARTY_SYNTAX TRUE // If TRUE, parties are defined in "competitive syntax". +#define AUTO_SCROLL_TEXT FALSE // If TRUE, text will automatically scroll to the next line after NUM_FRAMES_AUTO_SCROLL_DELAY. Players can still press A_BUTTON or B_BUTTON to scroll on their own. +#define NUM_FRAMES_AUTO_SCROLL_DELAY 49 + // Measurement system constants to be used for UNITS #define UNITS_IMPERIAL 0 // Inches, feet, pounds diff --git a/include/config/item.h b/include/config/item.h index 644a73ade6..67916cbe4d 100644 --- a/include/config/item.h +++ b/include/config/item.h @@ -2,7 +2,6 @@ #define GUARD_CONFIG_ITEM_H // Item config -#define I_EXPANDED_ITEM_NAMES TRUE // If set to FALSE, item names are decreased from 20 characters to 14 characters. #define I_SHINY_CHARM_ADDITIONAL_ROLLS 2 // Amount of additional shiny rolls if the player has the Shiny Charm. Set it to 0 to disable Shiny Charm's effects. #define I_KEY_FOSSILS GEN_LATEST // In Gen4+, all Gen 3 fossils became regular items. #define I_KEY_ESCAPE_ROPE GEN_LATEST // In Gen8, Escape Rope became a Key Item. Keep in mind, this will make it free to buy in marts. @@ -19,6 +18,8 @@ #define I_BERRY_PRICE GEN_7 // Since Berries have become unplantable (Gen8+), their price has gone up. #define I_POWER_ITEM_BOOST GEN_LATEST // In Gen7+, Power Items grant 8 EVs instead of 4 EVs. #define I_PREMIER_BALL_BONUS GEN_LATEST // In LGPE onwards (Gen8+ here), you are given a Premier Ball for every 10 Poké Balls of any type and in the same purchase. Previously, it only applied to regular Poké Balls and only 1 could be obtained per purchase. +#define I_ROTOM_CATALOG_THUNDER_SHOCK GEN_LATEST // In Gen9+, reverting Rotom to its base form will teach it Thunder Shock even if it knows another move. +#define I_REPEL_INCLUDE_FAINTED GEN_LATEST // In Gen1 and Gen6+, Repels always use the level of the first member of the party to check which wild Pokémon to prevent encounters with, even if that member is fainted. In Gen2-5, it only uses the level of the first non-fainted Pokémon. // 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. diff --git a/include/config/overworld.h b/include/config/overworld.h index d978c1f48a..ce4852e9e7 100644 --- a/include/config/overworld.h +++ b/include/config/overworld.h @@ -3,6 +3,7 @@ // Movement config #define OW_RUNNING_INDOORS GEN_LATEST // In Gen4+, players are allowed to run indoors. +#define OW_AUTO_SIGNPOST FALSE // When enabled, if the tile that the player is facing has MB_SIGNPOST, MB_POKEMART_SIGN, or MB_POKEMON_CENTER_SIGN, the player will automatically read the signpost, as seen in FRLG. #define SLOW_MOVEMENT_ON_STAIRS FALSE // If enabled, the player will move slower up/down stairs like in FR // Other settings @@ -11,6 +12,12 @@ #define OW_HIDE_REPEAT_MAP_POPUP FALSE // If enabled, map popups will not appear if entering a map with the same Map Section Id as the last. #define OW_FRLG_WHITEOUT FALSE // If enabled, shows an additional whiteout message and post whiteout event script with healing NPC. +// Item Obtain Description Box +#define OW_ITEM_DESCRIPTIONS_OFF 0 // never show descriptions +#define OW_ITEM_DESCRIPTIONS_FIRST_TIME 1 // show first time (** SAVE-BREAKING - see struct SaveBlock3 **) +#define OW_ITEM_DESCRIPTIONS_ALWAYS 2 // always show description +#define OW_SHOW_ITEM_DESCRIPTIONS OW_ITEM_DESCRIPTIONS_OFF // If enabled, item descriptions/images will be shown when finding items. + // These generational defines only make a distinction for Berries and the OW_PC_MOVE_ORDER #define GEN_6_XY GEN_6 #define GEN_6_ORAS GEN_LATEST + 1 @@ -34,6 +41,7 @@ #define OW_BERRY_GROWTH_RATE GEN_3 // Presets for how long each Berry plant takes to grow. #define OW_BERRY_YIELD_RATE GEN_3 // Presets for how many Berries each plant can yield. #define OW_BERRY_DRAIN_RATE GEN_6_ORAS // If OW_BERRY_MOISTURE is enabled, this setting changes how fast the soil dries out. GEN_4 uses a Berry-dependent drain rate, GEN_6_XY dries out in 24 hours (4 hours with the relevant Mulch) and GEN_6_ORAS dries out in 4 hours. Other values are illegal. +#define OW_BERRY_IMMORTAL FALSE // If enabled, once a Berry tree has grown a Berry, the tree will not disappear until picked by the player. // Overworld Pokémon #define OW_POKEMON_OBJECT_EVENTS TRUE // Adds Object Event fields for every species. Can be used for NPCs using the OBJ_EVENT_GFX_SPECIES macro (eg. OBJ_EVENT_GFX_SPECIES(BULBASAUR)) diff --git a/include/config/pokemon.h b/include/config/pokemon.h index 7bf9450cbb..15db4881b5 100644 --- a/include/config/pokemon.h +++ b/include/config/pokemon.h @@ -51,6 +51,7 @@ #define P_TWO_FRAME_FRONT_SPRITES TRUE // In Pokémon Emerald, Pokémon front sprites always consist of two frames. This config can revert it to only use the first frame, as is the case in the other Gen 3 games. #define P_ONLY_OBTAINABLE_SHINIES FALSE // If TRUE, Pokémon encountered in the Battle Pyramid won't be shiny. #define P_NO_SHINIES_WITHOUT_POKEBALLS FALSE // If TRUE, Pokémon encountered when the player is out of Poké Balls won't be shiny +#define P_SHOW_DYNAMIC_TYPES FALSE // If TRUE, all moves with dynamic type changes will be reflected as their current type in battle/summary screens instead of just select ones like in vanilla. // Learnset helper toggles #define P_LEARNSET_HELPER_TEACHABLE TRUE // If TRUE, teachable_learnsets.h will be populated by tools/learnset_helpers/teachable.py using the included JSON files based on available TMs and tutors. diff --git a/include/config/test.h b/include/config/test.h index bd721beb9d..708c2ca581 100644 --- a/include/config/test.h +++ b/include/config/test.h @@ -1,14 +1,8 @@ #ifndef GUARD_CONFIG_TEST_H #define GUARD_CONFIG_TEST_H -#undef B_EXPANDED_MOVE_NAMES -#define B_EXPANDED_MOVE_NAMES TRUE -#undef I_EXPANDED_ITEM_NAMES -#define I_EXPANDED_ITEM_NAMES TRUE #undef POKEMON_NAME_LENGTH #define POKEMON_NAME_LENGTH 12 -#undef B_EXPANDED_TYPE_NAMES -#define B_EXPANDED_TYPE_NAMES TRUE #undef P_MEGA_EVOLUTIONS #define P_MEGA_EVOLUTIONS TRUE diff --git a/include/constants/battle.h b/include/constants/battle.h index 1f11adbd5f..f9800ef4b3 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -89,7 +89,6 @@ #define BATTLE_TWO_VS_ONE_OPPONENT ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && gTrainerBattleOpponent_B == 0xFFFF)) #define BATTLE_TYPE_HAS_AI (BATTLE_TYPE_TRAINER | BATTLE_TYPE_FIRST_BATTLE | BATTLE_TYPE_SAFARI | BATTLE_TYPE_ROAMER | BATTLE_TYPE_INGAME_PARTNER) - // Battle Outcome defines #define B_OUTCOME_WON 1 #define B_OUTCOME_LOST 2 @@ -138,7 +137,7 @@ #define STATUS2_WRAPPED (1 << 13) #define STATUS2_POWDER (1 << 14) #define STATUS2_INFATUATION (1 << 16 | 1 << 17 | 1 << 18 | 1 << 19) // 4 bits, one for every battler -#define STATUS2_INFATUATED_WITH(battler) (gBitTable[battler] << 16) +#define STATUS2_INFATUATED_WITH(battler) (1u << (battler + 16)) #define STATUS2_DEFENSE_CURL (1 << 20) #define STATUS2_TRANSFORMED (1 << 21) #define STATUS2_RECHARGE (1 << 22) @@ -218,8 +217,8 @@ #define HITMARKER_OBEYS (1 << 25) #define HITMARKER_NEVER_SET (1 << 26) // Cleared as part of a large group. Never set or checked #define HITMARKER_CHARGING (1 << 27) -#define HITMARKER_FAINTED(battler) (gBitTable[battler] << 28) -#define HITMARKER_FAINTED2(battler) ((1 << 28) << battler) +#define HITMARKER_FAINTED(battler) (1u << (battler + 28)) +#define HITMARKER_FAINTED2(battler) HITMARKER_FAINTED(battler) #define HITMARKER_STRING_PRINTED (1 << 29) // Per-side statuses that affect an entire party diff --git a/include/constants/battle_ai.h b/include/constants/battle_ai.h index 38d058a8cb..ca469cadeb 100644 --- a/include/constants/battle_ai.h +++ b/include/constants/battle_ai.h @@ -25,31 +25,36 @@ #define AI_EFFECTIVENESS_x0 0 // 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) -#define AI_FLAG_CHECK_VIABILITY (1 << 2) -#define AI_FLAG_SETUP_FIRST_TURN (1 << 3) -#define AI_FLAG_RISKY (1 << 4) -#define AI_FLAG_PREFER_STRONGEST_MOVE (1 << 5) -#define AI_FLAG_PREFER_BATON_PASS (1 << 6) -#define AI_FLAG_DOUBLE_BATTLE (1 << 7) // Automatically set for double battles, handles AI behaviour with partner -#define AI_FLAG_HP_AWARE (1 << 8) -#define AI_FLAG_POWERFUL_STATUS (1 << 9) // AI prefers moves that set up field effects or side statuses, even if the user can faint the target +// See docs/ai_flags.md for more details. +#define AI_FLAG_CHECK_BAD_MOVE (1 << 0) // AI will avoid using moves that are likely to fail or be ineffective in the current situation. +#define AI_FLAG_TRY_TO_FAINT (1 << 1) // AI will prioritize KOing the player's mon if able. +#define AI_FLAG_CHECK_VIABILITY (1 << 2) // AI damaging moves and move effects to determine the best available move in the current situation. +#define AI_FLAG_FORCE_SETUP_FIRST_TURN (1 << 3) // AI will prioritize using setup moves on the first turn at the expensve of all else. AI_FLAG_CHECK_VIABILITY will instead do this when the AI determines it makes sense. +#define AI_FLAG_RISKY (1 << 4) // AI will generally behave more recklessly, prioritizing damage over accuracy, explosions, etc. +#define AI_FLAG_PREFER_STRONGEST_MOVE (1 << 5) // AI adds score bonus to any move the AI has that either OHKOs or 2HKOs the player. +#define AI_FLAG_PREFER_BATON_PASS (1 << 6) // AI prefers raising its own stats and setting for / using Baton Pass. +#define AI_FLAG_DOUBLE_BATTLE (1 << 7) // Automatically set for double battles, handles AI behaviour with partner. +#define AI_FLAG_HP_AWARE (1 << 8) // AI will favour certain move effects based on how much remaining HP it and the player's mon have. +#define AI_FLAG_POWERFUL_STATUS (1 << 9) // AI prefers moves that set up field effects or side statuses, even if the user can faint the target. // New, Trainer Handicap Flags -#define AI_FLAG_NEGATE_UNAWARE (1 << 10) // AI is NOT aware of negating effects like wonder room, mold breaker, etc -#define AI_FLAG_WILL_SUICIDE (1 << 11) // AI will use explosion / self destruct / final gambit / etc +#define AI_FLAG_NEGATE_UNAWARE (1 << 10) // AI is NOT aware of negating effects like wonder room, mold breaker, etc. +#define AI_FLAG_WILL_SUICIDE (1 << 11) // AI will use explosion / self destruct / final gambit / etc. // New, Trainer Strategy Flags -#define AI_FLAG_PREFER_STATUS_MOVES (1 << 12) // AI gets a score bonus for status moves. Should be combined with AI_FLAG_CHECK_BAD_MOVE to prevent using only status moves -#define AI_FLAG_STALL (1 << 13) // AI stalls battle and prefers secondary damage/trapping/etc. TODO not finished +#define AI_FLAG_PREFER_STATUS_MOVES (1 << 12) // AI gets a score bonus for status moves. Should be combined with AI_FLAG_CHECK_BAD_MOVE to prevent using only status moves. +#define AI_FLAG_STALL (1 << 13) // AI stalls battle and prefers secondary damage/trapping/etc. TODO not finished. #define AI_FLAG_SMART_SWITCHING (1 << 14) // AI includes a lot more switching checks. Automatically includes AI_FLAG_SMART_MON_CHOICES. #define AI_FLAG_ACE_POKEMON (1 << 15) // AI has an Ace Pokemon. The last Pokemon in the party will not be used until it's the last one remaining. -#define AI_FLAG_OMNISCIENT (1 << 16) // AI has full knowledge of player moves, abilities, hold items +#define AI_FLAG_OMNISCIENT (1 << 16) // AI has full knowledge of player moves, abilities, hold items. #define AI_FLAG_SMART_MON_CHOICES (1 << 17) // AI will make smarter decisions when choosing which mon to send out mid-battle and after a KO, which are separate decisions. Automatically included by AI_FLAG_SMART_SWITCHING. -#define AI_FLAG_CONSERVATIVE (1 << 18) // AI assumes all moves will low roll damage -#define AI_FLAG_SEQUENCE_SWITCHING (1 << 19) // AI switches in mons in exactly party order, and never switches mid-battle +#define AI_FLAG_CONSERVATIVE (1 << 18) // AI assumes all moves will low roll damage. +#define AI_FLAG_SEQUENCE_SWITCHING (1 << 19) // AI switches in mons in exactly party order, and never switches mid-battle. #define AI_FLAG_COUNT 20 +// The following options are enough to have a basic/smart trainer. Any other addtion could make the trainer worse/better depending on the flag +#define AI_FLAG_BASIC_TRAINER (AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY) +#define AI_FLAG_SMART_TRAINER (AI_FLAG_BASIC_TRAINER | AI_FLAG_OMNISCIENT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES) + // 'other' ai logic flags #define AI_FLAG_DYNAMIC_FUNC (1 << 28) // Create custom AI functions for specific battles via "setdynamicaifunc" cmd #define AI_FLAG_ROAMING (1 << 29) diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h index 389cd7e127..4601b452a2 100644 --- a/include/constants/battle_anim.h +++ b/include/constants/battle_anim.h @@ -412,6 +412,10 @@ #define ANIM_TAG_TERA_CRYSTAL (ANIM_SPRITES_START + 398) #define ANIM_TAG_TERA_SHATTER (ANIM_SPRITES_START + 399) #define ANIM_TAG_DREEPY_SHINY (ANIM_SPRITES_START + 400) +#define ANIM_TAG_BLOOD_MOON (ANIM_SPRITES_START + 401) +#define ANIM_TAG_BEAM (ANIM_SPRITES_START + 402) +#define ANIM_TAG_RED_EXPLOSION (ANIM_SPRITES_START + 403) +#define ANIM_TAG_PURPLE_CHAIN (ANIM_SPRITES_START + 404) // battlers #define ANIM_ATTACKER 0 @@ -523,8 +527,9 @@ #define BG_STEEL_BEAM_PLAYER 79 #define BG_CHLOROBLAST 80 #define BG_RAINBOW 81 +#define BG_SWAMP 82 -// table ids for general animations (gBattleAnims_General) +// table ids for general animations (sBattleAnims_General) #define B_ANIM_STATS_CHANGE 0 #define B_ANIM_SUBSTITUTE_FADE 1 #define B_ANIM_SUBSTITUTE_APPEAR 2 @@ -579,7 +584,9 @@ #define B_ANIM_TERA_ACTIVATE 51 #define B_ANIM_SIMPLE_HEAL 52 -// special animations table (gBattleAnims_Special) +#define NUM_B_ANIMS_GENERAL 53 + +// special animations table (sBattleAnims_Special) #define B_ANIM_LVL_UP 0 #define B_ANIM_SWITCH_OUT_PLAYER_MON 1 #define B_ANIM_SWITCH_OUT_OPPONENT_MON 2 @@ -589,7 +596,9 @@ #define B_ANIM_MON_TO_SUBSTITUTE 6 #define B_ANIM_CRITICAL_CAPTURE_THROW 7 -// status animation table (gBattleAnims_StatusConditions) +#define NUM_B_ANIMS_SPECIAL 8 + +// status animation table (sBattleAnims_StatusConditions) #define B_ANIM_STATUS_PSN 0 #define B_ANIM_STATUS_CONFUSION 1 #define B_ANIM_STATUS_BRN 2 @@ -599,7 +608,8 @@ #define B_ANIM_STATUS_FRZ 6 #define B_ANIM_STATUS_CURSED 7 #define B_ANIM_STATUS_NIGHTMARE 8 -#define B_ANIM_STATUS_WRAPPED 9 // does not actually exist + +#define NUM_B_ANIMS_STATUS 9 // Tasks with return values often assign them to gBattleAnimArgs[7]. #define ARG_RET_ID 7 diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h index 03173c43cf..156eeda613 100644 --- a/include/constants/battle_script_commands.h +++ b/include/constants/battle_script_commands.h @@ -226,14 +226,6 @@ #define VARIOUS_SET_BEAK_BLAST 134 #define VARIOUS_SWAP_SIDE_STATUSES 135 #define VARIOUS_SWAP_STATS 136 -#define VARIOUS_TEATIME_INVUL 137 -#define VARIOUS_TEATIME_TARGETS 138 -#define VARIOUS_TRY_WIND_RIDER_POWER 139 -#define VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES 140 -#define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 141 -#define VARIOUS_STORE_HEALING_WISH 142 -#define VARIOUS_HIT_SWITCH_TARGET_FAILED 143 -#define VARIOUS_TRY_REVIVAL_BLESSING 144 // Cmd_manipulatedamage #define DMG_CHANGE_SIGN 0 diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h index 1e6e2d86d7..9fbb70a223 100644 --- a/include/constants/battle_string_ids.h +++ b/include/constants/battle_string_ids.h @@ -444,274 +444,274 @@ #define STRINGID_WATERSPORTENDS 442 #define STRINGID_GRAVITYENDS 443 #define STRINGID_AQUARINGHEAL 444 -#define STRINGID_AURORAVEILENDS 445 -#define STRINGID_ELECTRICTERRAINENDS 446 -#define STRINGID_MISTYTERRAINENDS 447 -#define STRINGID_PSYCHICTERRAINENDS 448 -#define STRINGID_GRASSYTERRAINENDS 449 -#define STRINGID_TARGETABILITYSTATRAISE 450 -#define STRINGID_TARGETSSTATWASMAXEDOUT 451 -#define STRINGID_ATTACKERABILITYSTATRAISE 452 -#define STRINGID_POISONHEALHPUP 453 -#define STRINGID_BADDREAMSDMG 454 -#define STRINGID_MOLDBREAKERENTERS 455 -#define STRINGID_TERAVOLTENTERS 456 -#define STRINGID_TURBOBLAZEENTERS 457 -#define STRINGID_SLOWSTARTENTERS 458 -#define STRINGID_SLOWSTARTEND 459 -#define STRINGID_SOLARPOWERHPDROP 460 -#define STRINGID_AFTERMATHDMG 461 -#define STRINGID_ANTICIPATIONACTIVATES 462 -#define STRINGID_FOREWARNACTIVATES 463 -#define STRINGID_ICEBODYHPGAIN 464 -#define STRINGID_SNOWWARNINGHAIL 465 -#define STRINGID_FRISKACTIVATES 466 -#define STRINGID_UNNERVEENTERS 467 -#define STRINGID_HARVESTBERRY 468 -#define STRINGID_LASTABILITYRAISEDSTAT 469 -#define STRINGID_MAGICBOUNCEACTIVATES 470 -#define STRINGID_PROTEANTYPECHANGE 471 -#define STRINGID_SYMBIOSISITEMPASS 472 -#define STRINGID_STEALTHROCKDMG 473 -#define STRINGID_TOXICSPIKESABSORBED 474 -#define STRINGID_TOXICSPIKESPOISONED 475 -#define STRINGID_STICKYWEBSWITCHIN 476 -#define STRINGID_HEALINGWISHCAMETRUE 477 -#define STRINGID_HEALINGWISHHEALED 478 -#define STRINGID_LUNARDANCECAMETRUE 479 -#define STRINGID_CUSEDBODYDISABLED 480 -#define STRINGID_ATTACKERACQUIREDABILITY 481 -#define STRINGID_TARGETABILITYSTATLOWER 482 -#define STRINGID_TARGETSTATWONTGOHIGHER 483 -#define STRINGID_PKMNMOVEBOUNCEDABILITY 484 -#define STRINGID_IMPOSTERTRANSFORM 485 -#define STRINGID_ASSAULTVESTDOESNTALLOW 486 -#define STRINGID_GRAVITYPREVENTSUSAGE 487 -#define STRINGID_HEALBLOCKPREVENTSUSAGE 488 -#define STRINGID_NOTDONEYET 489 -#define STRINGID_STICKYWEBUSED 490 -#define STRINGID_QUASHSUCCESS 491 -#define STRINGID_PKMNBLEWAWAYTOXICSPIKES 492 -#define STRINGID_PKMNBLEWAWAYSTICKYWEB 493 -#define STRINGID_PKMNBLEWAWAYSTEALTHROCK 494 -#define STRINGID_IONDELUGEON 495 -#define STRINGID_TOPSYTURVYSWITCHEDSTATS 496 -#define STRINGID_TERRAINBECOMESMISTY 497 -#define STRINGID_TERRAINBECOMESGRASSY 498 -#define STRINGID_TERRAINBECOMESELECTRIC 499 -#define STRINGID_TERRAINBECOMESPSYCHIC 500 -#define STRINGID_TARGETELECTRIFIED 501 -#define STRINGID_MEGAEVOREACTING 502 -#define STRINGID_MEGAEVOEVOLVED 503 -#define STRINGID_DRASTICALLY 504 -#define STRINGID_SEVERELY 505 -#define STRINGID_INFESTATION 506 -#define STRINGID_NOEFFECTONTARGET 507 -#define STRINGID_BURSTINGFLAMESHIT 508 -#define STRINGID_BESTOWITEMGIVING 509 -#define STRINGID_THIRDTYPEADDED 510 -#define STRINGID_FELLFORFEINT 511 -#define STRINGID_POKEMONCANNOTUSEMOVE 512 -#define STRINGID_COVEREDINPOWDER 513 -#define STRINGID_POWDEREXPLODES 514 -#define STRINGID_BELCHCANTSELECT 515 -#define STRINGID_SPECTRALTHIEFSTEAL 516 -#define STRINGID_GRAVITYGROUNDING 517 -#define STRINGID_MISTYTERRAINPREVENTS 518 -#define STRINGID_GRASSYTERRAINHEALS 519 -#define STRINGID_ELECTRICTERRAINPREVENTS 520 -#define STRINGID_PSYCHICTERRAINPREVENTS 521 -#define STRINGID_SAFETYGOGGLESPROTECTED 522 -#define STRINGID_FLOWERVEILPROTECTED 523 -#define STRINGID_SWEETVEILPROTECTED 524 -#define STRINGID_AROMAVEILPROTECTED 525 -#define STRINGID_CELEBRATEMESSAGE 526 -#define STRINGID_USEDINSTRUCTEDMOVE 527 -#define STRINGID_THROATCHOPENDS 528 -#define STRINGID_PKMNCANTUSEMOVETHROATCHOP 529 -#define STRINGID_LASERFOCUS 530 -#define STRINGID_GEMACTIVATES 531 -#define STRINGID_BERRYDMGREDUCES 532 -#define STRINGID_TARGETATEITEM 533 -#define STRINGID_AIRBALLOONFLOAT 534 -#define STRINGID_AIRBALLOONPOP 535 -#define STRINGID_INCINERATEBURN 536 -#define STRINGID_BUGBITE 537 -#define STRINGID_ILLUSIONWOREOFF 538 -#define STRINGID_ATTACKERCUREDTARGETSTATUS 539 -#define STRINGID_ATTACKERLOSTFIRETYPE 540 -#define STRINGID_HEALERCURE 541 -#define STRINGID_SCRIPTINGABILITYSTATRAISE 542 -#define STRINGID_RECEIVERABILITYTAKEOVER 543 -#define STRINGID_PKNMABSORBINGPOWER 544 -#define STRINGID_NOONEWILLBEABLETORUNAWAY 545 -#define STRINGID_DESTINYKNOTACTIVATES 546 -#define STRINGID_CLOAKEDINAFREEZINGLIGHT 547 -#define STRINGID_CLEARAMULETWONTLOWERSTATS 548 -#define STRINGID_FERVENTWISHREACHED 549 -#define STRINGID_AIRLOCKACTIVATES 550 -#define STRINGID_PRESSUREENTERS 551 -#define STRINGID_DARKAURAENTERS 552 -#define STRINGID_FAIRYAURAENTERS 553 -#define STRINGID_AURABREAKENTERS 554 -#define STRINGID_COMATOSEENTERS 555 -#define STRINGID_SCREENCLEANERENTERS 556 -#define STRINGID_FETCHEDPOKEBALL 557 -#define STRINGID_BATTLERABILITYRAISEDSTAT 558 -#define STRINGID_ASANDSTORMKICKEDUP 559 -#define STRINGID_PKMNSWILLPERISHIN3TURNS 560 -#define STRINGID_ABILITYRAISEDSTATDRASTICALLY 561 -#define STRINGID_AURAFLAREDTOLIFE 562 -#define STRINGID_ASONEENTERS 563 -#define STRINGID_CURIOUSMEDICINEENTERS 564 -#define STRINGID_CANACTFASTERTHANKSTO 565 -#define STRINGID_MICLEBERRYACTIVATES 566 -#define STRINGID_PKMNSHOOKOFFTHETAUNT 567 -#define STRINGID_PKMNGOTOVERITSINFATUATION 568 -#define STRINGID_ITEMCANNOTBEREMOVED 569 -#define STRINGID_STICKYBARBTRANSFER 570 -#define STRINGID_PKMNBURNHEALED 571 -#define STRINGID_REDCARDACTIVATE 572 -#define STRINGID_EJECTBUTTONACTIVATE 573 -#define STRINGID_ATKGOTOVERINFATUATION 574 -#define STRINGID_TORMENTEDNOMORE 575 -#define STRINGID_HEALBLOCKEDNOMORE 576 -#define STRINGID_ATTACKERBECAMEFULLYCHARGED 577 -#define STRINGID_ATTACKERBECAMEASHSPECIES 578 -#define STRINGID_EXTREMELYHARSHSUNLIGHT 579 -#define STRINGID_EXTREMESUNLIGHTFADED 580 -#define STRINGID_MOVEEVAPORATEDINTHEHARSHSUNLIGHT 581 -#define STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED 582 -#define STRINGID_HEAVYRAIN 583 -#define STRINGID_HEAVYRAINLIFTED 584 -#define STRINGID_MOVEFIZZLEDOUTINTHEHEAVYRAIN 585 -#define STRINGID_NORELIEFROMHEAVYRAIN 586 -#define STRINGID_MYSTERIOUSAIRCURRENT 587 -#define STRINGID_STRONGWINDSDISSIPATED 588 -#define STRINGID_MYSTERIOUSAIRCURRENTBLOWSON 589 -#define STRINGID_ATTACKWEAKENEDBSTRONGWINDS 590 -#define STRINGID_STUFFCHEEKSCANTSELECT 591 -#define STRINGID_PKMNREVERTEDTOPRIMAL 592 -#define STRINGID_BUTPOKEMONCANTUSETHEMOVE 593 -#define STRINGID_BUTHOOPACANTUSEIT 594 -#define STRINGID_BROKETHROUGHPROTECTION 595 -#define STRINGID_ABILITYALLOWSONLYMOVE 596 -#define STRINGID_SWAPPEDABILITIES 597 -#define STRINGID_PASTELVEILPROTECTED 598 -#define STRINGID_PASTELVEILENTERS 599 -#define STRINGID_BATTLERTYPECHANGEDTO 600 -#define STRINGID_BOTHCANNOLONGERESCAPE 601 -#define STRINGID_CANTESCAPEDUETOUSEDMOVE 602 -#define STRINGID_PKMNBECAMEWEAKERTOFIRE 603 -#define STRINGID_ABOUTTOUSEPOLTERGEIST 604 -#define STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE 605 -#define STRINGID_NEUTRALIZINGGASENTERS 606 -#define STRINGID_NEUTRALIZINGGASOVER 607 -#define STRINGID_TARGETTOOHEAVY 608 -#define STRINGID_PKMNTOOKTARGETHIGH 609 -#define STRINGID_PKMNINSNAPTRAP 610 -#define STRINGID_METEORBEAMCHARGING 611 -#define STRINGID_HEATUPBEAK 612 -#define STRINGID_COURTCHANGE 613 -#define STRINGID_PLAYERLOSTTOENEMYTRAINER 614 -#define STRINGID_PLAYERPAIDPRIZEMONEY 615 -#define STRINGID_ZPOWERSURROUNDS 616 -#define STRINGID_ZMOVEUNLEASHED 617 -#define STRINGID_ZMOVERESETSSTATS 618 -#define STRINGID_ZMOVEALLSTATSUP 619 -#define STRINGID_ZMOVEZBOOSTCRIT 620 -#define STRINGID_ZMOVERESTOREHP 621 -#define STRINGID_ZMOVESTATUP 622 -#define STRINGID_ZMOVEHPTRAP 623 -#define STRINGID_ATTACKEREXPELLEDTHEPOISON 624 -#define STRINGID_ATTACKERSHOOKITSELFAWAKE 625 -#define STRINGID_ATTACKERBROKETHROUGHPARALYSIS 626 -#define STRINGID_ATTACKERHEALEDITSBURN 627 -#define STRINGID_ATTACKERMELTEDTHEICE 628 -#define STRINGID_TARGETTOUGHEDITOUT 629 -#define STRINGID_ATTACKERLOSTELECTRICTYPE 630 -#define STRINGID_ATTACKERSWITCHEDSTATWITHTARGET 631 -#define STRINGID_BEINGHITCHARGEDPKMNWITHPOWER 632 -#define STRINGID_SUNLIGHTACTIVATEDABILITY 633 -#define STRINGID_STATWASHEIGHTENED 634 -#define STRINGID_ELECTRICTERRAINACTIVATEDABILITY 635 -#define STRINGID_ABILITYWEAKENEDSURROUNDINGMONSSTAT 636 -#define STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN 637 -#define STRINGID_PKMNSABILITYPREVENTSABILITY 638 -#define STRINGID_PREPARESHELLTRAP 639 -#define STRINGID_SHELLTRAPDIDNTWORK 640 -#define STRINGID_SPIKESDISAPPEAREDFROMTEAM 641 -#define STRINGID_TOXICSPIKESDISAPPEAREDFROMTEAM 642 -#define STRINGID_STICKYWEBDISAPPEAREDFROMTEAM 643 -#define STRINGID_STEALTHROCKDISAPPEAREDFROMTEAM 644 -#define STRINGID_COULDNTFULLYPROTECT 645 -#define STRINGID_STOCKPILEDEFFECTWOREOFF 646 -#define STRINGID_PKMNREVIVEDREADYTOFIGHT 647 -#define STRINGID_ITEMRESTOREDSPECIESHEALTH 648 -#define STRINGID_ITEMCUREDSPECIESSTATUS 649 -#define STRINGID_ITEMRESTOREDSPECIESPP 650 -#define STRINGID_THUNDERCAGETRAPPED 651 -#define STRINGID_PKMNHURTBYFROSTBITE 652 -#define STRINGID_PKMNGOTFROSTBITE 653 -#define STRINGID_PKMNSITEMHEALEDFROSTBITE 654 -#define STRINGID_ATTACKERHEALEDITSFROSTBITE 655 -#define STRINGID_PKMNFROSTBITEHEALED 656 -#define STRINGID_PKMNFROSTBITEHEALED2 657 -#define STRINGID_PKMNFROSTBITEHEALEDBY 658 -#define STRINGID_MIRRORHERBCOPIED 659 -#define STRINGID_STARTEDSNOW 660 -#define STRINGID_SNOWCONTINUES 661 -#define STRINGID_SNOWSTOPPED 662 -#define STRINGID_SNOWWARNINGSNOW 663 -#define STRINGID_PKMNITEMMELTED 664 -#define STRINGID_ULTRABURSTREACTING 665 -#define STRINGID_ULTRABURSTCOMPLETED 666 -#define STRINGID_TEAMGAINEDEXP 667 -#define STRINGID_CURRENTMOVECANTSELECT 668 -#define STRINGID_TARGETISBEINGSALTCURED 669 -#define STRINGID_TARGETISHURTBYSALTCURE 670 -#define STRINGID_TARGETCOVEREDINSTICKYCANDYSYRUP 671 -#define STRINGID_SHARPSTEELFLOATS 672 -#define STRINGID_SHARPSTEELDMG 673 -#define STRINGID_PKMNBLEWAWAYSHARPSTEEL 674 -#define STRINGID_SHARPSTEELDISAPPEAREDFROMTEAM 675 -#define STRINGID_TEAMTRAPPEDWITHVINES 676 -#define STRINGID_PKMNHURTBYVINES 677 -#define STRINGID_TEAMCAUGHTINVORTEX 678 -#define STRINGID_PKMNHURTBYVORTEX 679 -#define STRINGID_TEAMSURROUNDEDBYFIRE 680 -#define STRINGID_PKMNBURNINGUP 681 -#define STRINGID_TEAMSURROUNDEDBYROCKS 682 -#define STRINGID_PKMNHURTBYROCKSTHROWN 683 -#define STRINGID_MOVEBLOCKEDBYDYNAMAX 684 -#define STRINGID_ZEROTOHEROTRANSFORMATION 685 -#define STRINGID_THETWOMOVESBECOMEONE 686 -#define STRINGID_ARAINBOWAPPEAREDONSIDE 687 -#define STRINGID_THERAINBOWDISAPPEARED 688 -#define STRINGID_WAITINGFORPARTNERSMOVE 689 -#define STRINGID_SEAOFFIREENVELOPEDSIDE 690 -#define STRINGID_HURTBYTHESEAOFFIRE 691 -#define STRINGID_THESEAOFFIREDISAPPEARED 692 -#define STRINGID_SWAMPENVELOPEDSIDE 693 -#define STRINGID_THESWAMPDISAPPEARED 694 -#define STRINGID_PKMNTELLCHILLINGRECEPTIONJOKE 695 -#define STRINGID_HOSPITALITYRESTORATION 696 -#define STRINGID_ELECTROSHOTCHARGING 697 -#define STRINGID_ITEMWASUSEDUP 698 -#define STRINGID_ATTACKERLOSTITSTYPE 699 -#define STRINGID_SHEDITSTAIL 700 -#define STRINGID_CLOAKEDINAHARSHLIGHT 701 -#define STRINGID_SUPERSWEETAROMAWAFTS 702 -#define STRINGID_DIMENSIONSWERETWISTED 703 -#define STRINGID_BIZARREARENACREATED 704 -#define STRINGID_BIZARREAREACREATED 705 -#define STRINGID_TIDYINGUPCOMPLETE 706 -#define STRINGID_PKMNTERASTALLIZEDINTO 707 -#define STRINGID_BOOSTERENERGYACTIVATES 708 -#define STRINGID_FOGCREPTUP 709 -#define STRINGID_FOGISDEEP 710 -#define STRINGID_FOGLIFTED 711 -#define STRINGID_PKMNMADESHELLGLEAM 712 +#define STRINGID_ELECTRICTERRAINENDS 445 +#define STRINGID_MISTYTERRAINENDS 446 +#define STRINGID_PSYCHICTERRAINENDS 447 +#define STRINGID_GRASSYTERRAINENDS 448 +#define STRINGID_TARGETABILITYSTATRAISE 449 +#define STRINGID_TARGETSSTATWASMAXEDOUT 450 +#define STRINGID_ATTACKERABILITYSTATRAISE 451 +#define STRINGID_POISONHEALHPUP 452 +#define STRINGID_BADDREAMSDMG 453 +#define STRINGID_MOLDBREAKERENTERS 454 +#define STRINGID_TERAVOLTENTERS 455 +#define STRINGID_TURBOBLAZEENTERS 456 +#define STRINGID_SLOWSTARTENTERS 457 +#define STRINGID_SLOWSTARTEND 458 +#define STRINGID_SOLARPOWERHPDROP 459 +#define STRINGID_AFTERMATHDMG 460 +#define STRINGID_ANTICIPATIONACTIVATES 461 +#define STRINGID_FOREWARNACTIVATES 462 +#define STRINGID_ICEBODYHPGAIN 463 +#define STRINGID_SNOWWARNINGHAIL 464 +#define STRINGID_FRISKACTIVATES 465 +#define STRINGID_UNNERVEENTERS 466 +#define STRINGID_HARVESTBERRY 467 +#define STRINGID_LASTABILITYRAISEDSTAT 468 +#define STRINGID_MAGICBOUNCEACTIVATES 469 +#define STRINGID_PROTEANTYPECHANGE 470 +#define STRINGID_SYMBIOSISITEMPASS 471 +#define STRINGID_STEALTHROCKDMG 472 +#define STRINGID_TOXICSPIKESABSORBED 473 +#define STRINGID_TOXICSPIKESPOISONED 474 +#define STRINGID_STICKYWEBSWITCHIN 475 +#define STRINGID_HEALINGWISHCAMETRUE 476 +#define STRINGID_HEALINGWISHHEALED 477 +#define STRINGID_LUNARDANCECAMETRUE 478 +#define STRINGID_CUSEDBODYDISABLED 479 +#define STRINGID_ATTACKERACQUIREDABILITY 480 +#define STRINGID_TARGETABILITYSTATLOWER 481 +#define STRINGID_TARGETSTATWONTGOHIGHER 482 +#define STRINGID_PKMNMOVEBOUNCEDABILITY 483 +#define STRINGID_IMPOSTERTRANSFORM 484 +#define STRINGID_ASSAULTVESTDOESNTALLOW 485 +#define STRINGID_GRAVITYPREVENTSUSAGE 486 +#define STRINGID_HEALBLOCKPREVENTSUSAGE 487 +#define STRINGID_NOTDONEYET 488 +#define STRINGID_STICKYWEBUSED 489 +#define STRINGID_QUASHSUCCESS 490 +#define STRINGID_PKMNBLEWAWAYTOXICSPIKES 491 +#define STRINGID_PKMNBLEWAWAYSTICKYWEB 492 +#define STRINGID_PKMNBLEWAWAYSTEALTHROCK 493 +#define STRINGID_IONDELUGEON 494 +#define STRINGID_TOPSYTURVYSWITCHEDSTATS 495 +#define STRINGID_TERRAINBECOMESMISTY 496 +#define STRINGID_TERRAINBECOMESGRASSY 497 +#define STRINGID_TERRAINBECOMESELECTRIC 498 +#define STRINGID_TERRAINBECOMESPSYCHIC 499 +#define STRINGID_TARGETELECTRIFIED 500 +#define STRINGID_MEGAEVOREACTING 501 +#define STRINGID_MEGAEVOEVOLVED 502 +#define STRINGID_DRASTICALLY 503 +#define STRINGID_SEVERELY 504 +#define STRINGID_INFESTATION 505 +#define STRINGID_NOEFFECTONTARGET 506 +#define STRINGID_BURSTINGFLAMESHIT 507 +#define STRINGID_BESTOWITEMGIVING 508 +#define STRINGID_THIRDTYPEADDED 509 +#define STRINGID_FELLFORFEINT 510 +#define STRINGID_POKEMONCANNOTUSEMOVE 511 +#define STRINGID_COVEREDINPOWDER 512 +#define STRINGID_POWDEREXPLODES 513 +#define STRINGID_BELCHCANTSELECT 514 +#define STRINGID_SPECTRALTHIEFSTEAL 515 +#define STRINGID_GRAVITYGROUNDING 516 +#define STRINGID_MISTYTERRAINPREVENTS 517 +#define STRINGID_GRASSYTERRAINHEALS 518 +#define STRINGID_ELECTRICTERRAINPREVENTS 519 +#define STRINGID_PSYCHICTERRAINPREVENTS 520 +#define STRINGID_SAFETYGOGGLESPROTECTED 521 +#define STRINGID_FLOWERVEILPROTECTED 522 +#define STRINGID_SWEETVEILPROTECTED 523 +#define STRINGID_AROMAVEILPROTECTED 524 +#define STRINGID_CELEBRATEMESSAGE 525 +#define STRINGID_USEDINSTRUCTEDMOVE 526 +#define STRINGID_THROATCHOPENDS 527 +#define STRINGID_PKMNCANTUSEMOVETHROATCHOP 528 +#define STRINGID_LASERFOCUS 529 +#define STRINGID_GEMACTIVATES 530 +#define STRINGID_BERRYDMGREDUCES 531 +#define STRINGID_TARGETATEITEM 532 +#define STRINGID_AIRBALLOONFLOAT 533 +#define STRINGID_AIRBALLOONPOP 534 +#define STRINGID_INCINERATEBURN 535 +#define STRINGID_BUGBITE 536 +#define STRINGID_ILLUSIONWOREOFF 537 +#define STRINGID_ATTACKERCUREDTARGETSTATUS 538 +#define STRINGID_ATTACKERLOSTFIRETYPE 539 +#define STRINGID_HEALERCURE 540 +#define STRINGID_SCRIPTINGABILITYSTATRAISE 541 +#define STRINGID_RECEIVERABILITYTAKEOVER 542 +#define STRINGID_PKNMABSORBINGPOWER 543 +#define STRINGID_NOONEWILLBEABLETORUNAWAY 544 +#define STRINGID_DESTINYKNOTACTIVATES 545 +#define STRINGID_CLOAKEDINAFREEZINGLIGHT 546 +#define STRINGID_CLEARAMULETWONTLOWERSTATS 547 +#define STRINGID_FERVENTWISHREACHED 548 +#define STRINGID_AIRLOCKACTIVATES 549 +#define STRINGID_PRESSUREENTERS 550 +#define STRINGID_DARKAURAENTERS 551 +#define STRINGID_FAIRYAURAENTERS 552 +#define STRINGID_AURABREAKENTERS 553 +#define STRINGID_COMATOSEENTERS 554 +#define STRINGID_SCREENCLEANERENTERS 555 +#define STRINGID_FETCHEDPOKEBALL 556 +#define STRINGID_BATTLERABILITYRAISEDSTAT 557 +#define STRINGID_ASANDSTORMKICKEDUP 558 +#define STRINGID_PKMNSWILLPERISHIN3TURNS 559 +#define STRINGID_ABILITYRAISEDSTATDRASTICALLY 560 +#define STRINGID_AURAFLAREDTOLIFE 561 +#define STRINGID_ASONEENTERS 562 +#define STRINGID_CURIOUSMEDICINEENTERS 563 +#define STRINGID_CANACTFASTERTHANKSTO 564 +#define STRINGID_MICLEBERRYACTIVATES 565 +#define STRINGID_PKMNSHOOKOFFTHETAUNT 566 +#define STRINGID_PKMNGOTOVERITSINFATUATION 567 +#define STRINGID_ITEMCANNOTBEREMOVED 568 +#define STRINGID_STICKYBARBTRANSFER 569 +#define STRINGID_PKMNBURNHEALED 570 +#define STRINGID_REDCARDACTIVATE 571 +#define STRINGID_EJECTBUTTONACTIVATE 572 +#define STRINGID_ATKGOTOVERINFATUATION 573 +#define STRINGID_TORMENTEDNOMORE 574 +#define STRINGID_HEALBLOCKEDNOMORE 575 +#define STRINGID_ATTACKERBECAMEFULLYCHARGED 576 +#define STRINGID_ATTACKERBECAMEASHSPECIES 577 +#define STRINGID_EXTREMELYHARSHSUNLIGHT 578 +#define STRINGID_EXTREMESUNLIGHTFADED 579 +#define STRINGID_MOVEEVAPORATEDINTHEHARSHSUNLIGHT 580 +#define STRINGID_EXTREMELYHARSHSUNLIGHTWASNOTLESSENED 581 +#define STRINGID_HEAVYRAIN 582 +#define STRINGID_HEAVYRAINLIFTED 583 +#define STRINGID_MOVEFIZZLEDOUTINTHEHEAVYRAIN 584 +#define STRINGID_NORELIEFROMHEAVYRAIN 585 +#define STRINGID_MYSTERIOUSAIRCURRENT 586 +#define STRINGID_STRONGWINDSDISSIPATED 587 +#define STRINGID_MYSTERIOUSAIRCURRENTBLOWSON 588 +#define STRINGID_ATTACKWEAKENEDBSTRONGWINDS 589 +#define STRINGID_STUFFCHEEKSCANTSELECT 590 +#define STRINGID_PKMNREVERTEDTOPRIMAL 591 +#define STRINGID_BUTPOKEMONCANTUSETHEMOVE 592 +#define STRINGID_BUTHOOPACANTUSEIT 593 +#define STRINGID_BROKETHROUGHPROTECTION 594 +#define STRINGID_ABILITYALLOWSONLYMOVE 595 +#define STRINGID_SWAPPEDABILITIES 596 +#define STRINGID_PASTELVEILPROTECTED 597 +#define STRINGID_PASTELVEILENTERS 598 +#define STRINGID_BATTLERTYPECHANGEDTO 599 +#define STRINGID_BOTHCANNOLONGERESCAPE 600 +#define STRINGID_CANTESCAPEDUETOUSEDMOVE 601 +#define STRINGID_PKMNBECAMEWEAKERTOFIRE 602 +#define STRINGID_ABOUTTOUSEPOLTERGEIST 603 +#define STRINGID_CANTESCAPEBECAUSEOFCURRENTMOVE 604 +#define STRINGID_NEUTRALIZINGGASENTERS 605 +#define STRINGID_NEUTRALIZINGGASOVER 606 +#define STRINGID_TARGETTOOHEAVY 607 +#define STRINGID_PKMNTOOKTARGETHIGH 608 +#define STRINGID_PKMNINSNAPTRAP 609 +#define STRINGID_METEORBEAMCHARGING 610 +#define STRINGID_HEATUPBEAK 611 +#define STRINGID_COURTCHANGE 612 +#define STRINGID_PLAYERLOSTTOENEMYTRAINER 613 +#define STRINGID_PLAYERPAIDPRIZEMONEY 614 +#define STRINGID_ZPOWERSURROUNDS 615 +#define STRINGID_ZMOVEUNLEASHED 616 +#define STRINGID_ZMOVERESETSSTATS 617 +#define STRINGID_ZMOVEALLSTATSUP 618 +#define STRINGID_ZMOVEZBOOSTCRIT 619 +#define STRINGID_ZMOVERESTOREHP 620 +#define STRINGID_ZMOVESTATUP 621 +#define STRINGID_ZMOVEHPTRAP 622 +#define STRINGID_ATTACKEREXPELLEDTHEPOISON 623 +#define STRINGID_ATTACKERSHOOKITSELFAWAKE 624 +#define STRINGID_ATTACKERBROKETHROUGHPARALYSIS 625 +#define STRINGID_ATTACKERHEALEDITSBURN 626 +#define STRINGID_ATTACKERMELTEDTHEICE 627 +#define STRINGID_TARGETTOUGHEDITOUT 628 +#define STRINGID_ATTACKERLOSTELECTRICTYPE 629 +#define STRINGID_ATTACKERSWITCHEDSTATWITHTARGET 630 +#define STRINGID_BEINGHITCHARGEDPKMNWITHPOWER 631 +#define STRINGID_SUNLIGHTACTIVATEDABILITY 632 +#define STRINGID_STATWASHEIGHTENED 633 +#define STRINGID_ELECTRICTERRAINACTIVATEDABILITY 634 +#define STRINGID_ABILITYWEAKENEDSURROUNDINGMONSSTAT 635 +#define STRINGID_ATTACKERGAINEDSTRENGTHFROMTHEFALLEN 636 +#define STRINGID_PKMNSABILITYPREVENTSABILITY 637 +#define STRINGID_PREPARESHELLTRAP 638 +#define STRINGID_SHELLTRAPDIDNTWORK 639 +#define STRINGID_SPIKESDISAPPEAREDFROMTEAM 640 +#define STRINGID_TOXICSPIKESDISAPPEAREDFROMTEAM 641 +#define STRINGID_STICKYWEBDISAPPEAREDFROMTEAM 642 +#define STRINGID_STEALTHROCKDISAPPEAREDFROMTEAM 643 +#define STRINGID_COULDNTFULLYPROTECT 644 +#define STRINGID_STOCKPILEDEFFECTWOREOFF 645 +#define STRINGID_PKMNREVIVEDREADYTOFIGHT 646 +#define STRINGID_ITEMRESTOREDSPECIESHEALTH 647 +#define STRINGID_ITEMCUREDSPECIESSTATUS 648 +#define STRINGID_ITEMRESTOREDSPECIESPP 649 +#define STRINGID_THUNDERCAGETRAPPED 650 +#define STRINGID_PKMNHURTBYFROSTBITE 651 +#define STRINGID_PKMNGOTFROSTBITE 652 +#define STRINGID_PKMNSITEMHEALEDFROSTBITE 653 +#define STRINGID_ATTACKERHEALEDITSFROSTBITE 654 +#define STRINGID_PKMNFROSTBITEHEALED 655 +#define STRINGID_PKMNFROSTBITEHEALED2 656 +#define STRINGID_PKMNFROSTBITEHEALEDBY 657 +#define STRINGID_MIRRORHERBCOPIED 658 +#define STRINGID_STARTEDSNOW 659 +#define STRINGID_SNOWCONTINUES 660 +#define STRINGID_SNOWSTOPPED 661 +#define STRINGID_SNOWWARNINGSNOW 662 +#define STRINGID_PKMNITEMMELTED 663 +#define STRINGID_ULTRABURSTREACTING 664 +#define STRINGID_ULTRABURSTCOMPLETED 665 +#define STRINGID_TEAMGAINEDEXP 666 +#define STRINGID_CURRENTMOVECANTSELECT 667 +#define STRINGID_TARGETISBEINGSALTCURED 668 +#define STRINGID_TARGETISHURTBYSALTCURE 669 +#define STRINGID_TARGETCOVEREDINSTICKYCANDYSYRUP 670 +#define STRINGID_SHARPSTEELFLOATS 671 +#define STRINGID_SHARPSTEELDMG 672 +#define STRINGID_PKMNBLEWAWAYSHARPSTEEL 673 +#define STRINGID_SHARPSTEELDISAPPEAREDFROMTEAM 674 +#define STRINGID_TEAMTRAPPEDWITHVINES 675 +#define STRINGID_PKMNHURTBYVINES 676 +#define STRINGID_TEAMCAUGHTINVORTEX 677 +#define STRINGID_PKMNHURTBYVORTEX 678 +#define STRINGID_TEAMSURROUNDEDBYFIRE 679 +#define STRINGID_PKMNBURNINGUP 680 +#define STRINGID_TEAMSURROUNDEDBYROCKS 681 +#define STRINGID_PKMNHURTBYROCKSTHROWN 682 +#define STRINGID_MOVEBLOCKEDBYDYNAMAX 683 +#define STRINGID_ZEROTOHEROTRANSFORMATION 684 +#define STRINGID_THETWOMOVESBECOMEONE 685 +#define STRINGID_ARAINBOWAPPEAREDONSIDE 686 +#define STRINGID_THERAINBOWDISAPPEARED 687 +#define STRINGID_WAITINGFORPARTNERSMOVE 688 +#define STRINGID_SEAOFFIREENVELOPEDSIDE 689 +#define STRINGID_HURTBYTHESEAOFFIRE 690 +#define STRINGID_THESEAOFFIREDISAPPEARED 691 +#define STRINGID_SWAMPENVELOPEDSIDE 692 +#define STRINGID_THESWAMPDISAPPEARED 693 +#define STRINGID_PKMNTELLCHILLINGRECEPTIONJOKE 694 +#define STRINGID_HOSPITALITYRESTORATION 695 +#define STRINGID_ELECTROSHOTCHARGING 696 +#define STRINGID_ITEMWASUSEDUP 697 +#define STRINGID_ATTACKERLOSTITSTYPE 698 +#define STRINGID_SHEDITSTAIL 699 +#define STRINGID_CLOAKEDINAHARSHLIGHT 700 +#define STRINGID_SUPERSWEETAROMAWAFTS 701 +#define STRINGID_DIMENSIONSWERETWISTED 702 +#define STRINGID_BIZARREARENACREATED 703 +#define STRINGID_BIZARREAREACREATED 704 +#define STRINGID_TIDYINGUPCOMPLETE 705 +#define STRINGID_PKMNTERASTALLIZEDINTO 706 +#define STRINGID_BOOSTERENERGYACTIVATES 707 +#define STRINGID_FOGCREPTUP 708 +#define STRINGID_FOGISDEEP 709 +#define STRINGID_FOGLIFTED 710 +#define STRINGID_PKMNMADESHELLGLEAM 711 +#define STRINGID_FICKLEBEAMDOUBLED 712 #define BATTLESTRINGS_COUNT 713 diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h index e2ac7f7920..07853a69a8 100644 --- a/include/constants/event_objects.h +++ b/include/constants/event_objects.h @@ -271,7 +271,7 @@ #define OBJ_EVENT_GFX_VAR_F (OBJ_EVENT_GFX_VARS + 0xF) #define OBJ_EVENT_GFX_MON_BASE 0x200 // 512 -#define OBJ_EVENT_GFX_SPECIES_BITS 11 +#define OBJ_EVENT_GFX_SPECIES_BITS 12 // This will need to be updated when NUM_SPECIES is > ~3.5k #define OBJ_EVENT_GFX_SPECIES_MASK ((1 << OBJ_EVENT_GFX_SPECIES_BITS) - 1) // Used to call a specific species' follower graphics. Useful for static encounters. @@ -281,10 +281,12 @@ #define OW_SPECIES(x) (((x)->graphicsId & OBJ_EVENT_GFX_SPECIES_MASK) - OBJ_EVENT_GFX_MON_BASE) #define OW_FORM(x) ((x)->graphicsId >> OBJ_EVENT_GFX_SPECIES_BITS) -#define SHADOW_SIZE_S 0 -#define SHADOW_SIZE_M 1 -#define SHADOW_SIZE_L 2 -#define SHADOW_SIZE_NONE 3 // Originally SHADOW_SIZE_XL, which went unused due to shadowSize in ObjectEventGraphicsInfo being only 2 bits. +#define SHADOW_SIZE_S 0 +#define SHADOW_SIZE_M 1 +#define SHADOW_SIZE_L 2 +#define SHADOW_SIZE_NONE 3 // Originally SHADOW_SIZE_XL, which went unused due to shadowSize in ObjectEventGraphicsInfo being only 2 bits. + +#define SHADOW_SIZE_XL_BATTLE_ONLY SHADOW_SIZE_NONE // Battle-only definition for XL shadow size. #define F_INANIMATE (1 << 6) #define F_DISABLE_REFLECTION_PALETTE_LOAD (1 << 7) diff --git a/include/constants/global.h b/include/constants/global.h index 6d2fbe81c7..a4623c9d8b 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -8,6 +8,7 @@ #include "config/level_caps.h" #include "config/pokemon.h" #include "config/overworld.h" +#include "config/ev_caps.h" // Invalid Versions show as "----------" in Gen 4 and Gen 5's summary screen. // In Gens 6 and 7, invalid versions instead show "a distant land" in the summary screen. @@ -103,7 +104,7 @@ #define CONTEST_CATEGORIES_COUNT 5 // string lengths -#define ITEM_NAME_LENGTH ((I_EXPANDED_ITEM_NAMES == TRUE) ? 20 : 14) +#define ITEM_NAME_LENGTH 20 #define ITEM_NAME_PLURAL_LENGTH ITEM_NAME_LENGTH + 2 // 2 is used for the instance where a word's suffix becomes y->ies #define POKEMON_NAME_LENGTH 12 #define VANILLA_POKEMON_NAME_LENGTH 10 @@ -111,15 +112,15 @@ #define PLAYER_NAME_LENGTH 7 #define MAIL_WORDS_COUNT 9 #define EASY_CHAT_BATTLE_WORDS_COUNT 6 -#define MOVE_NAME_LENGTH ((B_EXPANDED_MOVE_NAMES == TRUE) ? 16 : 12) +#define MOVE_NAME_LENGTH 16 #define NUM_QUESTIONNAIRE_WORDS 4 #define QUIZ_QUESTION_LEN 9 #define WONDER_CARD_TEXT_LENGTH 40 #define WONDER_NEWS_TEXT_LENGTH 40 #define WONDER_CARD_BODY_TEXT_LINES 4 #define WONDER_NEWS_BODY_TEXT_LINES 10 -#define TYPE_NAME_LENGTH ((B_EXPANDED_TYPE_NAMES == TRUE) ? 8 : 6) -#define ABILITY_NAME_LENGTH ((B_EXPANDED_ABILITY_NAMES == TRUE) ? 16 : 12) +#define TYPE_NAME_LENGTH 8 +#define ABILITY_NAME_LENGTH 16 #define TRAINER_NAME_LENGTH 10 #define MAX_STAMP_CARD_STAMPS 7 diff --git a/include/constants/metatile_behaviors.h b/include/constants/metatile_behaviors.h index 40ee0aab1a..73786bb3c3 100755 --- a/include/constants/metatile_behaviors.h +++ b/include/constants/metatile_behaviors.h @@ -30,9 +30,9 @@ #define MB_UNUSED_SOOTOPOLIS_DEEP_WATER_2 0x1A #define MB_STAIRS_OUTSIDE_ABANDONED_SHIP 0x1B #define MB_SHOAL_CAVE_ENTRANCE 0x1C -#define MB_UNUSED_1D 0x1D -#define MB_UNUSED_1E 0x1E -#define MB_UNUSED_1F 0x1F +#define MB_SIGNPOST 0x1D +#define MB_POKEMON_CENTER_SIGN 0x1E +#define MB_POKEMART_SIGN 0x1F #define MB_ICE 0x20 #define MB_SAND 0x21 #define MB_SEAWEED 0x22 diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 8095367c97..9179d628b2 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -243,71 +243,74 @@ #define F_SUMMARY_SCREEN_FLIP_SPRITE 0x80 -// Evolution types #define EVOLUTIONS_END 0xFFFF // Not an actual evolution, used to mark the end of an evolution array. #define EVO_NONE 0xFFFE // Not an actual evolution, used to generate offspring that can't evolve into the specified species, like regional forms. -#define EVO_FRIENDSHIP 1 // Pokémon levels up with friendship ≥ 220 -#define EVO_FRIENDSHIP_DAY 2 // Pokémon levels up during the day with friendship ≥ 220 -#define EVO_FRIENDSHIP_NIGHT 3 // Pokémon levels up at night with friendship ≥ 220 -#define EVO_LEVEL 4 // Pokémon reaches the specified level -#define EVO_TRADE 5 // Pokémon is traded -#define EVO_TRADE_ITEM 6 // Pokémon is traded while it's holding the specified item -#define EVO_ITEM 7 // specified item is used on Pokémon -#define EVO_LEVEL_ATK_GT_DEF 8 // Pokémon reaches the specified level with attack > defense -#define EVO_LEVEL_ATK_EQ_DEF 9 // Pokémon reaches the specified level with attack = defense -#define EVO_LEVEL_ATK_LT_DEF 10 // Pokémon reaches the specified level with attack < defense -#define EVO_LEVEL_SILCOON 11 // Pokémon reaches the specified level with a Silcoon personality value -#define EVO_LEVEL_CASCOON 12 // Pokémon reaches the specified level with a Cascoon personality value -#define EVO_LEVEL_NINJASK 13 // Pokémon reaches the specified level (special value for Ninjask) -#define EVO_LEVEL_SHEDINJA 14 // Pokémon reaches the specified level (special value for Shedinja) -#define EVO_BEAUTY 15 // Pokémon levels up with beauty ≥ specified value -#define EVO_LEVEL_FEMALE 16 // Pokémon reaches the specified level, is female -#define EVO_LEVEL_MALE 17 // Pokémon reaches the specified level, is male -#define EVO_LEVEL_NIGHT 18 // Pokémon reaches the specified level, is night -#define EVO_LEVEL_DAY 19 // Pokémon reaches the specified level, is day -#define EVO_LEVEL_DUSK 20 // Pokémon reaches the specified level, is dusk (5-6 P.M) -#define EVO_ITEM_HOLD_DAY 21 // Pokémon levels up, holds specified item at day -#define EVO_ITEM_HOLD_NIGHT 22 // Pokémon levels up, holds specified item at night -#define EVO_MOVE 23 // Pokémon levels up, knows specified move -#define EVO_FRIENDSHIP_MOVE_TYPE 24 // Pokémon levels up with friendship ≥ 220, knows move with specified type -#define EVO_MAPSEC 25 // Pokémon levels up on specified mapsec -#define EVO_ITEM_MALE 26 // specified item is used on a male Pokémon -#define EVO_ITEM_FEMALE 27 // specified item is used on a female Pokémon -#define EVO_LEVEL_RAIN 28 // Pokémon reaches the specified level during rain in the overworld -#define EVO_SPECIFIC_MON_IN_PARTY 29 // Pokémon levels up with a specified Pokémon in party -#define EVO_LEVEL_DARK_TYPE_MON_IN_PARTY 30 // Pokémon reaches the specified level with a Dark Type Pokémon in party -#define EVO_TRADE_SPECIFIC_MON 31 // Pokémon is traded for a specified Pokémon -#define EVO_SPECIFIC_MAP 32 // Pokémon levels up on specified map -#define EVO_LEVEL_NATURE_AMPED 33 // Pokémon reaches the specified level, it has a Hardy, Brave, Adamant, Naughty, Docile, Impish, Lax, Hasty, Jolly, Naive, Rash, Sassy, or Quirky nature. -#define EVO_LEVEL_NATURE_LOW_KEY 34 // Pokémon reaches the specified level, it has a Lonely, Bold, Relaxed, Timid, Serious, Modest, Mild, Quiet, Bashful, Calm, Gentle, or Careful nature. -#define EVO_CRITICAL_HITS 35 // Pokémon performs specified number of critical hits in one battle -#define EVO_SCRIPT_TRIGGER_DMG 36 // Pokémon has specified HP below max, then player interacts trigger -#define EVO_DARK_SCROLL 37 // interacts with Scroll of Darkness -#define EVO_WATER_SCROLL 38 // interacts with Scroll of Waters -#define EVO_ITEM_NIGHT 39 // specified item is used on Pokémon, is night -#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 in battle with a personality value with a modulus of 0 -#define EVO_LEVEL_FAMILY_OF_FOUR 46 // Pokémon reaches the specified level in battle with a personality value with a modulus of 1-99 -#define EVO_USE_MOVE_TWENTY_TIMES 47 // Pokémon levels up after having used a move for at least 20 times -#define EVO_RECOIL_DAMAGE_MALE 48 // Pokémon levels up after having suffered specified amount of non-fainting recoil damage as a male -#define EVO_RECOIL_DAMAGE_FEMALE 49 // Pokémon levels up after having suffered specified amount of non-fainting recoil damage as a female -#define EVO_ITEM_COUNT_999 50 // Pokémon levels up after trainer has collected 999 of a specific item -#define EVO_DEFEAT_THREE_WITH_ITEM 51 // Pokémon levels up after having defeat 3 Pokémon of the same species holding the specified item -#define EVO_OVERWORLD_STEPS 52 // Pokémon levels up after having taken a specific amount of steps in the overworld (or as the party lead if OW_FOLLOWERS_ENABLED is FALSE) without switching -// Evolution 'modes,' for GetEvolutionTargetSpecies -#define EVO_MODE_NORMAL 0 -#define EVO_MODE_CANT_STOP 1 -#define EVO_MODE_TRADE 2 -#define EVO_MODE_ITEM_USE 3 -#define EVO_MODE_ITEM_CHECK 4 // If an Everstone is being held, still want to show that the stone *could* be used on that Pokémon to evolve -#define EVO_MODE_BATTLE_SPECIAL 5 -#define EVO_MODE_OVERWORLD_SPECIAL 6 -#define EVO_MODE_BATTLE_ONLY 7 // This mode is only used in battles to support Tandemaus' unique requirement +enum EvolutionMethods { + EVO_FRIENDSHIP, // Pokémon levels up with friendship ≥ 220 + EVO_FRIENDSHIP_DAY, // Pokémon levels up during the day with friendship ≥ 220 + EVO_FRIENDSHIP_NIGHT, // Pokémon levels up at night with friendship ≥ 220 + EVO_LEVEL, // Pokémon reaches the specified level + EVO_TRADE, // Pokémon is traded + EVO_TRADE_ITEM, // Pokémon is traded while it's holding the specified item + EVO_ITEM, // specified item is used on Pokémon + EVO_LEVEL_ATK_GT_DEF, // Pokémon reaches the specified level with attack > defense + EVO_LEVEL_ATK_EQ_DEF, // Pokémon reaches the specified level with attack = defense + EVO_LEVEL_ATK_LT_DEF, // Pokémon reaches the specified level with attack < defense + EVO_LEVEL_SILCOON, // Pokémon reaches the specified level with a Silcoon personality value + EVO_LEVEL_CASCOON, // Pokémon reaches the specified level with a Cascoon personality value + EVO_LEVEL_NINJASK, // Pokémon reaches the specified level (special value for Ninjask) + EVO_LEVEL_SHEDINJA, // Pokémon reaches the specified level (special value for Shedinja) + EVO_BEAUTY, // Pokémon levels up with beauty ≥ specified value + EVO_LEVEL_FEMALE, // Pokémon reaches the specified level, is female + EVO_LEVEL_MALE, // Pokémon reaches the specified level, is male + EVO_LEVEL_NIGHT, // Pokémon reaches the specified level, is night + EVO_LEVEL_DAY, // Pokémon reaches the specified level, is day + EVO_LEVEL_DUSK, // Pokémon reaches the specified level, is dusk (5-6 P.M) + EVO_ITEM_HOLD_DAY, // Pokémon levels up, holds specified item at day + EVO_ITEM_HOLD_NIGHT, // Pokémon levels up, holds specified item at night + EVO_MOVE, // Pokémon levels up, knows specified move + EVO_FRIENDSHIP_MOVE_TYPE, // Pokémon levels up with friendship ≥ 220, knows move with specified type + EVO_MAPSEC, // Pokémon levels up on specified mapsec + EVO_ITEM_MALE, // specified item is used on a male Pokémon + EVO_ITEM_FEMALE, // specified item is used on a female Pokémon + EVO_LEVEL_RAIN, // Pokémon reaches the specified level during rain in the overworld + EVO_SPECIFIC_MON_IN_PARTY, // Pokémon levels up with a specified Pokémon in party + EVO_LEVEL_DARK_TYPE_MON_IN_PARTY, // Pokémon reaches the specified level with a Dark Type Pokémon in party + EVO_TRADE_SPECIFIC_MON, // Pokémon is traded for a specified Pokémon + EVO_SPECIFIC_MAP, // Pokémon levels up on specified map + EVO_LEVEL_NATURE_AMPED, // Pokémon reaches the specified level, it has a Hardy, Brave, Adamant, Naughty, Docile, Impish, Lax, Hasty, Jolly, Naive, Rash, Sassy, or Quirky nature. + EVO_LEVEL_NATURE_LOW_KEY, // Pokémon reaches the specified level, it has a Lonely, Bold, Relaxed, Timid, Serious, Modest, Mild, Quiet, Bashful, Calm, Gentle, or Careful nature. + EVO_CRITICAL_HITS, // Pokémon performs specified number of critical hits in one battle + EVO_SCRIPT_TRIGGER_DMG, // Pokémon has specified HP below max, then player interacts trigger + EVO_DARK_SCROLL, // interacts with Scroll of Darkness + EVO_WATER_SCROLL, // interacts with Scroll of Waters + EVO_ITEM_NIGHT, // specified item is used on Pokémon, is night + EVO_ITEM_DAY, // specified item is used on Pokémon, is day + EVO_ITEM_HOLD, // Pokémon levels up, holds specified item + EVO_LEVEL_FOG, // Pokémon reaches the specified level during fog in the overworld + EVO_MOVE_TWO_SEGMENT, // Pokémon levels up, knows specified move, has a personality value with a modulus of 0 + EVO_MOVE_THREE_SEGMENT, // Pokémon levels up, knows specified move, has a personality value with a modulus of 1-99 + EVO_LEVEL_FAMILY_OF_THREE, // Pokémon reaches the specified level in battle with a personality value with a modulus of 0 + EVO_LEVEL_FAMILY_OF_FOUR, // Pokémon reaches the specified level in battle with a personality value with a modulus of 1-99 + EVO_USE_MOVE_TWENTY_TIMES, // Pokémon levels up after having used a move for at least 20 times + EVO_RECOIL_DAMAGE_MALE, // Pokémon levels up after having suffered specified amount of non-fainting recoil damage as a male + EVO_RECOIL_DAMAGE_FEMALE, // Pokémon levels up after having suffered specified amount of non-fainting recoil damage as a female + EVO_ITEM_COUNT_999, // Pokémon levels up after trainer has collected 999 of a specific item + EVO_DEFEAT_THREE_WITH_ITEM, // Pokémon levels up after having defeat 3 Pokémon of the same species holding the specified item + EVO_OVERWORLD_STEPS, // Pokémon levels up after having taken a specific amount of steps in the overworld +}; + +enum EvolutionMode { + EVO_MODE_NORMAL, + EVO_MODE_CANT_STOP, + EVO_MODE_TRADE, + EVO_MODE_ITEM_USE, + EVO_MODE_ITEM_CHECK, // If an Everstone is being held, still want to show that the stone *could* be used on that Pokémon to evolve + EVO_MODE_BATTLE_SPECIAL, + EVO_MODE_OVERWORLD_SPECIAL, + EVO_MODE_BATTLE_ONLY, // This mode is only used in battles to support Tandemaus' unique requirement +}; #define MON_PIC_WIDTH 64 #define MON_PIC_HEIGHT 64 @@ -332,6 +335,10 @@ // Used as a signal for givemon to generate a default ability by personality. #define NUM_ABILITY_PERSONALITY 0xFF +#if P_LEGENDARY_PERFECT_IVS >= GEN_6 #define LEGENDARY_PERFECT_IV_COUNT 3 +#else +#define LEGENDARY_PERFECT_IV_COUNT 0 +#endif #endif // GUARD_CONSTANTS_POKEMON_H diff --git a/include/constants/species.h b/include/constants/species.h index 895e444d51..a0cce51398 100644 --- a/include/constants/species.h +++ b/include/constants/species.h @@ -1736,6 +1736,7 @@ #define SPECIES_SANDSHREW_ALOLA SPECIES_SANDSHREW_ALOLAN #define SPECIES_SANDSLASH_ALOLA SPECIES_SANDSLASH_ALOLAN #define SPECIES_SHELLOS_EAST SPECIES_SHELLOS_EAST_SEA +#define SPECIES_SIRFETCH_D SPECIES_SIRFETCHD #define SPECIES_SLIGGOO_HISUI SPECIES_SLIGGOO_HISUIAN #define SPECIES_SLOWBRO_GALAR SPECIES_SLOWBRO_GALARIAN #define SPECIES_SLOWKING_GALAR SPECIES_SLOWKING_GALARIAN diff --git a/include/data.h b/include/data.h index 69c1a19a3c..88111eb5c0 100644 --- a/include/data.h +++ b/include/data.h @@ -110,7 +110,9 @@ struct TypeInfo u16 maxMove; u16 teraTypeRGBValue; // Most values pulled from the Tera type icon palette. u16 damageCategory:2; // Used for B_PHYSICAL_SPECIAL_SPLIT <= GEN_3 - u16 padding:14; + u16 useSecondTypeIconPalette:1; + u16 isSpecialCaseType:1; + u16 padding:12; const u32 *const paletteTMHM; //u16 enhanceItem; //u16 berry; diff --git a/include/ev_caps.h b/include/ev_caps.h new file mode 100644 index 0000000000..2b2dd0b02b --- /dev/null +++ b/include/ev_caps.h @@ -0,0 +1,10 @@ +#ifndef GUARD_EV_CAP_H +#define GUARD_EV_CAP_H + +#if B_EV_CAP_TYPE != EV_CAP_NONE && B_EV_CAP_TYPE != EV_CAP_FLAG_LIST && B_EV_CAP_TYPE != EV_CAP_VARIABLE && B_EV_CAP_TYPE != EV_CAP_NO_GAIN +#error "Invalid choice for B_EV_CAP_TYPE, must be one of [EV_CAP_NONE, EV_CAP_FLAG_LIST, EV_CAP_VARIABLE, EV_CAP_NO_GAIN]" +#endif + +u32 GetCurrentEVCap(void); + +#endif /* GUARD_EV_CAP_H */ diff --git a/include/event_scripts.h b/include/event_scripts.h index 7c35e991c2..91846f8ce4 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -649,4 +649,8 @@ extern const u8 EventScript_VsSeekerChargingDone[]; extern const u8 Common_Movement_FollowerSafeStart[]; extern const u8 Common_Movement_FollowerSafeEnd[]; +extern const u8 EventScript_CancelMessageBox[]; +extern const u8 Common_EventScript_ShowPokemonCenterSign[]; +extern const u8 Common_EventScript_ShowPokemartSign[]; + #endif // GUARD_EVENT_SCRIPTS_H diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h index b259eb53c1..da23fe4336 100644 --- a/include/field_control_avatar.h +++ b/include/field_control_avatar.h @@ -34,5 +34,9 @@ u8 TrySetDiveWarp(void); const u8 *GetInteractedLinkPlayerScript(struct MapPosition *position, u8 metatileBehavior, u8 direction); const u8 *GetCoordEventScriptAtMapPosition(struct MapPosition *position); void ClearPoisonStepCounter(void); +void CancelSignPostMessageBox(struct FieldInput *input); + +#define NOT_SIGNPOST 0 +#define WALK_AWAY_SIGNPOST_FRAMES 6 #endif // GUARD_FIELDCONTROLAVATAR_H diff --git a/include/field_message_box.h b/include/field_message_box.h index 34b3324e72..810ac0fc20 100644 --- a/include/field_message_box.h +++ b/include/field_message_box.h @@ -19,4 +19,6 @@ u8 GetFieldMessageBoxMode(void); void StopFieldMessage(void); void InitFieldMessageBox(void); +extern u8 gWalkAwayFromSignpostTimer; + #endif // GUARD_FIELD_MESSAGE_BOX_H diff --git a/include/field_weather.h b/include/field_weather.h index 9805dc491d..ba45d161b7 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -41,8 +41,6 @@ struct Weather struct Sprite *sandstormSprites2[NUM_SWIRL_SANDSTORM_SPRITES]; } s2; } sprites; - u8 darkenedContrastColorMaps[NUM_WEATHER_COLOR_MAPS][32]; - u8 contrastColorMaps[NUM_WEATHER_COLOR_MAPS][32]; s8 colorMapIndex; s8 targetColorMapIndex; u8 colorMapStepDelay; diff --git a/include/frontier_util.h b/include/frontier_util.h index 637b7f91bb..0d617782a3 100644 --- a/include/frontier_util.h +++ b/include/frontier_util.h @@ -24,5 +24,6 @@ u16 GetFrontierBrainMonMove(u8 monId, u8 moveSlotId); u8 GetFrontierBrainMonNature(u8 monId); u8 GetFrontierBrainMonEvs(u8 monId, u8 evStatId); s32 GetFronterBrainSymbol(void); +void ClearEnemyPartyAfterChallenge(void); #endif // GUARD_FRONTIER_UTIL_H diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 4cbb23d499..cc331d502f 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -130,7 +130,7 @@ struct MapEvents struct MapConnection { u8 direction; - u32 offset; + s32 offset; u8 mapGroup; u8 mapNum; }; diff --git a/include/global.h b/include/global.h index f5ada78360..86ada60364 100644 --- a/include/global.h +++ b/include/global.h @@ -131,6 +131,31 @@ #define FEATURE_FLAG_ASSERT(flag, id) STATIC_ASSERT(flag > TEMP_FLAGS_END || flag == 0, id) +#ifndef NDEBUG +static inline void CycleCountStart() +{ + REG_TM2CNT_H = 0; + REG_TM3CNT_H = 0; + + REG_TM2CNT_L = 0; + REG_TM3CNT_L = 0; + + // init timers (tim3 count up mode, tim2 every clock cycle) + REG_TM3CNT_H = TIMER_ENABLE | TIMER_COUNTUP; + REG_TM2CNT_H = TIMER_1CLK | TIMER_ENABLE; +} + +static inline u32 CycleCountEnd() +{ + // stop timers + REG_TM2CNT_H = 0; + REG_TM3CNT_H = 0; + + // return result + return REG_TM2CNT_L | (REG_TM3CNT_L << 16u); +} +#endif + struct Coords8 { s8 x; @@ -175,12 +200,17 @@ struct Time /*0x04*/ s8 seconds; }; +#include "constants/items.h" +#define ITEM_FLAGS_COUNT ((ITEMS_COUNT / 8) + ((ITEMS_COUNT % 8) ? 1 : 0)) struct SaveBlock3 { #if OW_USE_FAKE_RTC struct Time fakeRTC; #endif +#if OW_SHOW_ITEM_DESCRIPTIONS == OW_ITEM_DESCRIPTIONS_FIRST_TIME + u8 itemFlags[ITEM_FLAGS_COUNT]; +#endif }; extern struct SaveBlock3 *gSaveBlock3Ptr; diff --git a/include/graphics.h b/include/graphics.h index 01de060b79..e11acf8978 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -2,6 +2,7 @@ #define GUARD_GRAPHICS_H // overworld +extern const u32 gSignpostWindow_Gfx[]; extern const u32 gMessageBox_Gfx[]; extern const u16 gMessageBox_Pal[]; @@ -2724,6 +2725,8 @@ extern const u32 gBattleAnimSpritePal_AuraSphere[]; extern const u32 gBattleAnimSpritePal_AvalancheRocks[]; extern const u32 gBattleAnimSpriteGfx_NewPokeball[]; extern const u32 gBattleAnimSpritePal_NewPokeball[]; +extern const u32 gBattleAnimSpriteGfx_Beam[]; +extern const u32 gBattleAnimSpritePal_Beam[]; extern const u32 gBattleAnimSpriteGfx_BerryEaten[]; extern const u32 gBattleAnimSpritePal_BerryEaten[]; extern const u32 gBattleAnimSpriteGfx_BerryNormal[]; @@ -2732,6 +2735,8 @@ extern const u32 gBattleAnimSpriteGfx_BigRock[]; extern const u32 gBattleAnimSpritePal_BigRock[]; extern const u32 gBattleAnimSpriteGfx_BlacephalonHead[]; extern const u32 gBattleAnimSpritePal_BlacephalonHead[]; +extern const u32 gBattleAnimSpriteGfx_BloodMoon[]; +extern const u32 gBattleAnimSpritePal_BloodMoon[]; extern const u32 gBattleAnimSpritePal_BlueFlare[]; extern const u32 gBattleAnimSpriteGfx_Branch[]; extern const u32 gBattleAnimSpritePal_Branch[]; @@ -2825,12 +2830,16 @@ extern const u32 gBattleAnimSpriteGfx_PoisonColumn[]; extern const u32 gBattleAnimSpritePal_PoisonColumn[]; extern const u32 gBattleAnimSpriteGfx_PowerTrick[]; extern const u32 gBattleAnimSpritePal_PowerTrick[]; +extern const u32 gBattleAnimSpriteGfx_PurpleChain[]; +extern const u32 gBattleAnimSpritePal_PurpleChain[]; extern const u32 gBattleAnimSpriteGfx_PurpleDrake[]; extern const u32 gBattleAnimSpritePal_PurpleDrake[]; extern const u32 gBattleAnimSpriteGfx_QuickGuard[]; extern const u32 gBattleAnimSpritePal_QuickGuard[]; extern const u32 gBattleAnimSpriteGfx_RazorShell[]; extern const u32 gBattleAnimSpritePal_RazorShell[]; +extern const u32 gBattleAnimSpriteGfx_RedExplosion[]; +extern const u32 gBattleAnimSpritePal_RedExplosion[]; extern const u32 gBattleAnimSpriteGfx_RocksSmall[]; extern const u32 gBattleAnimSpriteGfx_NewRocks[]; extern const u32 gBattleAnimSpritePal_NewRocks[]; @@ -3096,6 +3105,7 @@ extern const u32 gBattleAnimBgPalette_Surf[]; extern const u32 gBattleAnimBackgroundImageMuddyWater_Pal[]; extern const u32 gEnemyMonShadow_Gfx[]; +extern const u32 gEnemyMonShadowsSized_Gfx[]; extern const u32 gBattleAnimFogTilemap[]; @@ -3172,6 +3182,11 @@ extern const u32 gBattleAnimBgImage_Rainbow[]; extern const u32 gBattleAnimBGPalette_Rainbow[]; extern const u32 gBattleAnimBgTilemap_Rainbow[]; +// Pledge Effect field status - Swamp +extern const u32 gBattleAnimBgImage_Swamp[]; +extern const u32 gBattleAnimBGPalette_Swamp[]; +extern const u32 gBattleAnimBgTilemap_Swamp[]; + // Pokédex Area Screen extern const u32 gPokedexAreaScreenAreaUnknown_Gfx[]; extern const u16 gPokedexAreaScreenAreaUnknown_Pal[]; @@ -3363,4 +3378,9 @@ extern const u8 gMailTilemap_Retro[]; extern const u8 gMonMarkingsMenu_Gfx[]; extern const u16 gMonMarkingsMenu_Pal[]; +extern const u32 gBattleIcons_Gfx1[]; +extern const u32 gBattleIcons_Gfx2[]; +extern const u32 gBattleIcons_Pal1[]; +extern const u32 gBattleIcons_Pal2[]; + #endif //GUARD_GRAPHICS_H diff --git a/include/menu.h b/include/menu.h index fac4ef1b65..d2190fb854 100644 --- a/include/menu.h +++ b/include/menu.h @@ -5,6 +5,12 @@ #include "text.h" #include "window.h" +#define DLG_WINDOW_PALETTE_NUM 15 +#define DLG_WINDOW_BASE_TILE_NUM 0x200 +#define STD_WINDOW_PALETTE_NUM 14 +#define STD_WINDOW_PALETTE_SIZE PLTT_SIZEOF(10) +#define STD_WINDOW_BASE_TILE_NUM 0x214 + #define MENU_NOTHING_CHOSEN -2 #define MENU_B_PRESSED -1 diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index da7946e62e..2fd374a186 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -148,8 +148,10 @@ bool8 MetatileBehavior_IsQuestionnaire(u8); bool8 MetatileBehavior_IsLongGrass_Duplicate(u8); bool8 MetatileBehavior_IsLongGrassSouthEdge(u8); bool8 MetatileBehavior_IsTrainerHillTimer(u8); +bool32 MetatileBehavior_IsSignpost(u32); +bool32 MetatileBehavior_IsPokemonCenterSign(u32); +bool32 MetatileBehavior_IsPokeMartSign(u32); bool8 MetatileBehavior_IsRockStairs(u8); -//sideways stairs bool8 MetatileBehavior_IsSidewaysStairsRightSide(u8); bool8 MetatileBehavior_IsSidewaysStairsLeftSide(u8); bool8 MetatileBehavior_IsSidewaysStairsRightSideTop(u8 metatileBehavior); diff --git a/include/move_relearner.h b/include/move_relearner.h index 51b476d25f..903c80ac7a 100644 --- a/include/move_relearner.h +++ b/include/move_relearner.h @@ -3,5 +3,6 @@ void TeachMoveRelearnerMove(void); void MoveRelearnerShowHideHearts(s32); +void MoveRelearnerShowHideCategoryIcon(s32); #endif //GUARD_MOVE_RELEARNER_H diff --git a/include/overworld.h b/include/overworld.h index bda2046ec7..3e9dbc30b6 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -155,4 +155,12 @@ bool32 Overworld_SendKeysToLinkIsRunning(void); bool32 IsSendingKeysOverCable(void); void ClearLinkPlayerObjectEvents(void); +// Item Description Headers +enum ItemObtainFlags +{ + FLAG_GET_ITEM_OBTAINED, + FLAG_SET_ITEM_OBTAINED, +}; +bool8 GetSetItemObtained(u16 item, enum ItemObtainFlags caseId); + #endif // GUARD_OVERWORLD_H diff --git a/include/palette.h b/include/palette.h index 15c92cc2a7..13c06b0078 100644 --- a/include/palette.h +++ b/include/palette.h @@ -54,33 +54,31 @@ struct PaletteFadeControl extern struct PaletteFadeControl gPaletteFade; extern u32 gPlttBufferTransferPending; -extern u8 ALIGNED(4) gPaletteDecompressionBuffer[]; extern u16 ALIGNED(4) gPlttBufferUnfaded[PLTT_BUFFER_SIZE]; extern u16 ALIGNED(4) gPlttBufferFaded[PLTT_BUFFER_SIZE]; -void LoadCompressedPalette(const u32 *src, u16 offset, u16 size); -void LoadPalette(const void *src, u16 offset, u16 size); -void FillPalette(u16 value, u16 offset, u16 size); +void LoadCompressedPalette(const u32 *src, u32 offset, u32 size); +void LoadPalette(const void *src, u32 offset, u32 size); +void FillPalette(u32 value, u32 offset, u32 size); void TransferPlttBuffer(void); -u8 UpdatePaletteFade(void); +u32 UpdatePaletteFade(void); void ResetPaletteFade(void); -bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targetY, u16 blendColor); -void PaletteStruct_ResetById(u16 id); +bool32 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targetY, u32 blendColor); void ResetPaletteFadeControl(void); void InvertPlttBuffer(u32 selectedPalettes); void TintPlttBuffer(u32 selectedPalettes, s8 r, s8 g, s8 b); void UnfadePlttBuffer(u32 selectedPalettes); -void BeginFastPaletteFade(u8 submode); -void BeginHardwarePaletteFade(u8 blendCnt, u8 delay, u8 y, u8 targetY, u8 shouldResetBlendRegisters); -void BlendPalettes(u32 selectedPalettes, u8 coeff, u16 color); -void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u16 color); +void BeginFastPaletteFade(u32 submode); +void BeginHardwarePaletteFade(u32 blendCnt, u32 delay, u32 y, u32 targetY, u32 shouldResetBlendRegisters); +void BlendPalettes(u32 selectedPalettes, u8 coeff, u32 color); +void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u32 color); void BlendPalettesGradually(u32 selectedPalettes, s8 delay, u8 coeff, u8 coeffTarget, u16 color, u8 priority, u8 id); -void TintPalette_GrayScale(u16 *palette, u16 count); -void TintPalette_GrayScale2(u16 *palette, u16 count); -void TintPalette_SepiaTone(u16 *palette, u16 count); -void TintPalette_CustomTone(u16 *palette, u16 count, u16 rTone, u16 gTone, u16 bTone); +void TintPalette_GrayScale(u16 *palette, u32 count); +void TintPalette_GrayScale2(u16 *palette, u32 count); +void TintPalette_SepiaTone(u16 *palette, u32 count); +void TintPalette_CustomTone(u16 *palette, u32 count, u16 rTone, u16 gTone, u16 bTone); -static inline void SetBackdropFromColor(u16 color) +static inline void SetBackdropFromColor(u32 color) { FillPalette(color, 0, PLTT_SIZEOF(1)); } diff --git a/include/pokemon.h b/include/pokemon.h index b299ab7d61..4dbd86a391 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -323,9 +323,7 @@ struct BattlePokemon /*0x17*/ u32 abilityNum:2; /*0x18*/ s8 statStages[NUM_BATTLE_STATS]; /*0x20*/ u16 ability; - /*0x22*/ u8 type1; - /*0x23*/ u8 type2; - /*0x24*/ u8 type3; + /*0x22*/ u8 types[3]; /*0x25*/ u8 pp[MAX_MON_MOVES]; /*0x29*/ u16 hp; /*0x2B*/ u8 level; @@ -439,11 +437,17 @@ struct SpeciesInfo /*0xC4*/ u32 isHisuianForm:1; u32 isPaldeanForm:1; u32 cannotBeTraded:1; - u32 allPerfectIVs:1; + u32 perfectIVCount:3; // This species will always generate with the specified amount of perfect IVs. u32 dexForceRequired:1; // This species will be taken into account for Pokédex ratings even if they have the "isMythical" flag set. u32 tmIlliterate:1; // This species will be unable to learn the universal moves. u32 isFrontierBanned:1; // This species is not allowed to participate in Battle Frontier facilities. - u32 padding4:14; + u32 padding4:11; + // Shadow settings + s8 enemyShadowXOffset; // This determines the X-offset for an enemy Pokémon's shadow during battle; negative values point left, positive values point right. + s8 enemyShadowYOffset; // This determines the Y-offset for an enemy Pokémon's shadow during battle; negative values point up, positive values point down. + u16 enemyShadowSize:3; // This determines the size of the shadow sprite used for an enemy Pokémon's front sprite during battle. + u16 suppressEnemyShadow:1; // If set to true, then a shadow will not be drawn beneath an enemy Pokémon's front sprite during battle. + u16 padding5:12; // Move Data /* 0x80 */ const struct LevelUpMove *levelUpLearnset; /* 0x84 */ const u16 *teachableLearnset; @@ -798,7 +802,7 @@ u8 GetItemEffectParamOffset(u32 battler, u16 itemId, u8 effectByte, u8 effectBit u8 *UseStatIncreaseItem(u16 itemId); u8 GetNature(struct Pokemon *mon); u8 GetNatureFromPersonality(u32 personality); -u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem, struct Pokemon *tradePartner); +u16 GetEvolutionTargetSpecies(struct Pokemon *mon, enum EvolutionMode mode, u16 evolutionItem, struct Pokemon *tradePartner); bool8 IsMonPastEvolutionLevel(struct Pokemon *mon); u16 NationalPokedexNumToSpecies(u16 nationalNum); u16 NationalToHoennOrder(u16 nationalNum); @@ -882,5 +886,6 @@ const u8 *GetMoveName(u16 moveId); const u8 *GetMoveAnimationScript(u16 moveId); void UpdateDaysPassedSinceFormChange(u16 days); void TrySetDayLimitToFormChange(struct Pokemon *mon); +u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler); #endif // GUARD_POKEMON_H diff --git a/include/pokemon_sprite_visualizer.h b/include/pokemon_sprite_visualizer.h index 946c2f37f6..fdd53d2ce8 100644 --- a/include/pokemon_sprite_visualizer.h +++ b/include/pokemon_sprite_visualizer.h @@ -1,6 +1,7 @@ #ifndef GUARD_POKEMON_SPRITE_VISUALIZER_H #define GUARD_POKEMON_SPRITE_VISUALIZER_H +#include "constants/global.h" #include "constants/pokemon_sprite_visualizer.h" //Structs @@ -43,6 +44,17 @@ struct PokemonSpriteOffsets s8 offset_front_elevation; }; +struct PokemonShadowSettings +{ + s8 definedX; + s8 definedY; + u8 definedSize; + + s8 overrideX; + s8 overrideY; + u8 overrideSize; +}; + struct PokemonSpriteVisualizer { u16 currentmonId; @@ -52,14 +64,20 @@ struct PokemonSpriteVisualizer u8 backspriteId; u8 iconspriteId; u8 followerspriteId; - u8 frontShadowSpriteId; + bool8 isShiny; bool8 isFemale; + + u8 frontShadowSpriteIdPrimary; + u8 frontShadowSpriteIdSecondary; + struct PokemonShadowSettings shadowSettings; + struct PokemonSpriteVisualizerModifyArrows modifyArrows; struct PokemonSpriteVisualizerOptionArrows optionArrows; struct PokemonSpriteVisualizerYPosModifiyArrows yPosModifyArrows; struct PokemonSpriteConstValues constSpriteValues; struct PokemonSpriteOffsets offsetsSpriteValues; + u8 animIdBack; u8 animIdFront; u8 battleBgType; diff --git a/include/random.h b/include/random.h index cb4e636e14..b5ce987f39 100644 --- a/include/random.h +++ b/include/random.h @@ -6,25 +6,21 @@ #define ISO_RANDOMIZE1(val)(1103515245 * (val) + 24691) #define ISO_RANDOMIZE2(val)(1103515245 * (val) + 12345) -/* Some functions have been added to support HQ_RANDOM. +/* Some functions have been added to support Expansion's RNG implementation. * -* If using HQ_RANDOM, you cannot call Random() in interrupt handlers safely. -* AdvanceRandom() is provided to handle burning numbers in the VBlank handler -* if you choose to do that, and can be used regardless of HQ_RANDOM setting. +* LocalRandom(*val) provides a higher-quality replacement for uses of +* ISO_RANDOMIZE in vanilla Emerald. You can use LocalRandomSeed(u32) to +* create a local state. +* +* It is no longer possible to call Random() in interrupt handlers safely. +* AdvanceRandom() is provided to handle burning numbers in VBlank handlers. * If you need to use random numbers in the VBlank handler, a local state * should be used instead. * -* LocalRandom(*val) allows you to have local random states that are the same -* type as the global states regardless of HQ_RANDOM setting, which is useful -* if you want to be able to set them from or assign them to gRngValue. -* LocalRandomSeed(u32) returns a properly seeded rng_value_t. -* -* Random2_32() was added to HQ_RANDOM because the output of the generator is -* always 32 bits and Random()/Random2() are just wrappers in that mode. It is -* also available in non-HQ mode for consistency. +* Random2_32() was added, even though it is not used directly, because the +* underlying RNG always outputs 32 bits. */ -#if HQ_RANDOM == TRUE struct Sfc32State { u32 a; u32 b; @@ -70,40 +66,6 @@ static inline u16 Random2(void) } void AdvanceRandom(void); -#else -typedef u32 rng_value_t; - -#define RNG_VALUE_EMPTY 0 - -//Returns a 16-bit pseudorandom number -u16 Random(void); -u16 Random2(void); - -//Sets the initial seed value of the pseudorandom number generator -void SeedRng(u16 seed); -void SeedRng2(u16 seed); - -//Returns a 32-bit pseudorandom number -#define Random32() (Random() | (Random() << 16)) -#define Random2_32() (Random2() | (Random2() << 16)) - -static inline u16 LocalRandom(rng_value_t *val) -{ - *val = ISO_RANDOMIZE1(*val); - return *val >> 16; -} - -static inline void AdvanceRandom(void) -{ - Random(); -} - -static inline rng_value_t LocalRandomSeed(u32 seed) -{ - return seed; -} - -#endif extern rng_value_t gRngValue; extern rng_value_t gRng2Value; @@ -173,12 +135,14 @@ enum RandomTag RNG_G_MAX_BEFUDDLE, RNG_G_MAX_REPLENISH, RNG_G_MAX_SNOOZE, + RNG_HARVEST, RNG_HITS, RNG_HOLD_EFFECT_FLINCH, RNG_INFATUATION, RNG_LOADED_DICE, RNG_METRONOME, RNG_PARALYSIS, + RNG_PICKUP, RNG_POISON_POINT, RNG_POISON_TOUCH, RNG_RAMPAGE_TURNS, @@ -197,6 +161,7 @@ enum RandomTag RNG_TRACE, RNG_FICKLE_BEAM, RNG_AI_ABILITY, + RNG_AI_HASBADODDS, RNG_SHELL_SIDE_ARM, }; diff --git a/include/script.h b/include/script.h index 4dc30ca74c..1f3c4f7afb 100644 --- a/include/script.h +++ b/include/script.h @@ -63,4 +63,7 @@ void InitRamScript_NoObjectEvent(u8 *script, u16 scriptSize); // srccmd.h void SetMovingNpcId(u16 npcId); +extern u8 gMsgIsSignPost; +extern u8 gMsgBoxIsCancelable; + #endif // GUARD_SCRIPT_H diff --git a/include/strings.h b/include/strings.h index ec175ab251..84f87ff491 100644 --- a/include/strings.h +++ b/include/strings.h @@ -62,15 +62,6 @@ extern const u8 gText_MultiLink[]; extern const u8 gText_Single[]; extern const u8 gText_Double[]; -extern const u8 gText_Spicy[]; -extern const u8 gText_Dry[]; -extern const u8 gText_Sweet[]; -extern const u8 gText_Bitter[]; -extern const u8 gText_Sour[]; - -extern const u8 gText_StowCase[]; -extern const u8 gText_LvVar1[]; - extern const u8 gText_Spicy2[]; extern const u8 gText_Dry2[]; extern const u8 gText_Sweet2[]; @@ -117,9 +108,6 @@ extern const u8 gText_NoDecorationsInUse[]; extern const u8 gText_Exit[]; extern const u8 gText_Cancel[]; -extern const u8 gText_ThrowAwayVar1[]; -extern const u8 gText_Var1ThrownAway[]; - extern const u8 gText_Color161Shadow161[]; extern const u8 gText_GoBackPrevMenu[]; extern const u8 gText_CantPlaceInRoom[]; @@ -184,25 +172,6 @@ extern const u8 gText_Coins[]; extern const u8 gText_Silver[]; extern const u8 gText_Gold[]; -extern const u8 gText_Var1AteTheVar2[]; -extern const u8 gText_Var1HappilyAteVar2[]; -extern const u8 gText_Var1DisdainfullyAteVar2[]; - -extern const u8 gText_RedPokeblock[]; -extern const u8 gText_BluePokeblock[]; -extern const u8 gText_PinkPokeblock[]; -extern const u8 gText_GreenPokeblock[]; -extern const u8 gText_YellowPokeblock[]; -extern const u8 gText_PurplePokeblock[]; -extern const u8 gText_IndigoPokeblock[]; -extern const u8 gText_BrownPokeblock[]; -extern const u8 gText_LiteBluePokeblock[]; -extern const u8 gText_OlivePokeblock[]; -extern const u8 gText_GrayPokeblock[]; -extern const u8 gText_BlackPokeblock[]; -extern const u8 gText_WhitePokeblock[]; -extern const u8 gText_GoldPokeblock[]; - extern const u8 gMenuText_Use[]; extern const u8 gMenuText_Toss[]; extern const u8 gMenuText_Give[]; @@ -216,17 +185,6 @@ extern const u8 gMenuText_Confirm[]; extern const u8 gMenuText_Show[]; extern const u8 gMenuText_Give2[]; -extern const u8 gText_WithdrawPokemon[]; -extern const u8 gText_WithdrawMonDescription[]; -extern const u8 gText_DepositPokemon[]; -extern const u8 gText_DepositMonDescription[]; -extern const u8 gText_MovePokemon[]; -extern const u8 gText_MoveMonDescription[]; -extern const u8 gText_MoveItems[]; -extern const u8 gText_MoveItemsDescription[]; -extern const u8 gText_SeeYa[]; -extern const u8 gText_SeeYaDescription[]; - extern const u8 gText_EggNickname[]; extern const u8 gText_Pokemon[]; extern const u8 gText_InParty[]; @@ -324,19 +282,6 @@ extern const u8 gText_SelectorArrow3[]; extern const u8 gText_YesNo[]; // main menu/birch speech text -extern const u8 gText_SaveFileErased[]; -extern const u8 gText_SaveFileCorrupted[]; -extern const u8 gJPText_No1MSubCircuit[]; -extern const u8 gText_BatteryRunDry[]; -extern const u8 gText_MainMenuNewGame[]; -extern const u8 gText_MainMenuOption[]; -extern const u8 gText_MainMenuContinue[]; -extern const u8 gText_MainMenuMysteryGift2[]; -extern const u8 gText_MainMenuMysteryEvents[]; -extern const u8 gText_MainMenuMysteryGift[]; -extern const u8 gText_WirelessNotConnected[]; -extern const u8 gText_MysteryGiftCantUse[]; -extern const u8 gText_MysteryEventsCantUse[]; extern const u8 gText_Birch_Welcome[]; extern const u8 gText_ThisIsAPokemon[]; extern const u8 gText_Birch_MainSpeech[]; @@ -346,52 +291,6 @@ extern const u8 gText_Birch_WhatsYourName[]; extern const u8 gText_Birch_SoItsPlayer[]; extern const u8 gText_Birch_YourePlayer[]; extern const u8 gText_Birch_AreYouReady[]; -extern const u8 gText_ContinueMenuPlayer[]; -extern const u8 gText_ContinueMenuTime[]; -extern const u8 gText_ContinueMenuPokedex[]; -extern const u8 gText_ContinueMenuBadges[]; -extern const u8 gText_BirchBoy[]; -extern const u8 gText_BirchGirl[]; -extern const u8 gText_DefaultNameStu[]; -extern const u8 gText_DefaultNameMilton[]; -extern const u8 gText_DefaultNameTom[]; -extern const u8 gText_DefaultNameKenny[]; -extern const u8 gText_DefaultNameReid[]; -extern const u8 gText_DefaultNameJude[]; -extern const u8 gText_DefaultNameJaxson[]; -extern const u8 gText_DefaultNameEaston[]; -extern const u8 gText_DefaultNameWalker[]; -extern const u8 gText_DefaultNameTeru[]; -extern const u8 gText_DefaultNameJohnny[]; -extern const u8 gText_DefaultNameBrett[]; -extern const u8 gText_DefaultNameSeth[]; -extern const u8 gText_DefaultNameTerry[]; -extern const u8 gText_DefaultNameCasey[]; -extern const u8 gText_DefaultNameDarren[]; -extern const u8 gText_DefaultNameLandon[]; -extern const u8 gText_DefaultNameCollin[]; -extern const u8 gText_DefaultNameStanley[]; -extern const u8 gText_DefaultNameQuincy[]; -extern const u8 gText_DefaultNameKimmy[]; -extern const u8 gText_DefaultNameTiara[]; -extern const u8 gText_DefaultNameBella[]; -extern const u8 gText_DefaultNameJayla[]; -extern const u8 gText_DefaultNameAllie[]; -extern const u8 gText_DefaultNameLianna[]; -extern const u8 gText_DefaultNameSara[]; -extern const u8 gText_DefaultNameMonica[]; -extern const u8 gText_DefaultNameCamila[]; -extern const u8 gText_DefaultNameAubree[]; -extern const u8 gText_DefaultNameRuthie[]; -extern const u8 gText_DefaultNameHazel[]; -extern const u8 gText_DefaultNameNadine[]; -extern const u8 gText_DefaultNameTanja[]; -extern const u8 gText_DefaultNameYasmin[]; -extern const u8 gText_DefaultNameNicola[]; -extern const u8 gText_DefaultNameLillie[]; -extern const u8 gText_DefaultNameTerra[]; -extern const u8 gText_DefaultNameLucy[]; -extern const u8 gText_DefaultNameHalie[]; extern const u8 gText_BirchInTrouble[]; extern const u8 gText_ConfirmStarterChoice[]; @@ -404,19 +303,6 @@ extern const u8 gText_LoadingEvent[]; extern const u8 gText_DontRemoveCableTurnOff[]; extern const u8 gText_LinkStandby2[]; -// berry tag screen text -extern const u8 gBerryFirmnessString_VerySoft[]; -extern const u8 gBerryFirmnessString_Soft[]; -extern const u8 gBerryFirmnessString_Hard[]; -extern const u8 gBerryFirmnessString_VeryHard[]; -extern const u8 gBerryFirmnessString_SuperHard[]; -extern const u8 gText_BerryTag[]; -extern const u8 gText_NumberVar1Var2[]; -extern const u8 gText_SizeSlash[]; -extern const u8 gText_Var1DotVar2[]; -extern const u8 gText_ThreeMarks[]; -extern const u8 gText_FirmSlash[]; - // item menu screen text extern const u8 gText_CloseBag[]; extern const u8 gText_NumberItem_HM[]; @@ -1045,23 +931,6 @@ extern const u8 gText_SomeonesPC[]; extern const u8 gText_PlayersPC[]; extern const u8 gText_WhichPCShouldBeAccessed[]; -extern const u8 gText_PokenavMatchCall_Strategy[]; -extern const u8 gText_PokenavMatchCall_TrainerPokemon[]; -extern const u8 gText_PokenavMatchCall_SelfIntroduction[]; -extern const u8 gText_Pokenav_ClearButtonList[]; -extern const u8 gText_PokenavMap_ZoomedOutButtons[]; -extern const u8 gText_PokenavMap_ZoomedInButtons[]; -extern const u8 gText_PokenavCondition_MonListButtons[]; -extern const u8 gText_PokenavCondition_MonStatusButtons[]; -extern const u8 gText_PokenavCondition_MarkingButtons[]; -extern const u8 gText_PokenavMatchCall_TrainerListButtons[]; -extern const u8 gText_PokenavMatchCall_CallMenuButtons[]; -extern const u8 gText_PokenavMatchCall_CheckTrainerButtons[]; -extern const u8 gText_PokenavRibbons_MonListButtons[]; -extern const u8 gText_PokenavRibbons_RibbonListButtons[]; -extern const u8 gText_PokenavRibbons_RibbonCheckButtons[]; -extern const u8 gText_Number2[]; - extern const u8 gText_Petalburg[]; extern const u8 gText_Slateport[]; extern const u8 gText_Enter2[]; @@ -1087,51 +956,6 @@ extern const u8 gText_Yes[]; extern const u8 gText_No[]; extern const u8 gText_Challenge[]; extern const u8 gText_Info3[]; -extern const u8 gTrickHouse_Mechadoll_Oddish[]; -extern const u8 gTrickHouse_Mechadoll_Poochyena[]; -extern const u8 gTrickHouse_Mechadoll_Taillow[]; -extern const u8 gTrickHouse_Mechadoll_Azurill[]; -extern const u8 gTrickHouse_Mechadoll_Lotad[]; -extern const u8 gTrickHouse_Mechadoll_Wingull[]; -extern const u8 gTrickHouse_Mechadoll_Dustox[]; -extern const u8 gTrickHouse_Mechadoll_Zubat[]; -extern const u8 gTrickHouse_Mechadoll_Nincada[]; -extern const u8 gTrickHouse_Mechadoll_Ralts[]; -extern const u8 gTrickHouse_Mechadoll_Zigzagoon[]; -extern const u8 gTrickHouse_Mechadoll_Slakoth[]; -extern const u8 gTrickHouse_Mechadoll_Poochyena2[]; -extern const u8 gTrickHouse_Mechadoll_Shroomish[]; -extern const u8 gTrickHouse_Mechadoll_Zigzagoon2[]; -extern const u8 gTrickHouse_Mechadoll_Poochyena3[]; -extern const u8 gTrickHouse_Mechadoll_Zubat2[]; -extern const u8 gTrickHouse_Mechadoll_Carvanha[]; -extern const u8 gTrickHouse_Mechadoll_BurnHeal[]; -extern const u8 gTrickHouse_Mechadoll_HarborMail[]; -extern const u8 gTrickHouse_Mechadoll_SamePrice[]; -extern const u8 gTrickHouse_Mechadoll_60Yen[]; -extern const u8 gTrickHouse_Mechadoll_55Yen[]; -extern const u8 gTrickHouse_Mechadoll_Nothing[]; -extern const u8 gTrickHouse_Mechadoll_CostMore[]; -extern const u8 gTrickHouse_Mechadoll_CostLess[]; -extern const u8 gTrickHouse_Mechadoll_SamePrice2[]; -extern const u8 gTrickHouse_Mechadoll_Male[]; -extern const u8 gTrickHouse_Mechadoll_Female[]; -extern const u8 gTrickHouse_Mechadoll_Neither[]; -extern const u8 gTrickHouse_Mechadoll_ElderlyMen[]; -extern const u8 gTrickHouse_Mechadoll_ElderlyLadies[]; -extern const u8 gTrickHouse_Mechadoll_SameNumber[]; -extern const u8 gTrickHouse_Mechadoll_None[]; -extern const u8 gTrickHouse_Mechadoll_One[]; -extern const u8 gTrickHouse_Mechadoll_Two[]; -extern const u8 gTrickHouse_Mechadoll_Two2[]; -extern const u8 gTrickHouse_Mechadoll_Three[]; -extern const u8 gTrickHouse_Mechadoll_Four[]; -extern const u8 gTrickHouse_Mechadoll_Six[]; -extern const u8 gTrickHouse_Mechadoll_Seven[]; -extern const u8 gTrickHouse_Mechadoll_Eight[]; -extern const u8 gTrickHouse_Mechadoll_Six2[]; -extern const u8 gTrickHouse_Mechadoll_Seven2[]; -extern const u8 gTrickHouse_Mechadoll_Eight2[]; // Pokédex strings extern const u8 gText_SearchForPkmnBasedOnParameters[]; @@ -1395,36 +1219,6 @@ extern const u8 gText_FrontierFacilityRoomsCleared[]; extern const u8 gText_FrontierFacilityKOsStreak[]; extern const u8 gText_FrontierFacilityFloorsCleared[]; -// Frontier Brain -extern const u8 gText_AnabelWonSilver[]; -extern const u8 gText_TuckerWonSilver[]; -extern const u8 gText_SpenserWonSilver[]; -extern const u8 gText_GretaWonSilver[]; -extern const u8 gText_NolandWonSilver[]; -extern const u8 gText_LucyWonSilver[]; -extern const u8 gText_BrandonWonSilver[]; -extern const u8 gText_AnabelDefeatSilver[]; -extern const u8 gText_TuckerDefeatSilver[]; -extern const u8 gText_SpenserDefeatSilver[]; -extern const u8 gText_GretaDefeatSilver[]; -extern const u8 gText_NolandDefeatSilver[]; -extern const u8 gText_LucyDefeatSilver[]; -extern const u8 gText_BrandonDefeatSilver[]; -extern const u8 gText_AnabelWonGold[]; -extern const u8 gText_TuckerWonGold[]; -extern const u8 gText_SpenserWonGold[]; -extern const u8 gText_GretaWonGold[]; -extern const u8 gText_NolandWonGold[]; -extern const u8 gText_LucyWonGold[]; -extern const u8 gText_BrandonWonGold[]; -extern const u8 gText_AnabelDefeatGold[]; -extern const u8 gText_TuckerDefeatGold[]; -extern const u8 gText_SpenserDefeatGold[]; -extern const u8 gText_GretaDefeatGold[]; -extern const u8 gText_NolandDefeatGold[]; -extern const u8 gText_LucyDefeatGold[]; -extern const u8 gText_BrandonDefeatGold[]; - // Battle Tower. extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_Apprentice1Intro[]; extern const u8 BattleFrontier_BattleTowerMultiPartnerRoom_Text_Apprentice1Mon1[]; @@ -2002,78 +1796,7 @@ extern const u8 BattlePyramid_Text_SixTrainersRemaining6[]; extern const u8 BattlePyramid_Text_SevenTrainersRemaining6[]; // PC strings -extern const u8 gText_ExitFromBox[]; -extern const u8 gText_WhatDoYouWantToDo[]; -extern const u8 gText_PleasePickATheme[]; -extern const u8 gText_PickTheWallpaper[]; -extern const u8 gText_PkmnIsSelected[]; -extern const u8 gText_JumpToWhichBox[]; -extern const u8 gText_DepositInWhichBox[]; -extern const u8 gText_PkmnWasDeposited[]; -extern const u8 gText_BoxIsFull2[]; -extern const u8 gText_ReleaseThisPokemon[]; -extern const u8 gText_PkmnWasReleased[]; -extern const u8 gText_ByeByePkmn[]; -extern const u8 gText_MarkYourPkmn[]; -extern const u8 gText_ThatsYourLastPkmn[]; extern const u8 gText_YourPartysFull[]; -extern const u8 gText_YoureHoldingAPkmn[]; -extern const u8 gText_WhichOneWillYouTake[]; -extern const u8 gText_YouCantReleaseAnEgg[]; -extern const u8 gText_ContinueBoxOperations[]; -extern const u8 gText_PkmnCameBack[]; -extern const u8 gText_WasItWorriedAboutYou[]; -extern const u8 gText_FourEllipsesExclamation[]; -extern const u8 gText_PleaseRemoveTheMail[]; -extern const u8 gText_GiveToAPkmn[]; -extern const u8 gText_PlacedItemInBag[]; -extern const u8 gText_BagIsFull2[]; -extern const u8 gText_PutItemInBag[]; -extern const u8 gText_ItemIsNowHeld[]; -extern const u8 gText_ChangedToNewItem[]; -extern const u8 gText_MailCantBeStored[]; -extern const u8 gPCText_Cancel[]; -extern const u8 gPCText_Store[]; -extern const u8 gPCText_Withdraw[]; -extern const u8 gPCText_Move[]; -extern const u8 gPCText_Shift[]; -extern const u8 gPCText_Place[]; -extern const u8 gPCText_Summary[]; -extern const u8 gPCText_Release[]; -extern const u8 gPCText_Mark[]; -extern const u8 gPCText_Jump[]; -extern const u8 gPCText_Wallpaper[]; -extern const u8 gPCText_Name[]; -extern const u8 gPCText_Take[]; -extern const u8 gPCText_Give[]; -extern const u8 gPCText_Give[]; -extern const u8 gPCText_Switch[]; -extern const u8 gPCText_Bag[]; -extern const u8 gPCText_Info[]; -extern const u8 gPCText_Scenery1[]; -extern const u8 gPCText_Scenery2[]; -extern const u8 gPCText_Scenery3[]; -extern const u8 gPCText_Etcetera[]; -extern const u8 gPCText_Friends[]; -extern const u8 gPCText_Forest[]; -extern const u8 gPCText_City[]; -extern const u8 gPCText_Desert[]; -extern const u8 gPCText_Savanna[]; -extern const u8 gPCText_Crag[]; -extern const u8 gPCText_Volcano[]; -extern const u8 gPCText_Snow[]; -extern const u8 gPCText_Cave[]; -extern const u8 gPCText_Beach[]; -extern const u8 gPCText_Seafloor[]; -extern const u8 gPCText_River[]; -extern const u8 gPCText_Sky[]; -extern const u8 gPCText_PolkaDot[]; -extern const u8 gPCText_Pokecenter[]; -extern const u8 gPCText_Machine[]; -extern const u8 gPCText_Simple[]; -extern const u8 gText_PartyFull[]; -extern const u8 gText_Box[]; -extern const u8 gText_JustOnePkmn[]; // battle main extern const u8 gText_LinkStandby3[]; @@ -2502,43 +2225,6 @@ extern const u8 MatchCall_Text_Phoebe[]; extern const u8 MatchCall_Text_Glacia[]; extern const u8 MatchCall_Text_Drake[]; extern const u8 MatchCall_Text_Wallace[]; -extern const u8 gText_MrStoneMatchCallDesc[]; -extern const u8 gText_MrStoneMatchCallName[]; -extern const u8 gText_StevenMatchCallDesc[]; -extern const u8 gText_StevenMatchCallName[]; -extern const u8 gText_MayBrendanMatchCallDesc[]; -extern const u8 gText_WallyMatchCallDesc[]; -extern const u8 gText_NormanMatchCallDesc[]; -extern const u8 gText_NormanMatchCallName[]; -extern const u8 gText_MomMatchCallDesc[]; -extern const u8 gText_MomMatchCallName[]; -extern const u8 gText_ScottMatchCallDesc[]; -extern const u8 gText_ScottMatchCallName[]; -extern const u8 gText_RoxanneMatchCallDesc[]; -extern const u8 gText_BrawlyMatchCallDesc[]; -extern const u8 gText_WattsonMatchCallDesc[]; -extern const u8 gText_FlanneryMatchCallDesc[]; -extern const u8 gText_WinonaMatchCallDesc[]; -extern const u8 gText_TateLizaMatchCallDesc[]; -extern const u8 gText_JuanMatchCallDesc[]; -extern const u8 gText_EliteFourMatchCallDesc[]; -extern const u8 gText_ChampionMatchCallDesc[]; -extern const u8 gText_ProfBirchMatchCallDesc[]; -extern const u8 gText_ProfBirchMatchCallName[]; -extern const u8 gText_MatchCallSteven_Strategy[]; -extern const u8 gText_MatchCallSteven_Pokemon[]; -extern const u8 gText_MatchCallSteven_Intro1_BeforeMeteorFallsBattle[]; -extern const u8 gText_MatchCallSteven_Intro2_BeforeMeteorFallsBattle[]; -extern const u8 gText_MatchCallSteven_Intro1_AfterMeteorFallsBattle[]; -extern const u8 gText_MatchCallSteven_Intro2_AfterMeteorFallsBattle[]; -extern const u8 gText_MatchCallBrendan_Strategy[]; -extern const u8 gText_MatchCallBrendan_Pokemon[]; -extern const u8 gText_MatchCallBrendan_Intro1[]; -extern const u8 gText_MatchCallBrendan_Intro2[]; -extern const u8 gText_MatchCallMay_Strategy[]; -extern const u8 gText_MatchCallMay_Pokemon[]; -extern const u8 gText_MatchCallMay_Intro1[]; -extern const u8 gText_MatchCallMay_Intro2[]; // Contest Link extern const u8 gText_ColorDarkGray[]; @@ -2956,37 +2642,6 @@ extern const u8 gText_CutenessContest[]; extern const u8 gText_SmartnessContest[]; extern const u8 gText_ToughnessContest[]; -// PokéNav Match Call -extern const u8 gText_CallCantBeMadeHere[]; -extern const u8 gText_NumberRegistered[]; -extern const u8 gText_NumberOfBattles[]; -extern const u8 gText_Unknown[]; -extern const u8 gText_TrainerCloseBy[]; -extern const u8 gText_Call[]; -extern const u8 gText_Check[]; -extern const u8 gText_Cancel6[]; - -// PokéNav Menu Handler -extern const u8 gText_CheckMapOfHoenn[]; -extern const u8 gText_CheckPokemonInDetail[]; -extern const u8 gText_CallRegisteredTrainer[]; -extern const u8 gText_CheckObtainedRibbons[]; -extern const u8 gText_PutAwayPokenav[]; -extern const u8 gText_CheckPartyPokemonInDetail[]; -extern const u8 gText_CheckAllPokemonInDetail[]; -extern const u8 gText_ReturnToPokenavMenu[]; -extern const u8 gText_FindCoolPokemon[]; -extern const u8 gText_FindBeautifulPokemon[]; -extern const u8 gText_FindCutePokemon[]; -extern const u8 gText_FindSmartPokemon[]; -extern const u8 gText_FindToughPokemon[]; -extern const u8 gText_ReturnToConditionMenu[]; -extern const u8 gText_NoRibbonWinners[]; - -// PokéNav -extern const u8 gText_NumberIndex[]; -extern const u8 gText_RibbonsF700[]; - // use_pokeblock extern const u8 gText_Coolness[]; extern const u8 gText_Toughness[]; diff --git a/include/test/battle.h b/include/test/battle.h index a44e813f82..c28410948d 100644 --- a/include/test/battle.h +++ b/include/test/battle.h @@ -3,10 +3,10 @@ * To run all the tests use: * make check -j * To run specific tests, e.g. Spikes ones, use: - * make check TESTS='Spikes' + * make check TESTS="Spikes" * To build a ROM (pokemerald-test.elf) that can be opened in mgba to * view specific tests, e.g. Spikes ones, use: - * make pokeemerald-test.elf TESTS='Spikes' + * make pokeemerald-test.elf TESTS="Spikes" * * Manually testing a battle mechanic often follows this pattern: * 1. Create a party which can activate the mechanic. @@ -55,7 +55,7 @@ * start with the same prefix, e.g. Stun Spore tests should start with * "Stun Spore", this allows just the Stun Spore-related tests to be run * with: - * make check TESTS='Stun Spore' + * make check TESTS="Stun Spore" * * GIVEN initializes the parties, PLAYER and OPPONENT add a Pokémon to * their respective parties. They can both accept a block which further @@ -328,7 +328,7 @@ * * MOVE(battler, move | moveSlot:, [gimmick:], [hit:], [criticalHit:], [target:], [allowed:], [WITH_RNG(tag, value]) * Used when the battler chooses Fight. Either the move ID or move slot - * must be specified. gimmick: GIMMICK_MEGA causes the battler to Mega + * must be specified. gimmick: GIMMICK_MEGA causes the battler to Mega * Evolve if able, hit: FALSE causes the move to miss, criticalHit: TRUE * causes the move to land a critical hit, target: is used in double * battles to choose the target (when necessary), and allowed: FALSE is diff --git a/include/text_window.h b/include/text_window.h index aa7798c358..a292d1309e 100644 --- a/include/text_window.h +++ b/include/text_window.h @@ -14,6 +14,7 @@ extern const u16 gTextWindowFrame1_Pal[]; const struct TilesPal *GetWindowFrameTilesPal(u8 id); void LoadMessageBoxGfx(u8 windowId, u16 destOffset, u8 palOffset); +void LoadSignBoxGfx(u8 windowId, u16 destOffset, u8 palOffset); void LoadWindowGfx(u8 windowId, u8 frameId, u16 destOffset, u8 palOffset); void LoadUserWindowBorderGfx(u8 windowId, u16 destOffset, u8 palOffset); void LoadUserWindowBorderGfx_(u8 windowId, u16 destOffset, u8 palOffset); @@ -23,5 +24,6 @@ void DrawTextBorderInner(u8 windowId, u16 tileNum, u8 palNum); void rbox_fill_rectangle(u8 windowId); const u16 *GetTextWindowPalette(u8 id); const u16 *GetOverworldTextboxPalettePtr(void); +void LoadSignPostWindowFrameGfx(void); #endif // GUARD_TEXT_WINDOW_H diff --git a/include/tilesets.h b/include/tilesets.h index c7cc8edac9..b495b6c52c 100644 --- a/include/tilesets.h +++ b/include/tilesets.h @@ -7,4 +7,7 @@ extern const u16 gTilesetPalettes_General[][16]; extern const struct Tileset * const gTilesetPointer_SecretBase; extern const struct Tileset * const gTilesetPointer_SecretBaseRedCave; +extern const struct Tileset gTileset_Building; +extern const struct Tileset gTileset_BrendansMaysHouse; + #endif //GUARD_tilesets_H diff --git a/include/type_icons.h b/include/type_icons.h new file mode 100644 index 0000000000..1d6a312f07 --- /dev/null +++ b/include/type_icons.h @@ -0,0 +1,18 @@ +#ifndef GUARD_TYPE_ICONS_H +#define GUARD_TYPE_ICONS_H + +void LoadTypeIcons(u32); + +#define TYPE_ICON_TAG 0x2720 +#define TYPE_ICON_TAG_2 0x2721 +#define NUM_FRAMES_HIDE_TYPE_ICON 10 + +#define tMonPosition data[0] +#define tBattlerId data[1] +#define tHideIconTimer data[2] +#define tVerticalPosition data[3] + +#define TYPE_ICON_1_FRAME(monType) ((monType - 1) * 2) +#define TYPE_ICON_2_FRAME(monType) ((monType - 11) * 2) + +#endif // GUARD_TYPE_ICONS_H diff --git a/include/util.h b/include/util.h index 3c90f136a6..fcc4e37bb1 100644 --- a/include/util.h +++ b/include/util.h @@ -4,7 +4,6 @@ #include "sprite.h" extern const u8 gMiscBlank_Gfx[]; // unused in Emerald -extern const u32 gBitTable[]; u8 CreateInvisibleSpriteWithCallback(void (*)(struct Sprite *)); void StoreWordInTwoHalfwords(u16 *, u32); diff --git a/ld_script.ld b/ld_script.ld deleted file mode 100644 index a0c069c965..0000000000 --- a/ld_script.ld +++ /dev/null @@ -1,1391 +0,0 @@ -ENTRY(Start) - -gNumMusicPlayers = 4; -gMaxLines = 0; -gInitialMainCB2 = CB2_InitCopyrightScreenAfterBootup; - -MEMORY -{ - EWRAM (rwx) : ORIGIN = 0x2000000, LENGTH = 256K - IWRAM (rwx) : ORIGIN = 0x3000000, LENGTH = 32K - ROM (rx) : ORIGIN = 0x8000000, LENGTH = 32M -} - -SECTIONS { - - .ewram ORIGIN(EWRAM) : AT (__ewram_lma) - ALIGN(4) - { - __ewram_start = .; - *(.ewram*) - __ewram_end = .; - } > EWRAM - - .ewram.sbss (NOLOAD) : - ALIGN(4) - { - INCLUDE "sym_ewram.ld" - src/*.o(.sbss); - gflib/*.o(.sbss); - - *libc.a:impure.o(.data); - *libc.a:locale.o(.data); - *libc.a:mallocr.o(.data); - } > EWRAM - - .iwram ORIGIN(IWRAM) : AT (__iwram_lma) - ALIGN(4) - { - __iwram_start = .; - *(.iwram*); - __iwram_end = .; - } > IWRAM - - .iwram.bss (NOLOAD) : - ALIGN(4) - { - /* .bss starts at 0x3000000 */ - INCLUDE "sym_bss.ld" - src/*.o(.bss); - gflib/*.o(.bss); - data/*.o(.bss); - - /* .bss.code starts at 0x3001AA8 */ - src/m4a.o(.bss.code); - - /* COMMON starts at 0x30022A8 */ - INCLUDE "sym_common.ld" - *libc.a:sbrkr.o(COMMON); - } > IWRAM - - /* BEGIN ROM DATA */ - . = 0x8000000; - - .text : - ALIGN(4) - { - 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); - gflib/dma3_manager.o(.text); - gflib/gpu_regs.o(.text); - gflib/bg.o(.text); - gflib/blit.o(.text); - gflib/window.o(.text); - gflib/text.o(.text); - gflib/sprite.o(.text); - gflib/string_util.o(.text); - src/link.o(.text); - src/AgbRfu_LinkManager.o(.text); - src/link_rfu_3.o(.text); - src/link_rfu_2.o(.text); - src/union_room.o(.text); - src/mystery_gift_menu.o(.text); - src/union_room_player_avatar.o(.text); - src/wireless_communication_status_screen.o(.text); - src/union_room_battle.o(.text); - src/mystery_gift.o(.text); - src/mystery_gift_view.o(.text); - src/mystery_gift_server.o(.text); - src/mystery_gift_client.o(.text); - src/mystery_gift_link.o(.text); - src/wonder_news.o(.text); - src/union_room_chat.o(.text); - src/berry_crush.o(.text); - src/berry_powder.o(.text); - src/dodrio_berry_picking.o(.text); - src/pokemon_jump.o(.text); - src/minigame_countdown.o(.text); - src/rtc.o(.text); - src/main_menu.o(.text); - src/battle_controllers.o(.text); - src/decompress.o(.text); - src/digit_obj_util.o(.text); - src/battle_bg.o(.text); - src/battle_main.o(.text); - src/battle_util.o(.text); - src/battle_z_move.o(.text); - src/battle_script_commands.o(.text); - src/battle_util2.o(.text); - src/battle_controller_player.o(.text); - src/battle_gfx_sfx_util.o(.text); - src/battle_controller_opponent.o(.text); - src/battle_ai_switch_items.o(.text); - src/battle_controller_link_opponent.o(.text); - src/battle_debug.o(.text); - src/pokemon.o(.text); - src/trig.o(.text); - src/random.o(.text); - src/util.o(.text); - src/daycare.o(.text); - src/egg_hatch.o(.text); - src/battle_interface.o(.text); - src/battle_anim_smokescreen.o(.text); - src/pokeball.o(.text); - src/load_save.o(.text); - src/trade.o(.text); - src/berry_blender.o(.text); - src/play_time.o(.text); - src/new_game.o(.text); - src/overworld.o(.text); - src/fieldmap.o(.text); - src/metatile_behavior.o(.text); - src/field_camera.o(.text); - src/field_door.o(.text); - src/field_player_avatar.o(.text); - src/event_object_movement.o(.text); - src/follower_helper.o(.text); - src/field_message_box.o(.text); - src/event_object_lock.o(.text); - src/text_window.o(.text); - src/script.o(.text); - src/scrcmd.o(.text); - src/field_control_avatar.o(.text); - src/event_data.o(.text); - src/coord_event_weather.o(.text); - src/field_tasks.o(.text); - src/clock.o(.text); - src/reset_rtc_screen.o(.text); - src/start_menu.o(.text); - src/tileset_anims.o(.text); - src/palette.o(.text); - src/sound.o(.text); - src/battle_anim.o(.text); - src/battle_anim_mons.o(.text); - src/task.o(.text); - src/reshow_battle_screen.o(.text); - src/battle_anim_status_effects.o(.text); - src/title_screen.o(.text); - src/field_weather.o(.text); - src/field_weather_effect.o(.text); - src/field_screen_effect.o(.text); - src/battle_setup.o(.text); - src/cable_club.o(.text); - src/trainer_see.o(.text); - src/wild_encounter.o(.text); - src/field_effect.o(.text); - src/scanline_effect.o(.text); - src/option_menu.o(.text); - src/pokedex.o(.text); - src/trainer_card.o(.text); - src/frontier_pass.o(.text); - src/pokemon_storage_system.o(.text); - src/pokemon_icon.o(.text); - src/script_movement.o(.text); - src/fldeff_cut.o(.text); - src/mail_data.o(.text); - src/map_name_popup.o(.text); - src/item_menu_icons.o(.text); - src/battle_anim_mon_movement.o(.text); - src/item.o(.text); - src/contest.o(.text); - src/shop.o(.text); - src/fldeff_escalator.o(.text); - src/berry.o(.text); - src/script_menu.o(.text); - src/naming_screen.o(.text); - src/money.o(.text); - src/contest_effect.o(.text); - src/record_mixing.o(.text); - src/secret_base.o(.text); - src/tv.o(.text); - src/contest_util.o(.text); - src/script_pokemon_util.o(.text); - src/field_poison.o(.text); - src/pokemon_size_record.o(.text); - src/fldeff_misc.o(.text); - src/field_special_scene.o(.text); - src/rotating_gate.o(.text); - src/safari_zone.o(.text); - src/contest_link.o(.text); - src/item_use.o(.text); - src/battle_anim_effects_1.o(.text); - src/battle_anim_effects_2.o(.text); - src/battle_anim_water.o(.text); - src/battle_anim_fire.o(.text); - src/battle_anim_electric.o(.text); - src/battle_anim_ice.o(.text); - src/battle_anim_fight.o(.text); - src/battle_anim_poison.o(.text); - src/battle_anim_flying.o(.text); - src/battle_anim_psychic.o(.text); - src/battle_anim_bug.o(.text); - src/battle_anim_rock.o(.text); - src/battle_anim_ghost.o(.text); - src/battle_anim_dragon.o(.text); - src/battle_anim_dark.o(.text); - src/battle_anim_ground.o(.text); - src/battle_anim_normal.o(.text); - src/battle_anim_utility_funcs.o(.text); - src/battle_anim_new.o(.text); - src/battle_intro.o(.text); - src/bike.o(.text); - src/easy_chat.o(.text); - src/mon_markings.o(.text); - src/mauville_old_man.o(.text); - src/mail.o(.text); - src/menu_helpers.o(.text); - src/dewford_trend.o(.text); - src/heal_location.o(.text); - src/region_map.o(.text); - src/image_processing_effects.o(.text); - src/decoration.o(.text); - src/slot_machine.o(.text); - src/contest_painting.o(.text); - src/battle_ai_main.o(.text); - src/battle_ai_util.o(.text); - src/trader.o(.text); - src/starter_choose.o(.text); - src/wallclock.o(.text); - src/fldeff_rocksmash.o(.text); - src/fldeff_dig.o(.text); - src/pokeblock.o(.text); - src/fldeff_flash.o(.text); - src/post_battle_event_funcs.o(.text); - src/time_events.o(.text); - src/birch_pc.o(.text); - src/hof_pc.o(.text); - src/field_specials.o(.text); - src/battle_records.o(.text); - src/pokedex_area_screen.o(.text); - src/evolution_scene.o(.text); - src/roulette.o(.text); - src/pokedex_cry_screen.o(.text); - src/coins.o(.text); - src/landmark.o(.text); - src/fldeff_strength.o(.text); - src/battle_transition.o(.text); - src/battle_controller_link_partner.o(.text); - src/battle_message.o(.text); - src/cable_car.o(.text); - src/math_util.o(.text); - src/palette_util.o(.text); - src/confetti_util.o(.text); - src/save.o(.text); - src/mystery_event_script.o(.text); - src/field_effect_helpers.o(.text); - src/contest_ai.o(.text); - src/battle_anim_sound_tasks.o(.text); - src/battle_controller_safari.o(.text); - src/fldeff_sweetscent.o(.text); - src/battle_anim_effects_3.o(.text); - src/move_relearner.o(.text); - src/fldeff_softboiled.o(.text); - src/decoration_inventory.o(.text); - src/roamer.o(.text); - src/battle_tower.o(.text); - src/use_pokeblock.o(.text); - src/battle_controller_wally.o(.text); - src/player_pc.o(.text); - src/intro.o(.text); - src/reload_save.o(.text); - src/field_region_map.o(.text); - src/battle_anim_throw.o(.text); - src/hall_of_fame.o(.text); - src/credits.o(.text); - src/lottery_corner.o(.text); - src/diploma.o(.text); - src/berry_tag_screen.o(.text); - src/mystery_event_menu.o(.text); - src/save_failed_screen.o(.text); - src/braille_puzzles.o(.text); - src/pokeblock_feed.o(.text); - src/clear_save_data_screen.o(.text); - src/intro_credits_graphics.o(.text); - src/evolution_graphics.o(.text); - src/bard_music.o(.text); - src/fldeff_teleport.o(.text); - src/battle_tv.o(.text); - src/pokemon_animation.o(.text); - src/recorded_battle.o(.text); - src/battle_controller_recorded_opponent.o(.text); - src/battle_controller_recorded_player.o(.text); - src/trainer_pokemon_sprites.o(.text); - src/lilycove_lady.o(.text); - src/battle_dome.o(.text); - src/battle_palace.o(.text); - src/match_call.o(.text); - src/menu.o(.text); - src/battle_factory_screen.o(.text); - src/apprentice.o(.text); - src/frontier_util.o(.text); - src/battle_arena.o(.text); - src/battle_factory.o(.text); - src/battle_pike.o(.text); - src/rotating_tile_puzzle.o(.text); - src/battle_pyramid.o(.text); - src/item_menu.o(.text); - src/list_menu.o(.text); - src/dynamic_placeholder_text_util.o(.text); - src/save_location.o(.text); - src/item_icon.o(.text); - src/party_menu.o(.text); - src/battle_tent.o(.text); - src/braille.o(.text); - src/multiboot.o(.text); - src/berry_fix_graphics.o(.text); - src/battle_controller_player_partner.o(.text); - src/mirage_tower.o(.text); - src/berry_fix_program.o(.text); - src/pokemon_summary_screen.o(.text); - src/pokedex_area_region_map.o(.text); - src/battle_pyramid_bag.o(.text); - src/pokenav.o(.text); - src/pokenav_main_menu.o(.text); - src/pokenav_list.o(.text); - src/pokenav_menu_handler.o(.text); - src/pokenav_menu_handler_gfx.o(.text); - src/pokenav_match_call_list.o(.text); - src/pokenav_match_call_gfx.o(.text); - src/pokenav_region_map.o(.text); - src/pokenav_conditions.o(.text); - src/pokenav_conditions_gfx.o(.text); - src/pokenav_conditions_search_results.o(.text); - src/pokenav_ribbons_list.o(.text); - src/pokenav_ribbons_summary.o(.text); - src/pokenav_match_call_data.o(.text); - src/menu_specialized.o(.text); - src/ereader_helpers.o(.text); - src/faraway_island.o(.text); - src/ereader_screen.o(.text); - src/trainer_hill.o(.text); - src/rayquaza_scene.o(.text); - src/walda_phrase.o(.text); - src/contest_link_util.o(.text); - src/gym_leader_rematch.o(.text); - src/battle_transition_frontier.o(.text); - src/international_string_util.o(.text); - src/pokemon_sprite_visualizer.o(.text); - src/expansion_intro.o(.text); - } > ROM =0 - - script_data : - ALIGN(4) - { - data/event_scripts.o(script_data); - data/battle_anim_scripts.o(script_data); - data/battle_scripts_1.o(script_data); - data/field_effect_scripts.o(script_data); - data/battle_scripts_2.o(script_data); - data/contest_ai_scripts.o(script_data); - data/mystery_event_script_cmd_table.o(script_data); - } > ROM =0 - - lib_text : - ALIGN(4) - { - src/libgcnmultiboot.o(.text); - src/m4a_1.o(.text); - src/m4a.o(.text); - src/agb_flash.o(.text); - src/agb_flash_1m.o(.text); - src/agb_flash_mx.o(.text); - src/siirtc.o(.text); - src/librfu_stwi.o(.text); - src/librfu_intr.o(.text); - src/librfu_rfu.o(.text); - src/librfu_sio32id.o(.text); - src/libisagbprn.o(.text); - *libagbsyscall.a:ArcTan2.o(.text); - *libagbsyscall.a:BgAffineSet.o(.text); - *libagbsyscall.a:CpuFastSet.o(.text); - *libagbsyscall.a:CpuSet.o(.text); - *libagbsyscall.a:Div.o(.text); - *libagbsyscall.a:LZ77UnCompVram.o(.text); - *libagbsyscall.a:LZ77UnCompWram.o(.text); - *libagbsyscall.a:MultiBoot.o(.text); - *libagbsyscall.a:ObjAffineSet.o(.text); - *libagbsyscall.a:RLUnCompVram.o(.text); - *libagbsyscall.a:RLUnCompWram.o(.text); - *libagbsyscall.a:RegisterRamReset.o(.text); - *libagbsyscall.a:SoftReset.o(.text); - *libagbsyscall.a:Sqrt.o(.text); - *libagbsyscall.a:VBlankIntrWait.o(.text); - *libgcc.a:_call_via_rX.o(.text); - *libgcc.a:_divdi3.o(.text); - *libgcc.a:_divsi3.o(.text); - *libgcc.a:_dvmd_tls.o(.text); - *libgcc.a:_fixunsdfsi.o(.text); - *libgcc.a:_fixunssfsi.o(.text); - *libgcc.a:_modsi3.o(.text); - *libgcc.a:_muldi3.o(.text); - *libgcc.a:_udivdi3.o(.text); - *libgcc.a:_udivsi3.o(.text); - *libgcc.a:_umodsi3.o(.text); - *libgcc.a:dp-bit.o(.text); - *libgcc.a:fp-bit.o(.text); - *libgcc.a:_lshrdi3.o(.text); - *libgcc.a:_negdi2.o(.text); - *libc.a:memcpy.o(.text); - *libc.a:memset.o(.text); - *libc.a:strcmp.o(.text); - *libc.a:strcpy.o(.text); - *libc.a:impure.o(.text); - *libc.a:vsprintf.o(.text); - *libc.a:vfprintf.o(.text); - *libc.a:wsetup.o(.text); - *libc.a:dtoa.o(.text); - *libc.a:fflush.o(.text); - *libc.a:findfp.o(.text); - *libc.a:freer.o(.text); - *libc.a:mtrim.o(.text); - *libc.a:fvwrite.o(.text); - *libc.a:fwalk.o(.text); - *libc.a:locale.o(.text); - *libc.a:makebuf.o(.text); - *libc.a:mallocr.o(.text); - *libc.a:mbtowc_r.o(.text); - *libc.a:memchr.o(.text); - *libc.a:memmove.o(.text); - *libc.a:mlock.o(.text); - *libc.a:mprec.o(.text); - *libc.a:s_isinf.o(.text); - *libc.a:s_isnan.o(.text); - *libc.a:sbrkr.o(.text); - *libc.a:stdio.o(.text); - *libc.a:strlen.o(.text); - *libc.a:syscalls.o(.text); - *libc.a:writer.o(.text); - *libc.a:callocr.o(.text); - *libc.a:closer.o(.text); - *libc.a:errno.o(.text); - *libc.a:fstatr.o(.text); - *libc.a:libcfunc.o(.text); - *libc.a:lseekr.o(.text); - *libc.a:readr.o(.text); - } > ROM =0 - - .rodata : - ALIGN(4) - { - src/rom_header.o(.rodata); - src/rom_header_gf.o(.rodata); - src/main.o(.rodata); - gflib/bg.o(.rodata); - gflib/window.o(.rodata); - gflib/text.o(.rodata); - gflib/sprite.o(.rodata); - gflib/io_reg.o(.rodata); - gflib/string_util.o(.rodata); - src/link.o(.rodata); - src/link.o(.rodata.str1.4); - src/AgbRfu_LinkManager.o(.rodata); - src/link_rfu_3.o(.rodata); - src/link_rfu_2.o(.rodata); - src/link_rfu_2.o(.rodata.str1.4); - src/union_room.o(.rodata); - src/mystery_gift_menu.o(.rodata); - src/union_room_player_avatar.o(.rodata); - src/wireless_communication_status_screen.o(.rodata); - src/union_room_battle.o(.rodata); - src/mystery_gift.o(.rodata); - src/mystery_gift_view.o(.rodata); - src/mystery_gift_server.o(.rodata); - src/mystery_gift_client.o(.rodata); - src/mystery_gift_scripts.o(.rodata); - src/wonder_news.o(.rodata); - src/union_room_chat.o(.rodata); - src/berry_crush.o(.rodata); - src/berry_powder.o(.rodata); - src/dodrio_berry_picking.o(.rodata); - src/pokemon_jump.o(.rodata); - src/minigame_countdown.o(.rodata); - src/rtc.o(.rodata); - src/main_menu.o(.rodata); - src/battle_controllers.o(.rodata); - src/digit_obj_util.o(.rodata); - src/data.o(.rodata); - src/battle_bg.o(.rodata); - src/battle_main.o(.rodata); - src/battle_util.o(.rodata); - src/battle_z_move.o(.rodata); - src/battle_script_commands.o(.rodata); - src/battle_controller_player.o(.rodata); - src/battle_anim_smokescreen.o(.rodata); - src/battle_controller_opponent.o(.rodata); - src/battle_ai_switch_items.o(.rodata); - src/battle_controller_link_opponent.o(.rodata); - src/battle_debug.o(.rodata); - src/pokemon.o(.rodata); - src/trig.o(.rodata); - src/util.o(.rodata); - src/daycare.o(.rodata); - src/egg_hatch.o(.rodata); - src/battle_gfx_sfx_util.o(.rodata); - src/battle_interface.o(.rodata); - src/pokeball.o(.rodata); - src/trade.o(.rodata); - src/berry_blender.o(.rodata); - src/new_game.o(.rodata); - src/overworld.o(.rodata); - src/tilesets.o(.rodata); - data/maps.o(.rodata); - src/fieldmap.o(.rodata); - src/metatile_behavior.o(.rodata); - src/field_door.o(.rodata); - src/field_player_avatar.o(.rodata); - src/event_object_movement.o(.rodata); - src/follower_helper.o(.rodata); - src/text_window.o(.rodata); - src/scrcmd.o(.rodata); - src/field_control_avatar.o(.rodata); - src/coord_event_weather.o(.rodata); - src/field_tasks.o(.rodata); - src/reset_rtc_screen.o(.rodata); - src/start_menu.o(.rodata); - src/tileset_anims.o(.rodata); - src/palette.o(.rodata); - src/sound.o(.rodata); - src/battle_anim.o(.rodata); - src/battle_anim_mons.o(.rodata); - data/map_events.o(.rodata); - src/reshow_battle_screen.o(.rodata); - src/battle_anim_status_effects.o(.rodata); - src/title_screen.o(.rodata); - src/field_weather.o(.rodata); - src/field_weather_effect.o(.rodata); - src/field_screen_effect.o(.rodata); - src/battle_setup.o(.rodata); - src/cable_club.o(.rodata); - src/trainer_see.o(.rodata); - src/wild_encounter.o(.rodata); - src/field_effect.o(.rodata); - src/scanline_effect.o(.rodata); - src/option_menu.o(.rodata); - src/pokedex.o(.rodata); - src/trainer_card.o(.rodata); - src/frontier_pass.o(.rodata); - src/pokemon_storage_system.o(.rodata); - src/pokemon_icon.o(.rodata); - src/fldeff_cut.o(.rodata); - src/map_name_popup.o(.rodata); - src/item_menu_icons.o(.rodata); - src/battle_anim_mon_movement.o(.rodata); - src/item.o(.rodata); - src/contest.o(.rodata); - src/shop.o(.rodata); - src/fldeff_escalator.o(.rodata); - src/berry.o(.rodata); - src/script_menu.o(.rodata); - src/naming_screen.o(.rodata); - src/money.o(.rodata); - src/contest_effect.o(.rodata); - src/record_mixing.o(.rodata); - src/secret_base.o(.rodata); - src/tv.o(.rodata); - src/contest_util.o(.rodata); - src/script_pokemon_util.o(.rodata); - src/pokemon_size_record.o(.rodata) - src/fldeff_misc.o(.rodata); - src/field_special_scene.o(.rodata); - src/rotating_gate.o(.rodata); - src/contest_link.o(.rodata); - src/item_use.o(.rodata); - src/battle_anim_effects_1.o(.rodata); - src/battle_anim_effects_2.o(.rodata); - src/battle_anim_water.o(.rodata); - src/battle_anim_fire.o(.rodata); - src/battle_anim_electric.o(.rodata); - src/battle_anim_ice.o(.rodata); - src/battle_anim_fight.o(.rodata); - src/battle_anim_poison.o(.rodata); - src/battle_anim_flying.o(.rodata); - src/battle_anim_psychic.o(.rodata); - src/battle_anim_bug.o(.rodata); - src/battle_anim_rock.o(.rodata); - src/battle_anim_ghost.o(.rodata); - src/battle_anim_dragon.o(.rodata); - src/battle_anim_dark.o(.rodata); - src/battle_anim_ground.o(.rodata); - src/battle_anim_normal.o(.rodata); - src/battle_anim_utility_funcs.o(.rodata); - src/battle_anim_new.o(.rodata); - src/battle_intro.o(.rodata); - src/bike.o(.rodata); - src/easy_chat.o(.rodata); - src/mon_markings.o(.rodata); - src/mauville_old_man.o(.rodata); - src/mail.o(.rodata); - src/menu_helpers.o(.rodata); - src/heal_location.o(.rodata); - src/region_map.o(.rodata); - src/image_processing_effects.o(.rodata); - src/decoration.o(.rodata); - src/slot_machine.o(.rodata); - src/contest_painting.o(.rodata); - src/battle_ai_main.o(.rodata); - src/battle_ai_util.o(.rodata); - src/trader.o(.rodata); - src/starter_choose.o(.rodata); - src/wallclock.o(.rodata); - src/pokeblock.o(.rodata); - src/fldeff_flash.o(.rodata); - src/time_events.o(.rodata); - src/field_specials.o(.rodata); - src/battle_records.o(.rodata); - src/pokedex_area_screen.o(.rodata); - src/evolution_scene.o(.rodata); - src/roulette.o(.rodata); - src/pokedex_cry_screen.o(.rodata); - src/landmark.o(.rodata); - src/battle_transition.o(.rodata); - src/battle_controller_link_partner.o(.rodata); - src/battle_message.o(.rodata); - src/cable_car.o(.rodata); - src/save.o(.rodata); - src/field_effect_helpers.o(.rodata); - src/contest_ai.o(.rodata); - src/battle_anim_sound_tasks.o(.rodata); - src/battle_controller_safari.o(.rodata); - src/battle_anim_effects_3.o(.rodata); - src/move_relearner.o(.rodata); - src/roamer.o(.rodata); - src/battle_tower.o(.rodata); - src/use_pokeblock.o(.rodata); - src/battle_controller_wally.o(.rodata); - src/player_pc.o(.rodata); - src/intro.o(.rodata); - src/field_region_map.o(.rodata); - src/battle_anim_throw.o(.rodata); - src/hall_of_fame.o(.rodata); - src/credits.o(.rodata); - src/lottery_corner.o(.rodata); - src/diploma.o(.rodata); - src/strings.o(.rodata); - src/berry_tag_screen.o(.rodata); - src/mystery_event_menu.o(.rodata); - src/save_failed_screen.o(.rodata); - src/braille_puzzles.o(.rodata); - src/pokeblock_feed.o(.rodata); - src/clear_save_data_screen.o(.rodata); - src/intro_credits_graphics.o(.rodata); - src/evolution_graphics.o(.rodata); - src/bard_music.o(.rodata); - src/battle_tv.o(.rodata); - src/pokemon_animation.o(.rodata); - src/battle_controller_recorded_opponent.o(.rodata); - src/battle_controller_recorded_player.o(.rodata); - src/trainer_pokemon_sprites.o(.rodata); - src/lilycove_lady.o(.rodata); - src/battle_dome.o(.rodata); - src/battle_palace.o(.rodata); - src/match_call.o(.rodata); - src/menu.o(.rodata); - src/battle_factory_screen.o(.rodata); - src/apprentice.o(.rodata); - src/frontier_util.o(.rodata); - src/battle_arena.o(.rodata); - src/battle_factory.o(.rodata); - src/battle_pike.o(.rodata); - src/rotating_tile_puzzle.o(.rodata); - src/battle_pyramid.o(.rodata); - src/item_menu.o(.rodata); - src/list_menu.o(.rodata); - src/save_location.o(.rodata); - src/item_icon.o(.rodata); - src/party_menu.o(.rodata); - src/battle_tent.o(.rodata); - src/braille.o(.rodata); - src/multiboot.o(.rodata); - src/berry_fix_graphics.o(.rodata); - src/battle_controller_player_partner.o(.rodata); - src/mirage_tower.o(.rodata); - src/berry_fix_program.o(.rodata); - src/pokemon_summary_screen.o(.rodata); - src/pokedex_area_region_map.o(.rodata); - src/battle_pyramid_bag.o(.rodata); - src/pokenav.o(.rodata); - src/pokenav_main_menu.o(.rodata); - src/pokenav_list.o(.rodata); - src/pokenav_menu_handler.o(.rodata); - src/pokenav_menu_handler_gfx.o(.rodata); - src/pokenav_match_call_list.o(.rodata); - src/pokenav_match_call_gfx.o(.rodata); - src/pokenav_region_map.o(.rodata); - src/pokenav_conditions_gfx.o(.rodata); - src/pokenav_conditions_search_results.o(.rodata); - src/pokenav_ribbons_list.o(.rodata); - src/pokenav_ribbons_summary.o(.rodata); - src/pokenav_match_call_data.o(.rodata); - src/menu_specialized.o(.rodata); - src/ereader_helpers.o(.rodata); - src/faraway_island.o(.rodata); - src/ereader_screen.o(.rodata); - src/trainer_hill.o(.rodata); - src/rayquaza_scene.o(.rodata); - src/walda_phrase.o(.rodata); - src/gym_leader_rematch.o(.rodata); - src/battle_transition_frontier.o(.rodata); - src/text_input_strings.o(.rodata); - src/fonts.o(.rodata); - src/international_string_util.o(.rodata); - src/mystery_event_msg.o(.rodata); - data/mystery_gift.o(.rodata); - src/m4a_tables.o(.rodata); - data/sound_data.o(.rodata); - src/pokemon_sprite_visualizer.o(.rodata); - src/expansion_intro.o(.rodata); - } > ROM =0 - - song_data : - ALIGN(4) - { - sound/songs/midi/mus_dummy.o(.rodata); - sound/songs/midi/se_use_item.o(.rodata); - sound/songs/midi/se_pc_login.o(.rodata); - sound/songs/midi/se_pc_off.o(.rodata); - sound/songs/midi/se_pc_on.o(.rodata); - sound/songs/midi/se_select.o(.rodata); - sound/songs/se_win_open.o(.rodata); - sound/songs/se_wall_hit.o(.rodata); - sound/songs/midi/se_door.o(.rodata); - sound/songs/midi/se_exit.o(.rodata); - sound/songs/midi/se_ledge.o(.rodata); - sound/songs/midi/se_bike_bell.o(.rodata); - sound/songs/midi/se_not_effective.o(.rodata); - sound/songs/midi/se_effective.o(.rodata); - sound/songs/midi/se_super_effective.o(.rodata); - sound/songs/midi/se_ball_open.o(.rodata); - sound/songs/midi/se_faint.o(.rodata); - sound/songs/midi/se_flee.o(.rodata); - sound/songs/midi/se_sliding_door.o(.rodata); - sound/songs/midi/se_ship.o(.rodata); - sound/songs/midi/se_bang.o(.rodata); - sound/songs/midi/se_pin.o(.rodata); - sound/songs/midi/se_boo.o(.rodata); - sound/songs/midi/se_ball.o(.rodata); - sound/songs/midi/se_contest_place.o(.rodata); - sound/songs/midi/se_a.o(.rodata); - sound/songs/midi/se_i.o(.rodata); - sound/songs/midi/se_u.o(.rodata); - sound/songs/midi/se_e.o(.rodata); - sound/songs/midi/se_o.o(.rodata); - sound/songs/midi/se_n.o(.rodata); - sound/songs/midi/se_success.o(.rodata); - sound/songs/midi/se_failure.o(.rodata); - sound/songs/midi/se_exp.o(.rodata); - sound/songs/midi/se_bike_hop.o(.rodata); - sound/songs/midi/se_switch.o(.rodata); - sound/songs/midi/se_click.o(.rodata); - sound/songs/midi/se_fu_zaku.o(.rodata); - sound/songs/midi/se_contest_condition_lose.o(.rodata); - sound/songs/midi/se_lavaridge_fall_warp.o(.rodata); - sound/songs/midi/se_ice_stairs.o(.rodata); - sound/songs/midi/se_ice_break.o(.rodata); - sound/songs/midi/se_ice_crack.o(.rodata); - sound/songs/midi/se_fall.o(.rodata); - sound/songs/midi/se_unlock.o(.rodata); - sound/songs/midi/se_warp_in.o(.rodata); - sound/songs/midi/se_warp_out.o(.rodata); - sound/songs/midi/se_repel.o(.rodata); - sound/songs/midi/se_rotating_gate.o(.rodata); - sound/songs/midi/se_truck_move.o(.rodata); - sound/songs/midi/se_truck_stop.o(.rodata); - sound/songs/midi/se_truck_unload.o(.rodata); - sound/songs/midi/se_truck_door.o(.rodata); - sound/songs/midi/se_berry_blender.o(.rodata); - sound/songs/midi/se_card.o(.rodata); - sound/songs/midi/se_save.o(.rodata); - sound/songs/midi/se_ball_bounce_1.o(.rodata); - sound/songs/midi/se_ball_bounce_2.o(.rodata); - sound/songs/midi/se_ball_bounce_3.o(.rodata); - sound/songs/midi/se_ball_bounce_4.o(.rodata); - sound/songs/midi/se_ball_trade.o(.rodata); - sound/songs/midi/se_ball_throw.o(.rodata); - sound/songs/midi/se_note_c.o(.rodata); - sound/songs/midi/se_note_d.o(.rodata); - sound/songs/midi/se_note_e.o(.rodata); - sound/songs/midi/se_note_f.o(.rodata); - sound/songs/midi/se_note_g.o(.rodata); - sound/songs/midi/se_note_a.o(.rodata); - sound/songs/midi/se_note_b.o(.rodata); - sound/songs/midi/se_note_c_high.o(.rodata); - sound/songs/midi/se_puddle.o(.rodata); - sound/songs/midi/se_bridge_walk.o(.rodata); - sound/songs/midi/se_itemfinder.o(.rodata); - sound/songs/midi/se_ding_dong.o(.rodata); - sound/songs/midi/se_balloon_red.o(.rodata); - sound/songs/midi/se_balloon_blue.o(.rodata); - sound/songs/midi/se_balloon_yellow.o(.rodata); - sound/songs/midi/se_breakable_door.o(.rodata); - sound/songs/midi/se_mud_ball.o(.rodata); - sound/songs/midi/se_field_poison.o(.rodata); - sound/songs/midi/se_escalator.o(.rodata); - sound/songs/midi/se_thunderstorm.o(.rodata); - sound/songs/midi/se_thunderstorm_stop.o(.rodata); - sound/songs/midi/se_downpour.o(.rodata); - sound/songs/midi/se_downpour_stop.o(.rodata); - sound/songs/midi/se_rain.o(.rodata); - sound/songs/midi/se_rain_stop.o(.rodata); - sound/songs/midi/se_thunder.o(.rodata); - sound/songs/midi/se_thunder2.o(.rodata); - sound/songs/midi/se_elevator.o(.rodata); - sound/songs/midi/se_low_health.o(.rodata); - sound/songs/midi/se_exp_max.o(.rodata); - sound/songs/midi/se_roulette_ball.o(.rodata); - sound/songs/midi/se_roulette_ball2.o(.rodata); - sound/songs/midi/se_taillow_wing_flap.o(.rodata); - sound/songs/midi/se_shop.o(.rodata); - sound/songs/midi/se_contest_heart.o(.rodata); - sound/songs/midi/se_contest_curtain_rise.o(.rodata); - sound/songs/midi/se_contest_curtain_fall.o(.rodata); - sound/songs/midi/se_contest_icon_change.o(.rodata); - sound/songs/midi/se_contest_icon_clear.o(.rodata); - sound/songs/midi/se_contest_mons_turn.o(.rodata); - sound/songs/midi/se_shiny.o(.rodata); - sound/songs/midi/se_intro_blast.o(.rodata); - sound/songs/midi/se_mugshot.o(.rodata); - sound/songs/midi/se_applause.o(.rodata); - sound/songs/midi/se_vend.o(.rodata); - sound/songs/midi/se_orb.o(.rodata); - sound/songs/se_dex_scroll.o(.rodata); - sound/songs/se_dex_page.o(.rodata); - sound/songs/midi/se_pokenav_on.o(.rodata); - sound/songs/midi/se_pokenav_off.o(.rodata); - sound/songs/midi/se_dex_search.o(.rodata); - sound/songs/midi/se_egg_hatch.o(.rodata); - sound/songs/midi/se_ball_tray_enter.o(.rodata); - sound/songs/midi/se_ball_tray_ball.o(.rodata); - sound/songs/midi/se_ball_tray_exit.o(.rodata); - sound/songs/midi/se_glass_flute.o(.rodata); - sound/songs/se_m_thunderbolt.o(.rodata); - sound/songs/se_m_thunderbolt2.o(.rodata); - sound/songs/se_m_harden.o(.rodata); - sound/songs/se_m_nightmare.o(.rodata); - sound/songs/se_m_vital_throw.o(.rodata); - sound/songs/se_m_vital_throw2.o(.rodata); - sound/songs/se_m_bubble.o(.rodata); - sound/songs/se_m_bubble2.o(.rodata); - sound/songs/se_m_bubble3.o(.rodata); - sound/songs/se_m_rain_dance.o(.rodata); - sound/songs/midi/se_m_cut.o(.rodata); - sound/songs/se_m_string_shot.o(.rodata); - sound/songs/se_m_string_shot2.o(.rodata); - sound/songs/se_m_rock_throw.o(.rodata); - sound/songs/midi/se_m_gust.o(.rodata); - sound/songs/midi/se_m_gust2.o(.rodata); - sound/songs/midi/se_m_double_slap.o(.rodata); - sound/songs/se_m_double_team.o(.rodata); - sound/songs/midi/se_m_razor_wind.o(.rodata); - sound/songs/se_m_icy_wind.o(.rodata); - sound/songs/se_m_thunder_wave.o(.rodata); - sound/songs/midi/se_m_comet_punch.o(.rodata); - sound/songs/midi/se_m_mega_kick.o(.rodata); - sound/songs/midi/se_m_mega_kick2.o(.rodata); - sound/songs/se_m_crabhammer.o(.rodata); - sound/songs/midi/se_m_jump_kick.o(.rodata); - sound/songs/se_m_flame_wheel.o(.rodata); - sound/songs/se_m_flame_wheel2.o(.rodata); - sound/songs/se_m_flamethrower.o(.rodata); - sound/songs/midi/se_m_fire_punch.o(.rodata); - sound/songs/se_m_toxic.o(.rodata); - sound/songs/se_m_sacred_fire.o(.rodata); - sound/songs/se_m_sacred_fire2.o(.rodata); - sound/songs/se_m_ember.o(.rodata); - sound/songs/midi/se_m_take_down.o(.rodata); - sound/songs/se_m_blizzard.o(.rodata); - sound/songs/se_m_blizzard2.o(.rodata); - sound/songs/midi/se_m_scratch.o(.rodata); - sound/songs/midi/se_m_vicegrip.o(.rodata); - sound/songs/midi/se_m_wing_attack.o(.rodata); - sound/songs/midi/se_m_fly.o(.rodata); - sound/songs/midi/se_m_sand_attack.o(.rodata); - sound/songs/midi/se_m_razor_wind2.o(.rodata); - sound/songs/se_m_bite.o(.rodata); - sound/songs/midi/se_m_headbutt.o(.rodata); - sound/songs/se_m_surf.o(.rodata); - sound/songs/se_m_hydro_pump.o(.rodata); - sound/songs/se_m_whirlpool.o(.rodata); - sound/songs/midi/se_m_horn_attack.o(.rodata); - sound/songs/midi/se_m_tail_whip.o(.rodata); - sound/songs/se_m_mist.o(.rodata); - sound/songs/se_m_poison_powder.o(.rodata); - sound/songs/midi/se_m_bind.o(.rodata); - sound/songs/se_m_dragon_rage.o(.rodata); - sound/songs/se_m_sing.o(.rodata); - sound/songs/se_m_perish_song.o(.rodata); - sound/songs/midi/se_m_pay_day.o(.rodata); - sound/songs/se_m_dig.o(.rodata); - sound/songs/se_m_dizzy_punch.o(.rodata); - sound/songs/se_m_self_destruct.o(.rodata); - sound/songs/se_m_explosion.o(.rodata); - sound/songs/se_m_absorb_2.o(.rodata); - sound/songs/se_m_absorb.o(.rodata); - sound/songs/se_m_screech.o(.rodata); - sound/songs/se_m_bubble_beam.o(.rodata); - sound/songs/se_m_bubble_beam2.o(.rodata); - sound/songs/se_m_supersonic.o(.rodata); - sound/songs/se_m_belly_drum.o(.rodata); - sound/songs/se_m_metronome.o(.rodata); - sound/songs/se_m_bonemerang.o(.rodata); - sound/songs/se_m_lick.o(.rodata); - sound/songs/se_m_psybeam.o(.rodata); - sound/songs/se_m_faint_attack.o(.rodata); - sound/songs/midi/se_m_swords_dance.o(.rodata); - sound/songs/midi/se_m_leer.o(.rodata); - sound/songs/se_m_swagger.o(.rodata); - sound/songs/se_m_swagger2.o(.rodata); - sound/songs/se_m_heal_bell.o(.rodata); - sound/songs/se_m_confuse_ray.o(.rodata); - sound/songs/se_m_snore.o(.rodata); - sound/songs/se_m_brick_break.o(.rodata); - sound/songs/se_m_giga_drain.o(.rodata); - sound/songs/se_m_psybeam2.o(.rodata); - sound/songs/se_m_solar_beam.o(.rodata); - sound/songs/se_m_petal_dance.o(.rodata); - sound/songs/se_m_teleport.o(.rodata); - sound/songs/se_m_minimize.o(.rodata); - sound/songs/se_m_sketch.o(.rodata); - sound/songs/se_m_swift.o(.rodata); - sound/songs/se_m_reflect.o(.rodata); - sound/songs/se_m_barrier.o(.rodata); - sound/songs/se_m_detect.o(.rodata); - sound/songs/se_m_lock_on.o(.rodata); - sound/songs/se_m_moonlight.o(.rodata); - sound/songs/se_m_charm.o(.rodata); - sound/songs/se_m_charge.o(.rodata); - sound/songs/se_m_strength.o(.rodata); - sound/songs/se_m_hyper_beam.o(.rodata); - sound/songs/se_m_waterfall.o(.rodata); - sound/songs/se_m_reversal.o(.rodata); - sound/songs/se_m_acid_armor.o(.rodata); - sound/songs/se_m_sandstorm.o(.rodata); - sound/songs/se_m_tri_attack.o(.rodata); - sound/songs/se_m_tri_attack2.o(.rodata); - sound/songs/se_m_encore.o(.rodata); - sound/songs/se_m_encore2.o(.rodata); - sound/songs/se_m_baton_pass.o(.rodata); - sound/songs/se_m_milk_drink.o(.rodata); - sound/songs/se_m_attract.o(.rodata); - sound/songs/se_m_attract2.o(.rodata); - sound/songs/se_m_morning_sun.o(.rodata); - sound/songs/se_m_flatter.o(.rodata); - sound/songs/se_m_sand_tomb.o(.rodata); - sound/songs/se_m_grasswhistle.o(.rodata); - sound/songs/se_m_spit_up.o(.rodata); - sound/songs/se_m_dive.o(.rodata); - sound/songs/se_m_earthquake.o(.rodata); - sound/songs/se_m_twister.o(.rodata); - sound/songs/se_m_sweet_scent.o(.rodata); - sound/songs/se_m_yawn.o(.rodata); - sound/songs/se_m_sky_uppercut.o(.rodata); - sound/songs/se_m_stat_increase.o(.rodata); - sound/songs/se_m_heat_wave.o(.rodata); - sound/songs/se_m_uproar.o(.rodata); - sound/songs/se_m_hail.o(.rodata); - sound/songs/se_m_cosmic_power.o(.rodata); - sound/songs/se_m_teeter_dance.o(.rodata); - sound/songs/se_m_stat_decrease.o(.rodata); - sound/songs/se_m_haze.o(.rodata); - sound/songs/se_m_hyper_beam2.o(.rodata); - sound/songs/midi/se_rg_door.o(.rodata); - sound/songs/midi/se_rg_card_flip.o(.rodata); - sound/songs/midi/se_rg_card_flipping.o(.rodata); - sound/songs/midi/se_rg_card_open.o(.rodata); - sound/songs/midi/se_rg_bag_cursor.o(.rodata); - sound/songs/midi/se_rg_bag_pocket.o(.rodata); - sound/songs/midi/se_rg_ball_click.o(.rodata); - sound/songs/midi/se_rg_shop.o(.rodata); - sound/songs/midi/se_rg_ss_anne_horn.o(.rodata); - sound/songs/midi/se_rg_help_open.o(.rodata); - sound/songs/midi/se_rg_help_close.o(.rodata); - sound/songs/midi/se_rg_help_error.o(.rodata); - sound/songs/midi/se_rg_deoxys_move.o(.rodata); - sound/songs/midi/se_rg_poke_jump_success.o(.rodata); - sound/songs/midi/se_rg_poke_jump_failure.o(.rodata); - sound/songs/midi/se_pokenav_call.o(.rodata); - sound/songs/midi/se_pokenav_hang_up.o(.rodata); - sound/songs/midi/se_arena_timeup1.o(.rodata); - sound/songs/midi/se_arena_timeup2.o(.rodata); - sound/songs/midi/se_pike_curtain_close.o(.rodata); - sound/songs/midi/se_pike_curtain_open.o(.rodata); - sound/songs/midi/se_sudowoodo_shake.o(.rodata); - sound/songs/midi/mus_littleroot_test.o(.rodata); - sound/songs/midi/mus_gsc_route38.o(.rodata); - sound/songs/midi/mus_caught.o(.rodata); - sound/songs/midi/mus_victory_wild.o(.rodata); - sound/songs/midi/mus_victory_gym_leader.o(.rodata); - sound/songs/midi/mus_victory_league.o(.rodata); - sound/songs/midi/mus_c_comm_center.o(.rodata); - sound/songs/midi/mus_gsc_pewter.o(.rodata); - sound/songs/midi/mus_c_vs_legend_beast.o(.rodata); - sound/songs/midi/mus_route101.o(.rodata); - sound/songs/midi/mus_route110.o(.rodata); - sound/songs/midi/mus_route120.o(.rodata); - sound/songs/midi/mus_petalburg.o(.rodata); - sound/songs/midi/mus_oldale.o(.rodata); - sound/songs/midi/mus_gym.o(.rodata); - sound/songs/midi/mus_surf.o(.rodata); - sound/songs/midi/mus_petalburg_woods.o(.rodata); - sound/songs/midi/mus_level_up.o(.rodata); - sound/songs/midi/mus_heal.o(.rodata); - sound/songs/midi/mus_obtain_badge.o(.rodata); - sound/songs/midi/mus_obtain_item.o(.rodata); - sound/songs/midi/mus_evolved.o(.rodata); - sound/songs/midi/mus_obtain_tmhm.o(.rodata); - sound/songs/midi/mus_lilycove_museum.o(.rodata); - sound/songs/midi/mus_route122.o(.rodata); - sound/songs/midi/mus_oceanic_museum.o(.rodata); - sound/songs/midi/mus_evolution_intro.o(.rodata); - sound/songs/midi/mus_evolution.o(.rodata); - sound/songs/midi/mus_move_deleted.o(.rodata); - sound/songs/midi/mus_encounter_girl.o(.rodata); - sound/songs/midi/mus_encounter_male.o(.rodata); - sound/songs/midi/mus_abandoned_ship.o(.rodata); - sound/songs/midi/mus_fortree.o(.rodata); - sound/songs/midi/mus_birch_lab.o(.rodata); - sound/songs/midi/mus_b_tower_rs.o(.rodata); - sound/songs/midi/mus_encounter_swimmer.o(.rodata); - sound/songs/midi/mus_cave_of_origin.o(.rodata); - sound/songs/midi/mus_obtain_berry.o(.rodata); - sound/songs/midi/mus_awaken_legend.o(.rodata); - sound/songs/midi/mus_slots_jackpot.o(.rodata); - sound/songs/midi/mus_slots_win.o(.rodata); - sound/songs/midi/mus_too_bad.o(.rodata); - sound/songs/midi/mus_roulette.o(.rodata); - sound/songs/midi/mus_link_contest_p1.o(.rodata); - sound/songs/midi/mus_link_contest_p2.o(.rodata); - sound/songs/midi/mus_link_contest_p3.o(.rodata); - sound/songs/midi/mus_link_contest_p4.o(.rodata); - sound/songs/midi/mus_encounter_rich.o(.rodata); - sound/songs/midi/mus_verdanturf.o(.rodata); - sound/songs/midi/mus_rustboro.o(.rodata); - sound/songs/midi/mus_poke_center.o(.rodata); - sound/songs/midi/mus_route104.o(.rodata); - sound/songs/midi/mus_route119.o(.rodata); - sound/songs/midi/mus_cycling.o(.rodata); - sound/songs/midi/mus_poke_mart.o(.rodata); - sound/songs/midi/mus_littleroot.o(.rodata); - sound/songs/midi/mus_mt_chimney.o(.rodata); - sound/songs/midi/mus_encounter_female.o(.rodata); - sound/songs/midi/mus_lilycove.o(.rodata); - sound/songs/midi/mus_route111.o(.rodata); - sound/songs/midi/mus_help.o(.rodata); - sound/songs/midi/mus_underwater.o(.rodata); - sound/songs/midi/mus_victory_trainer.o(.rodata); - sound/songs/midi/mus_title.o(.rodata); - sound/songs/midi/mus_intro.o(.rodata); - sound/songs/midi/mus_encounter_may.o(.rodata); - sound/songs/midi/mus_encounter_intense.o(.rodata); - sound/songs/midi/mus_encounter_cool.o(.rodata); - sound/songs/midi/mus_route113.o(.rodata); - sound/songs/midi/mus_encounter_aqua.o(.rodata); - sound/songs/midi/mus_follow_me.o(.rodata); - sound/songs/midi/mus_encounter_brendan.o(.rodata); - sound/songs/midi/mus_ever_grande.o(.rodata); - sound/songs/midi/mus_encounter_suspicious.o(.rodata); - sound/songs/midi/mus_victory_aqua_magma.o(.rodata); - sound/songs/midi/mus_cable_car.o(.rodata); - sound/songs/midi/mus_game_corner.o(.rodata); - sound/songs/midi/mus_dewford.o(.rodata); - sound/songs/midi/mus_safari_zone.o(.rodata); - sound/songs/midi/mus_victory_road.o(.rodata); - sound/songs/midi/mus_aqua_magma_hideout.o(.rodata); - sound/songs/midi/mus_sailing.o(.rodata); - sound/songs/midi/mus_mt_pyre.o(.rodata); - sound/songs/midi/mus_slateport.o(.rodata); - sound/songs/midi/mus_mt_pyre_exterior.o(.rodata); - sound/songs/midi/mus_school.o(.rodata); - sound/songs/midi/mus_hall_of_fame.o(.rodata); - sound/songs/midi/mus_fallarbor.o(.rodata); - sound/songs/midi/mus_sealed_chamber.o(.rodata); - sound/songs/midi/mus_contest_winner.o(.rodata); - sound/songs/midi/mus_contest.o(.rodata); - sound/songs/midi/mus_encounter_magma.o(.rodata); - sound/songs/midi/mus_intro_battle.o(.rodata); - sound/songs/midi/mus_abnormal_weather.o(.rodata); - sound/songs/midi/mus_weather_groudon.o(.rodata); - sound/songs/midi/mus_sootopolis.o(.rodata); - sound/songs/midi/mus_contest_results.o(.rodata); - sound/songs/midi/mus_hall_of_fame_room.o(.rodata); - sound/songs/midi/mus_trick_house.o(.rodata); - sound/songs/midi/mus_encounter_twins.o(.rodata); - sound/songs/midi/mus_encounter_elite_four.o(.rodata); - sound/songs/midi/mus_encounter_hiker.o(.rodata); - sound/songs/midi/mus_contest_lobby.o(.rodata); - sound/songs/midi/mus_encounter_interviewer.o(.rodata); - sound/songs/midi/mus_encounter_champion.o(.rodata); - sound/songs/midi/mus_credits.o(.rodata); - sound/songs/midi/mus_end.o(.rodata); - sound/songs/midi/mus_b_frontier.o(.rodata); - sound/songs/midi/mus_b_arena.o(.rodata); - sound/songs/midi/mus_obtain_b_points.o(.rodata); - sound/songs/midi/mus_register_match_call.o(.rodata); - sound/songs/midi/mus_b_pyramid.o(.rodata); - sound/songs/midi/mus_b_pyramid_top.o(.rodata); - sound/songs/midi/mus_b_palace.o(.rodata); - sound/songs/midi/mus_rayquaza_appears.o(.rodata); - sound/songs/midi/mus_b_tower.o(.rodata); - sound/songs/midi/mus_obtain_symbol.o(.rodata); - sound/songs/midi/mus_b_dome.o(.rodata); - sound/songs/midi/mus_b_pike.o(.rodata); - sound/songs/midi/mus_b_factory.o(.rodata); - sound/songs/midi/mus_vs_rayquaza.o(.rodata); - sound/songs/midi/mus_vs_frontier_brain.o(.rodata); - sound/songs/midi/mus_vs_mew.o(.rodata); - sound/songs/midi/mus_b_dome_lobby.o(.rodata); - sound/songs/midi/mus_vs_wild.o(.rodata); - sound/songs/midi/mus_vs_aqua_magma.o(.rodata); - sound/songs/midi/mus_vs_trainer.o(.rodata); - sound/songs/midi/mus_vs_gym_leader.o(.rodata); - sound/songs/midi/mus_vs_champion.o(.rodata); - sound/songs/midi/mus_vs_regi.o(.rodata); - sound/songs/midi/mus_vs_kyogre_groudon.o(.rodata); - sound/songs/midi/mus_vs_rival.o(.rodata); - sound/songs/midi/mus_vs_elite_four.o(.rodata); - sound/songs/midi/mus_vs_aqua_magma_leader.o(.rodata); - sound/songs/midi/mus_rg_follow_me.o(.rodata); - sound/songs/midi/mus_rg_game_corner.o(.rodata); - sound/songs/midi/mus_rg_rocket_hideout.o(.rodata); - sound/songs/midi/mus_rg_gym.o(.rodata); - sound/songs/midi/mus_rg_jigglypuff.o(.rodata); - sound/songs/midi/mus_rg_intro_fight.o(.rodata); - sound/songs/midi/mus_rg_title.o(.rodata); - sound/songs/midi/mus_rg_cinnabar.o(.rodata); - sound/songs/midi/mus_rg_lavender.o(.rodata); - sound/songs/midi/mus_rg_heal.o(.rodata); - sound/songs/midi/mus_rg_cycling.o(.rodata); - sound/songs/midi/mus_rg_encounter_rocket.o(.rodata); - sound/songs/midi/mus_rg_encounter_girl.o(.rodata); - sound/songs/midi/mus_rg_encounter_boy.o(.rodata); - sound/songs/midi/mus_rg_hall_of_fame.o(.rodata); - sound/songs/midi/mus_rg_viridian_forest.o(.rodata); - sound/songs/midi/mus_rg_mt_moon.o(.rodata); - sound/songs/midi/mus_rg_poke_mansion.o(.rodata); - sound/songs/midi/mus_rg_credits.o(.rodata); - sound/songs/midi/mus_rg_route1.o(.rodata); - sound/songs/midi/mus_rg_route24.o(.rodata); - sound/songs/midi/mus_rg_route3.o(.rodata); - sound/songs/midi/mus_rg_route11.o(.rodata); - sound/songs/midi/mus_rg_victory_road.o(.rodata); - sound/songs/midi/mus_rg_vs_gym_leader.o(.rodata); - sound/songs/midi/mus_rg_vs_trainer.o(.rodata); - sound/songs/midi/mus_rg_vs_wild.o(.rodata); - sound/songs/midi/mus_rg_vs_champion.o(.rodata); - sound/songs/midi/mus_rg_pallet.o(.rodata); - sound/songs/midi/mus_rg_oak_lab.o(.rodata); - sound/songs/midi/mus_rg_oak.o(.rodata); - sound/songs/midi/mus_rg_poke_center.o(.rodata); - sound/songs/midi/mus_rg_ss_anne.o(.rodata); - sound/songs/midi/mus_rg_surf.o(.rodata); - sound/songs/midi/mus_rg_poke_tower.o(.rodata); - sound/songs/midi/mus_rg_silph.o(.rodata); - sound/songs/midi/mus_rg_fuchsia.o(.rodata); - sound/songs/midi/mus_rg_celadon.o(.rodata); - sound/songs/midi/mus_rg_victory_trainer.o(.rodata); - sound/songs/midi/mus_rg_victory_wild.o(.rodata); - sound/songs/midi/mus_rg_victory_gym_leader.o(.rodata); - sound/songs/midi/mus_rg_vermillion.o(.rodata); - sound/songs/midi/mus_rg_pewter.o(.rodata); - sound/songs/midi/mus_rg_encounter_rival.o(.rodata); - sound/songs/midi/mus_rg_rival_exit.o(.rodata); - sound/songs/midi/mus_rg_dex_rating.o(.rodata); - sound/songs/midi/mus_rg_obtain_key_item.o(.rodata); - sound/songs/midi/mus_rg_caught_intro.o(.rodata); - sound/songs/midi/mus_rg_photo.o(.rodata); - sound/songs/midi/mus_rg_game_freak.o(.rodata); - sound/songs/midi/mus_rg_caught.o(.rodata); - sound/songs/midi/mus_rg_new_game_instruct.o(.rodata); - sound/songs/midi/mus_rg_new_game_intro.o(.rodata); - sound/songs/midi/mus_rg_new_game_exit.o(.rodata); - sound/songs/midi/mus_rg_poke_jump.o(.rodata); - sound/songs/midi/mus_rg_union_room.o(.rodata); - sound/songs/midi/mus_rg_net_center.o(.rodata); - sound/songs/midi/mus_rg_mystery_gift.o(.rodata); - sound/songs/midi/mus_rg_berry_pick.o(.rodata); - sound/songs/midi/mus_rg_sevii_cave.o(.rodata); - sound/songs/midi/mus_rg_teachy_tv_show.o(.rodata); - sound/songs/midi/mus_rg_sevii_route.o(.rodata); - sound/songs/midi/mus_rg_sevii_dungeon.o(.rodata); - sound/songs/midi/mus_rg_sevii_123.o(.rodata); - sound/songs/midi/mus_rg_sevii_45.o(.rodata); - sound/songs/midi/mus_rg_sevii_67.o(.rodata); - sound/songs/midi/mus_rg_poke_flute.o(.rodata); - sound/songs/midi/mus_rg_vs_deoxys.o(.rodata); - sound/songs/midi/mus_rg_vs_mewtwo.o(.rodata); - sound/songs/midi/mus_rg_vs_legend.o(.rodata); - sound/songs/midi/mus_rg_encounter_gym_leader.o(.rodata); - sound/songs/midi/mus_rg_encounter_deoxys.o(.rodata); - sound/songs/midi/mus_rg_trainer_tower.o(.rodata); - sound/songs/midi/mus_rg_slow_pallet.o(.rodata); - sound/songs/midi/mus_rg_teachy_tv_menu.o(.rodata); - sound/songs/midi/ph_trap_blend.o(.rodata); - sound/songs/midi/ph_trap_held.o(.rodata); - sound/songs/midi/ph_trap_solo.o(.rodata); - sound/songs/midi/ph_face_blend.o(.rodata); - sound/songs/midi/ph_face_held.o(.rodata); - sound/songs/midi/ph_face_solo.o(.rodata); - sound/songs/midi/ph_cloth_blend.o(.rodata); - sound/songs/midi/ph_cloth_held.o(.rodata); - sound/songs/midi/ph_cloth_solo.o(.rodata); - sound/songs/midi/ph_dress_blend.o(.rodata); - sound/songs/midi/ph_dress_held.o(.rodata); - sound/songs/midi/ph_dress_solo.o(.rodata); - sound/songs/midi/ph_fleece_blend.o(.rodata); - sound/songs/midi/ph_fleece_held.o(.rodata); - sound/songs/midi/ph_fleece_solo.o(.rodata); - sound/songs/midi/ph_kit_blend.o(.rodata); - sound/songs/midi/ph_kit_held.o(.rodata); - sound/songs/midi/ph_kit_solo.o(.rodata); - sound/songs/midi/ph_price_blend.o(.rodata); - sound/songs/midi/ph_price_held.o(.rodata); - sound/songs/midi/ph_price_solo.o(.rodata); - sound/songs/midi/ph_lot_blend.o(.rodata); - sound/songs/midi/ph_lot_held.o(.rodata); - sound/songs/midi/ph_lot_solo.o(.rodata); - sound/songs/midi/ph_goat_blend.o(.rodata); - sound/songs/midi/ph_goat_held.o(.rodata); - sound/songs/midi/ph_goat_solo.o(.rodata); - sound/songs/midi/ph_thought_blend.o(.rodata); - sound/songs/midi/ph_thought_held.o(.rodata); - sound/songs/midi/ph_thought_solo.o(.rodata); - sound/songs/midi/ph_choice_blend.o(.rodata); - sound/songs/midi/ph_choice_held.o(.rodata); - sound/songs/midi/ph_choice_solo.o(.rodata); - sound/songs/midi/ph_mouth_blend.o(.rodata); - sound/songs/midi/ph_mouth_held.o(.rodata); - sound/songs/midi/ph_mouth_solo.o(.rodata); - sound/songs/midi/ph_foot_blend.o(.rodata); - sound/songs/midi/ph_foot_held.o(.rodata); - sound/songs/midi/ph_foot_solo.o(.rodata); - sound/songs/midi/ph_goose_blend.o(.rodata); - sound/songs/midi/ph_goose_held.o(.rodata); - sound/songs/midi/ph_goose_solo.o(.rodata); - sound/songs/midi/ph_strut_blend.o(.rodata); - sound/songs/midi/ph_strut_held.o(.rodata); - sound/songs/midi/ph_strut_solo.o(.rodata); - sound/songs/midi/ph_cure_blend.o(.rodata); - sound/songs/midi/ph_cure_held.o(.rodata); - sound/songs/midi/ph_cure_solo.o(.rodata); - sound/songs/midi/ph_nurse_blend.o(.rodata); - sound/songs/midi/ph_nurse_held.o(.rodata); - sound/songs/midi/ph_nurse_solo.o(.rodata); - } > ROM =0 - - lib_rodata : - SUBALIGN(4) - { - src/m4a.o(.rodata); - src/agb_flash.o(.rodata); - src/agb_flash_1m.o(.rodata); - src/agb_flash_mx.o(.rodata); - src/agb_flash_le.o(.rodata); - src/siirtc.o(.rodata); - src/librfu_rfu.o(.rodata); - src/librfu_sio32id.o(.rodata); - *libgcc.a:_divdi3.o(.rodata); - *libgcc.a:_udivdi3.o(.rodata); - *libc.a:memcpy.o(.rodata); - *libc.a:memset.o(.rodata); - *libc.a:strcmp.o(.rodata); - *libc.a:strcpy.o(.rodata); - *libc.a:impure.o(.rodata); - *libc.a:vsprintf.o(.rodata); - *libc.a:vfprintf.o(.rodata); - *libc.a:wsetup.o(.rodata); - *libc.a:dtoa.o(.rodata); - *libc.a:fflush.o(.rodata); - *libc.a:findfp.o(.rodata); - *libc.a:freer.o(.rodata); - *libc.a:mtrim.o(.rodata); - *libc.a:fvwrite.o(.rodata); - *libc.a:fwalk.o(.rodata); - *libc.a:locale.o(.rodata); - *libc.a:makebuf.o(.rodata); - *libc.a:mallocr.o(.rodata); - *libc.a:mbtowc_r.o(.rodata); - *libc.a:memchr.o(.rodata); - *libc.a:memmove.o(.rodata); - *libc.a:mlock.o(.rodata); - *libc.a:mprec.o(.rodata); - *libc.a:s_isinf.o(.rodata); - *libc.a:s_isnan.o(.rodata); - *libc.a:sbrkr.o(.rodata); - *libc.a:stdio.o(.rodata); - *libc.a:strlen.o(.rodata); - *libc.a:syscalls.o(.rodata); - *libc.a:writer.o(.rodata); - *libc.a:callocr.o(.rodata); - *libc.a:closer.o(.rodata); - *libc.a:errno.o(.rodata); - *libc.a:fstatr.o(.rodata); - *libc.a:libcfunc.o(.rodata); - *libc.a:lseekr.o(.rodata); - *libc.a:readr.o(.rodata); - src/libisagbprn.o(.rodata); - } > ROM =0 - - multiboot_data : - ALIGN(4) - { - data/multiboot_ereader.o(.rodata); - data/multiboot_berry_glitch_fix.o(.rodata); - data/multiboot_pokemon_colosseum.o(.rodata); - } > ROM =0 - - gfx_data : - ALIGN(4) - { - src/graphics.o(.rodata); - } > ROM =0 - - extra : - ALIGN(4) - { - src/*.o(.text); - gflib/*.o(.text); - src/*.o(.rodata); - gflib/*.o(.rodata); - data/*.o(.rodata); - } > ROM = 0 - - .data.iwram : - ALIGN(4) - { - __iwram_lma = .; - . = . + (__iwram_end - __iwram_start); - } > ROM = 0 - - .data.ewram : - ALIGN(4) - { - __ewram_lma = .; - . = . + (__ewram_end - __ewram_start); - } > ROM = 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. */ - - /* DWARF 1 */ - .debug 0 : { *(.debug) } - .line 0 : { *(.line) } - - /* GNU DWARF 1 extensions */ - .debug_srcinfo 0 : { *(.debug_srcinfo) } - .debug_sfnames 0 : { *(.debug_sfnames) } - - /* DWARF 1.1 and DWARF 2 */ - .debug_aranges 0 : { *(.debug_aranges) } - .debug_pubnames 0 : { *(.debug_pubnames) } - - /* DWARF 2 */ - .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } - .debug_abbrev 0 : { *(.debug_abbrev) } - .debug_line 0 : { *(.debug_line) } - .debug_frame 0 : { *(.debug_frame) } - .debug_str 0 : { *(.debug_str) } - .debug_loc 0 : { *(.debug_loc) } - .debug_macinfo 0 : { *(.debug_macinfo) } - - /* Discard everything not specifically mentioned above. */ - /DISCARD/ : - { - *(*); - } -} diff --git a/migration_scripts/1.8/item_ball_refactor.py b/migration_scripts/1.8/item_ball_refactor.py index f121978ec8..83d6f9f167 100755 --- a/migration_scripts/1.8/item_ball_refactor.py +++ b/migration_scripts/1.8/item_ball_refactor.py @@ -81,5 +81,5 @@ for file in pories_to_check: raw = re.sub("script %s[ \n]*\{[ \n]*finditem\((.*)\)[ \n]*\}[ \n]*" % unused, "", raw) with open(file, "w") as f2: f2.write(raw) - + print("Done!") diff --git a/migration_scripts/1.9/battle_anim_moves_refactor.py b/migration_scripts/1.9/battle_anim_moves_refactor.py index 116d3964c0..a7adac98ff 100644 --- a/migration_scripts/1.9/battle_anim_moves_refactor.py +++ b/migration_scripts/1.9/battle_anim_moves_refactor.py @@ -37,7 +37,7 @@ for line in lines: comment_split = line.split('//') if move and IsCommaMissing(comment_split[0]): line = comment_split[0].removesuffix('\n') + ',' + line[len(comment_split[0]):-1] + '\n' - + moves_info_lines.append(line) diff --git a/spritesheet_rules.mk b/spritesheet_rules.mk index a50f48c707..e97b1b5ffe 100644 --- a/spritesheet_rules.mk +++ b/spritesheet_rules.mk @@ -731,7 +731,7 @@ $(FLDEFFGFXDIR)/secret_power_tree.4bpp: %.4bpp: %.png $(FLDEFFGFXDIR)/record_mix_lights.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 1 - + $(POKEMONGFXDIR)/question_mark/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -2976,6 +2976,9 @@ $(POKEMONGFXDIR)/noivern/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/xerneas/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 8 -mheight 8 +$(POKEMONGFXDIR)/xerneas/active/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 8 -mheight 8 + $(POKEMONGFXDIR)/yveltal/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 8 -mheight 8 @@ -3471,6 +3474,9 @@ $(POKEMONGFXDIR)/eiscue/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/indeedee/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/indeedee/female/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(POKEMONGFXDIR)/morpeko/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 @@ -3993,6 +3999,420 @@ $(POKEMONGFXDIR)/exeggutor/alolan/overworld.4bpp: %.4bpp: %.png $(POKEMONGFXDIR)/marowak/alolan/overworld.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(POKEMONGFXDIR)/wooper/wooper_paldean/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/clodsire/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/sprigatito/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/floragato/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/meowscarada/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/fuecoco/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/crocalor/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/skeledirge/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/quaxly/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/quaxwell/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/quaquaval/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/lechonk/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/oinkologne/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/oinkologne/female/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/tarountula/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/spidops/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/nymble/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/lokix/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/pawmi/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/pawmo/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/pawmot/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/tandemaus/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/maushold/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/maushold/four/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/fidough/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/dachsbun/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/smoliv/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/dolliv/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/arboliva/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/squawkabilly/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/squawkabilly/blue_plumage/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/squawkabilly/white_plumage/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/squawkabilly/yellow_plumage/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/nacli/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/naclstack/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/garganacl/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/charcadet/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/armarouge/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/ceruledge/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/tadbulb/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/bellibolt/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/wattrel/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/kilowattrel/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/maschiff/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/mabosstiff/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/shroodle/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/grafaiai/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/bramblin/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/brambleghast/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/toedscool/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/toedscruel/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/klawf/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/capsakid/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/scovillain/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/rellor/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/rabsca/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/flittle/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/espathra/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/tinkatink/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/tinkatuff/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/tinkaton/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/wiglett/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/wugtrio/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/bombirdier/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/finizen/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/palafin/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/palafin/hero/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/varoom/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/revavroom/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/cyclizar/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/orthworm/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/glimmet/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/glimmora/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/greavard/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/houndstone/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/flamigo/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/cetoddle/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/cetitan/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/kingambit/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 8 -mheight 8 + +$(POKEMONGFXDIR)/veluza/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/dondozo/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 8 -mheight 8 + +$(POKEMONGFXDIR)/tatsugiri/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/tatsugiri/droopy/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/tatsugiri/stretchy/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/annihilape/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/farigiraf/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/dudunsparce/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/dudunsparce/three_segment/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 8 -mheight 8 + +$(POKEMONGFXDIR)/great_tusk/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/scream_tail/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/brute_bonnet/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/slither_wing/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/flutter_mane/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/sandy_shocks/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/iron_treads/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/iron_bundle/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/iron_hands/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/iron_jugulis/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/iron_moth/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/iron_thorns/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/frigibax/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/arctibax/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/baxcalibur/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/gimmighoul/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/gholdengo/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/wo_chien/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/chien_pao/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/ting_lu/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/chi_yu/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/roaring_moon/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/iron_valiant/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/koraidon/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 8 -mheight 8 + +$(POKEMONGFXDIR)/miraidon/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 8 -mheight 8 + +$(POKEMONGFXDIR)/iron_leaves/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/walking_wake/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/dipplin/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/poltchageist/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/sinistcha/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/okidogi/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/munkidori/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/fezandipiti/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/ogerpon/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/ogerpon/cornerstone/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/ogerpon/hearthflame/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/ogerpon/wellspring/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/hydrapple/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 8 -mheight 8 + +$(POKEMONGFXDIR)/archaludon/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/gouging_fire/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/raging_bolt/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 8 -mheight 8 + +$(POKEMONGFXDIR)/iron_boulder/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/iron_crown/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/terapagos/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/terapagos/terastal/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/pecharunt/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/tauros/paldean_aqua_breed/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/tauros/paldean_blaze_breed/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/tauros/paldean_combat_breed/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(POKEMONGFXDIR)/ursaluna/bloodmoon/overworld.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(MISCGFXDIR)/emotes.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 63bab46ec9..af6557e967 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -46,7 +46,7 @@ EWRAM_DATA AiScoreFunc sDynamicAiFunc = NULL; static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); static s32 AI_TryToFaint(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); -static s32 AI_SetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); +static s32 AI_ForceSetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); static s32 AI_PreferStrongestMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); static s32 AI_PreferBatonPass(u32 battlerAtk, u32 battlerDef, u32 move, s32 score); @@ -64,7 +64,7 @@ static s32 (*const sBattleAiFuncTable[])(u32, u32, u32, s32) = [0] = AI_CheckBadMove, // AI_FLAG_CHECK_BAD_MOVE [1] = AI_TryToFaint, // AI_FLAG_TRY_TO_FAINT [2] = AI_CheckViability, // AI_FLAG_CHECK_VIABILITY - [3] = AI_SetupFirstTurn, // AI_FLAG_SETUP_FIRST_TURN + [3] = AI_ForceSetupFirstTurn, // AI_FLAG_FORCE_SETUP_FIRST_TURN [4] = AI_Risky, // AI_FLAG_RISKY [5] = AI_PreferStrongestMove, // AI_FLAG_PREFER_STRONGEST_MOVE [6] = AI_PreferBatonPass, // AI_FLAG_PREFER_BATON_PASS @@ -174,7 +174,7 @@ static u32 GetAiFlags(u16 trainerId) flags = GetTrainerAIFlagsFromId(trainerId); } - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { flags |= AI_FLAG_DOUBLE_BATTLE; } @@ -196,14 +196,12 @@ void BattleAI_SetupFlags(void) else AI_THINKING_STRUCT->aiFlags[B_POSITION_PLAYER_LEFT] = 0; // player has no AI -#if DEBUG_OVERWORLD_MENU == TRUE - if (gIsDebugBattle) + if (DEBUG_OVERWORLD_MENU && gIsDebugBattle) { AI_THINKING_STRUCT->aiFlags[B_POSITION_OPPONENT_LEFT] = gDebugAIFlags; AI_THINKING_STRUCT->aiFlags[B_POSITION_OPPONENT_RIGHT] = gDebugAIFlags; return; } -#endif if (IsWildMonSmart() && !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER))) { @@ -224,7 +222,7 @@ void BattleAI_SetupFlags(void) { AI_THINKING_STRUCT->aiFlags[B_POSITION_PLAYER_RIGHT] = GetAiFlags(gPartnerTrainerId - TRAINER_PARTNER(PARTNER_NONE)); } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsAiVsAiBattle()) + else if (IsDoubleBattle() && IsAiVsAiBattle()) { AI_THINKING_STRUCT->aiFlags[B_POSITION_PLAYER_RIGHT] = AI_THINKING_STRUCT->aiFlags[B_POSITION_PLAYER_LEFT]; } @@ -262,7 +260,7 @@ void BattleAI_SetupAIData(u8 defaultScoreMoves, u32 battler) // Ignore moves that aren't possible to use. for (i = 0; i < MAX_MON_MOVES; i++) { - if (gBitTable[i] & moveLimitations) + if ((1u << i) & moveLimitations) SET_SCORE(battler, i, 0); } @@ -275,7 +273,7 @@ u32 BattleAI_ChooseMoveOrAction(void) { u32 ret; - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) ret = ChooseMoveOrAction_Singles(sBattler_AI); else ret = ChooseMoveOrAction_Doubles(sBattler_AI); @@ -323,7 +321,7 @@ void Ai_InitPartyStruct(void) // Save first 2 or 4(in doubles) mons CopyBattlerDataToAIParty(B_POSITION_PLAYER_LEFT, B_SIDE_PLAYER); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) CopyBattlerDataToAIParty(B_POSITION_PLAYER_RIGHT, B_SIDE_PLAYER); // If player's partner is AI, save opponent mons @@ -446,7 +444,7 @@ static void SetBattlerAiMovesData(struct AiLogicData *aiData, u32 battlerAtk, u3 if (move != 0 && move != 0xFFFF //&& gMovesInfo[move].power != 0 /* we want to get effectiveness and accuracy of status moves */ - && !(aiData->moveLimitations[battlerAtk] & gBitTable[i])) + && !(aiData->moveLimitations[battlerAtk] & (1u << i))) { if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_RISKY) dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather, DMG_ROLL_HIGHEST); @@ -506,12 +504,12 @@ static bool32 AI_SwitchMonIfSuitable(u32 battler, bool32 doubleBattle) if (doubleBattle) { u32 partner = BATTLE_PARTNER(battler); - if (AI_DATA->shouldSwitchMon & gBitTable[partner] && AI_DATA->monToSwitchId[partner] == monToSwitchId) + if (AI_DATA->shouldSwitchMon & (1u << partner) && AI_DATA->monToSwitchId[partner] == monToSwitchId) { return FALSE; } } - AI_DATA->shouldSwitchMon |= gBitTable[battler]; + AI_DATA->shouldSwitchMon |= 1 << battler; AI_DATA->monToSwitchId[battler] = monToSwitchId; return TRUE; } @@ -814,7 +812,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) s8 atkPriority = GetMovePriority(battlerAtk, move); u32 moveEffect = gMovesInfo[move].effect; s32 moveType; - u32 moveTarget = AI_GetBattlerMoveTargetType(battlerAtk, move); + u32 moveTarget = GetBattlerMoveTargetType(battlerAtk, move); struct AiLogicData *aiData = AI_DATA; u32 effectiveness = aiData->effectiveness[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex]; bool32 isDoubleBattle = IsValidDoubleBattle(battlerAtk); @@ -826,7 +824,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) return score; SetTypeBeforeUsingMove(move, battlerAtk); - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); if (gMovesInfo[move].powderMove && !IsAffectedByPowder(battlerDef, aiData->abilities[battlerDef], aiData->holdEffects[battlerDef])) RETURN_SCORE_MINUS(10); @@ -857,6 +855,8 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_COUNTER: case EFFECT_MIRROR_COAT: case EFFECT_METAL_BURST: + case EFFECT_FINAL_GAMBIT: + case EFFECT_GUARDIAN_OF_ALOLA: break; default: RETURN_SCORE_MINUS(10); @@ -889,7 +889,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case ABILITY_WONDER_GUARD: if (effectiveness < AI_EFFECTIVENESS_x2) - return 0; + RETURN_SCORE_MINUS(20); break; case ABILITY_JUSTIFIED: if (moveType == TYPE_DARK && !IS_MOVE_STATUS(move)) @@ -1498,7 +1498,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_OHKO: if (B_SHEER_COLD_IMMUNITY >= GEN_7 && move == MOVE_SHEER_COLD && IS_BATTLER_OF_TYPE(battlerDef, TYPE_ICE)) - return 0; + RETURN_SCORE_MINUS(20); if (!ShouldTryOHKO(battlerAtk, battlerDef, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], move)) ADJUST_SCORE(-10); else if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX) @@ -1531,6 +1531,16 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) else if (HasSubstituteIgnoringMove(battlerDef)) ADJUST_SCORE(-8); break; + case EFFECT_SHED_TAIL: + if (CountUsablePartyMons(battlerAtk) == 0) + ADJUST_SCORE(-10); + if (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE || aiData->abilities[battlerDef] == ABILITY_INFILTRATOR) + ADJUST_SCORE(-8); + else if (aiData->hpPercents[battlerAtk] <= 50) + 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) @@ -1739,6 +1749,14 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_HIT_ESCAPE: break; + case EFFECT_CHILLY_RECEPTION: + if (CountUsablePartyMons(battlerAtk) == 0) + ADJUST_SCORE(-10); + else if (weather & (B_WEATHER_SNOW | B_WEATHER_PRIMAL_ANY) || IsMoveEffectWeather(aiData->partnerMove)) + ADJUST_SCORE(-8); + else if (weather & B_WEATHER_HAIL) + ADJUST_SCORE(-2); // mainly to prevent looping between hail and snow + break; case EFFECT_BELLY_DRUM: case EFFECT_FILLET_AWAY: if (aiData->abilities[battlerAtk] == ABILITY_CONTRARY) @@ -1810,6 +1828,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) break; case EFFECT_TRICK: case EFFECT_KNOCK_OFF: + case EFFECT_CORROSIVE_GAS: if (aiData->abilities[battlerDef] == ABILITY_STICKY_HOLD) ADJUST_SCORE(-10); break; @@ -2050,7 +2069,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } /*if (AI_THINKING_STRUCT->aiFlags[battlerAtk] == AI_SCRIPT_CHECK_BAD_MOVE //Only basic AI - && IS_DOUBLE_BATTLE) //Make the regular AI know how to use Protect minimally in Doubles + && IsDoubleBattle()) //Make the regular AI know how to use Protect minimally in Doubles { u8 shouldProtect = ShouldProtect(battlerAtk, battlerDef, move); if (shouldProtect == USE_PROTECT || shouldProtect == PROTECT_FROM_FOES) @@ -2158,6 +2177,17 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) else if (IsAbilityOfRating(aiData->abilities[battlerAtk], 5)) ADJUST_SCORE(-4); break; + case EFFECT_DOODLE: // Same as Role Play, but also check if the partner's ability should be replaced + if (aiData->abilities[battlerAtk] == aiData->abilities[battlerDef] + || aiData->abilities[BATTLE_PARTNER(battlerAtk)] == aiData->abilities[battlerDef] + || aiData->abilities[battlerDef] == ABILITY_NONE + || gAbilitiesInfo[aiData->abilities[battlerAtk]].cantBeSuppressed + || gAbilitiesInfo[aiData->abilities[BATTLE_PARTNER(battlerAtk)]].cantBeSuppressed + || gAbilitiesInfo[aiData->abilities[battlerDef]].cantBeCopied) + ADJUST_SCORE(-10); + else if (IsAbilityOfRating(aiData->abilities[battlerAtk], 5) || IsAbilityOfRating(aiData->abilities[BATTLE_PARTNER(battlerAtk)], 5)) + ADJUST_SCORE(-4); + break; case EFFECT_WISH: if (gWishFutureKnock.wishCounter[battlerAtk] != 0) ADJUST_SCORE(-10); @@ -2478,7 +2508,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) { if (gStatuses3[battlerDef] & STATUS3_HEAL_BLOCK) - return 0; + return 0; // cannot even select if (AtMaxHp(battlerDef)) ADJUST_SCORE(-10); else if (gBattleMons[battlerDef].hp > gBattleMons[battlerDef].maxHP / 2) @@ -2539,7 +2569,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } else { - if (AI_GetBattlerMoveTargetType(battlerDef, instructedMove) & (MOVE_TARGET_SELECTED + if (GetBattlerMoveTargetType(battlerDef, instructedMove) & (MOVE_TARGET_SELECTED | MOVE_TARGET_DEPENDS | MOVE_TARGET_RANDOM | MOVE_TARGET_BOTH @@ -2737,7 +2767,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) // move data u32 moveType = gMovesInfo[move].type; u32 effect = gMovesInfo[move].effect; - u32 moveTarget = AI_GetBattlerMoveTargetType(battlerAtk, move); + u32 moveTarget = GetBattlerMoveTargetType(battlerAtk, move); // ally data u32 battlerAtkPartner = BATTLE_PARTNER(battlerAtk); struct AiLogicData *aiData = AI_DATA; @@ -2749,7 +2779,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) u32 predictedMove = aiData->predictedMoves[battlerDef]; SetTypeBeforeUsingMove(move, battlerAtk); - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); // check what effect partner is using if (aiData->partnerMove != 0) @@ -2773,6 +2803,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_SNOWSCAPE: case EFFECT_RAIN_DANCE: case EFFECT_SANDSTORM: + case EFFECT_CHILLY_RECEPTION: if (IsMoveEffectWeather(move)) ADJUST_SCORE(-10); break; @@ -2852,6 +2883,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) } break; case EFFECT_SNOWSCAPE: + case EFFECT_CHILLY_RECEPTION: if (IsBattlerAlive(battlerAtkPartner) && ShouldSetSnow(battlerAtkPartner, atkPartnerAbility, atkPartnerHoldEffect)) { @@ -2868,6 +2900,15 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { switch (atkPartnerAbility) { + case ABILITY_ANGER_POINT: + if (gMovesInfo[move].alwaysCriticalHit == TRUE + && BattlerStatCanRise(battlerAtkPartner, atkPartnerAbility, STAT_ATK) + && AI_IsFaster(battlerAtk, battlerAtkPartner, move) + && !CanIndexMoveFaintTarget(battlerAtk, battlerAtkPartner, AI_THINKING_STRUCT->movesetIndex, 1)) + { + RETURN_SCORE_PLUS(GOOD_EFFECT); + } + break; case ABILITY_VOLT_ABSORB: if (!(AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_HP_AWARE)) { @@ -3008,15 +3049,26 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) case EFFECT_SKILL_SWAP: if (aiData->abilities[battlerAtk] != aiData->abilities[BATTLE_PARTNER(battlerAtk)] && !attackerHasBadAbility) { + // Partner abilities if (aiData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_TRUANT) { - RETURN_SCORE_PLUS(10); + ADJUST_SCORE(10); } - else if (aiData->abilities[battlerAtk] == ABILITY_COMPOUND_EYES - && HasMoveWithLowAccuracy(battlerAtkPartner, FOE(battlerAtkPartner), 90, TRUE, atkPartnerAbility, aiData->abilities[FOE(battlerAtkPartner)], atkPartnerHoldEffect, aiData->holdEffects[FOE(battlerAtkPartner)])) + else if (aiData->abilities[BATTLE_PARTNER(battlerAtk)] == ABILITY_INTIMIDATE) { - RETURN_SCORE_PLUS(3); + ADJUST_SCORE(DECENT_EFFECT); } + // Active mon abilities + if (aiData->abilities[battlerAtk] == ABILITY_COMPOUND_EYES + && HasMoveWithLowAccuracy(battlerAtkPartner, FOE(battlerAtkPartner), 90, TRUE, atkPartnerAbility, aiData->abilities[FOE(battlerAtkPartner)], atkPartnerHoldEffect, aiData->holdEffects[FOE(battlerAtkPartner)])) + { + ADJUST_SCORE(GOOD_EFFECT); + } + else if (aiData->abilities[battlerAtk] == ABILITY_CONTRARY && HasMoveThatLowersOwnStats(battlerAtkPartner)) + { + ADJUST_SCORE(GOOD_EFFECT); + } + return score; } break; case EFFECT_ROLE_PLAY: @@ -3057,7 +3109,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (instructedMove != MOVE_NONE && !IS_MOVE_STATUS(instructedMove) - && (AI_GetBattlerMoveTargetType(battlerAtkPartner, instructedMove) & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))) // Use instruct on multi-target moves + && (GetBattlerMoveTargetType(battlerAtkPartner, instructedMove) & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))) // Use instruct on multi-target moves { RETURN_SCORE_PLUS(WEAK_EFFECT); } @@ -3469,6 +3521,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) break; case EFFECT_MULTI_HIT: case EFFECT_TRIPLE_KICK: + case EFFECT_POPULATION_BOMB: if (AI_MoveMakesContact(aiData->abilities[battlerAtk], aiData->holdEffects[battlerAtk], move) && aiData->abilities[battlerAtk] != ABILITY_MAGIC_GUARD && aiData->holdEffects[battlerDef] == HOLD_EFFECT_ROCKY_HELMET) @@ -3572,28 +3625,8 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) IncreaseParalyzeScore(battlerAtk, battlerDef, move, &score); break; case EFFECT_SUBSTITUTE: - if (HasAnyKnownMove(battlerDef) && GetBestDmgFromBattler(battlerDef, battlerAtk) < gBattleMons[battlerAtk].maxHP / 4) - ADJUST_SCORE(GOOD_EFFECT); - if (gStatuses3[battlerDef] & STATUS3_PERISH_SONG) - ADJUST_SCORE(GOOD_EFFECT); - if (gBattleMons[battlerDef].status1 & STATUS1_SLEEP) - ADJUST_SCORE(GOOD_EFFECT); - else if (gBattleMons[battlerDef].status1 & (STATUS1_BURN | STATUS1_PSN_ANY | STATUS1_FROSTBITE)) - ADJUST_SCORE(DECENT_EFFECT); - // TODO: - // if (IsPredictedToSwitch(battlerDef, battlerAtk) - // ADJUST_SCORE(DECENT_EFFECT); - if (HasMoveEffect(battlerDef, EFFECT_SLEEP) - || HasMoveEffect(battlerDef, EFFECT_TOXIC) - || HasMoveEffect(battlerDef, EFFECT_POISON) - || HasMoveEffect(battlerDef, EFFECT_PARALYZE) - || HasMoveEffect(battlerDef, EFFECT_WILL_O_WISP) - || HasMoveEffect(battlerDef, EFFECT_CONFUSE) - || HasMoveEffect(battlerDef, EFFECT_LEECH_SEED)) - ADJUST_SCORE(GOOD_EFFECT); - if (!gBattleMons[battlerDef].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION && aiData->hpPercents[battlerAtk] > 70)) - ADJUST_SCORE(WEAK_EFFECT); - break; + case EFFECT_SHED_TAIL: + IncreaseSubstituteMoveScore(battlerAtk, battlerDef, move, &score); case EFFECT_MIMIC: if (AI_IsFaster(battlerAtk, battlerDef, move)) { @@ -3621,6 +3654,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) //fallthrough case EFFECT_HIT_ESCAPE: case EFFECT_PARTING_SHOT: + case EFFECT_CHILLY_RECEPTION: if (!IsDoubleBattle()) { switch (ShouldPivot(battlerAtk, battlerDef, aiData->abilities[battlerDef], move, movesetIndex)) @@ -3720,24 +3754,24 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); break; case MOVE_WIDE_GUARD: - if (predictedMove != MOVE_NONE && AI_GetBattlerMoveTargetType(battlerDef, predictedMove) & (MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_BOTH)) + if (predictedMove != MOVE_NONE && GetBattlerMoveTargetType(battlerDef, predictedMove) & (MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_BOTH)) { ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); } - else if (isDoubleBattle && AI_GetBattlerMoveTargetType(BATTLE_PARTNER(battlerAtk), aiData->partnerMove) & MOVE_TARGET_FOES_AND_ALLY) + else if (isDoubleBattle && GetBattlerMoveTargetType(BATTLE_PARTNER(battlerAtk), aiData->partnerMove) & MOVE_TARGET_FOES_AND_ALLY) { if (aiData->abilities[battlerAtk] != ABILITY_TELEPATHY) ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); } break; case MOVE_CRAFTY_SHIELD: - if (predictedMove != MOVE_NONE && IS_MOVE_STATUS(predictedMove) && !(AI_GetBattlerMoveTargetType(battlerDef, predictedMove) & MOVE_TARGET_USER)) + if (predictedMove != MOVE_NONE && IS_MOVE_STATUS(predictedMove) && !(GetBattlerMoveTargetType(battlerDef, predictedMove) & MOVE_TARGET_USER)) ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); break; case MOVE_MAT_BLOCK: if (gDisableStructs[battlerAtk].isFirstTurn && predictedMove != MOVE_NONE - && !IS_MOVE_STATUS(predictedMove) && !(AI_GetBattlerMoveTargetType(battlerDef, predictedMove) & MOVE_TARGET_USER)) + && !IS_MOVE_STATUS(predictedMove) && !(GetBattlerMoveTargetType(battlerDef, predictedMove) & MOVE_TARGET_USER)) ProtectChecks(battlerAtk, battlerDef, move, predictedMove, &score); break; case MOVE_KINGS_SHIELD: @@ -4056,7 +4090,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(DECENT_EFFECT); // Force 'em out next turn break; default: - if (move != MOVE_BESTOW && aiData->items[battlerAtk] == ITEM_NONE) + if (gMovesInfo[gCurrentMove].effect != EFFECT_BESTOW && aiData->items[battlerAtk] == ITEM_NONE) { switch (aiData->holdEffects[battlerDef]) { @@ -4088,11 +4122,27 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) } } break; + case EFFECT_CORROSIVE_GAS: + if (CanKnockOffItem(battlerDef, aiData->items[battlerDef])) + { + switch (aiData->holdEffects[battlerDef]) + { + case HOLD_EFFECT_IRON_BALL: + if (HasMoveEffect(battlerDef, EFFECT_FLING)) + ADJUST_SCORE(DECENT_EFFECT); + break; + case HOLD_EFFECT_LAGGING_TAIL: + case HOLD_EFFECT_STICKY_BARB: + break; + default: + ADJUST_SCORE(DECENT_EFFECT); + break; + } + } + break; case EFFECT_ROLE_PLAY: - if (!gAbilitiesInfo[aiData->abilities[battlerAtk]].cantBeSuppressed - && !gAbilitiesInfo[aiData->abilities[battlerDef]].cantBeCopied - && !IsAbilityOfRating(aiData->abilities[battlerAtk], 5) - && IsAbilityOfRating(aiData->abilities[battlerDef], 5)) + case EFFECT_DOODLE: + if (IsAbilityOfRating(aiData->abilities[battlerDef], 5)) ADJUST_SCORE(DECENT_EFFECT); break; case EFFECT_INGRAIN: @@ -4101,7 +4151,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_MAGIC_COAT: - if (IS_MOVE_STATUS(predictedMove) && AI_GetBattlerMoveTargetType(battlerDef, predictedMove) & (MOVE_TARGET_SELECTED | MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_BOTH)) + if (IS_MOVE_STATUS(predictedMove) && GetBattlerMoveTargetType(battlerDef, predictedMove) & (MOVE_TARGET_SELECTED | MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_BOTH)) ADJUST_SCORE(GOOD_EFFECT); break; case EFFECT_RECYCLE: @@ -4780,7 +4830,7 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score } // Effects that are encouraged on the first turn of battle -static s32 AI_SetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) +static s32 AI_ForceSetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { u8 i; if (IS_TARGETING_PARTNER(battlerAtk, battlerDef) @@ -4879,6 +4929,7 @@ static s32 AI_SetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 score case EFFECT_SANDSTORM: case EFFECT_HAIL: case EFFECT_SNOWSCAPE: + case EFFECT_CHILLY_RECEPTION: case EFFECT_GEOMANCY: case EFFECT_VICTORY_DANCE: ADJUST_SCORE(DECENT_EFFECT); @@ -5047,10 +5098,10 @@ static s32 AI_PreferBatonPass(u32 battlerAtk, u32 battlerDef, u32 move, s32 scor static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) { u32 effect = gMovesInfo[move].effect; - u32 moveType = gMovesInfo[move].type; + u32 moveType = 0; SetTypeBeforeUsingMove(move, battlerAtk); - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); if (IS_TARGETING_PARTNER(battlerAtk, battlerDef)) { diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index a0a44cb98d..c33878465a 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -40,7 +40,7 @@ static void InitializeSwitchinCandidate(struct Pokemon *mon) static bool32 IsAceMon(u32 battler, u32 monPartyId) { if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_ACE_POKEMON - && !(gBattleStruct->forcedSwitch & gBitTable[battler]) + && !(gBattleStruct->forcedSwitch & (1u << battler)) && monPartyId == CalculateEnemyPartyCount()-1) return TRUE; return FALSE; @@ -71,28 +71,28 @@ void GetAIPartyIndexes(u32 battler, s32 *firstId, s32 *lastId) static bool32 HasBadOdds(u32 battler, bool32 emitResult) { //Variable initialization - u8 opposingPosition, atkType1, atkType2, defType1, defType2, effectiveness; + u8 opposingPosition, atkType1, atkType2, defType1, defType2, effectiveness; s32 i, damageDealt = 0, maxDamageDealt = 0, damageTaken = 0, maxDamageTaken = 0; u32 aiMove, playerMove, aiBestMove = MOVE_NONE, aiAbility = AI_DATA->abilities[battler], opposingBattler, weather = AI_GetWeather(AI_DATA); bool32 getsOneShot = FALSE, hasStatusMove = FALSE, hasSuperEffectiveMove = FALSE; - u16 typeEffectiveness = UQ_4_12(1.0), aiMoveEffect; //baseline typing damage + 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[battler] & AI_FLAG_SMART_SWITCHING)) return FALSE; // Double Battles aren't included in AI_FLAG_SMART_MON_CHOICE. Defaults to regular switch in logic - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) return FALSE; - opposingPosition = BATTLE_OPPOSITE(GetBattlerPosition(battler)); + 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; + atkType1 = gBattleMons[opposingBattler].types[0]; + atkType2 = gBattleMons[opposingBattler].types[1]; + defType1 = gBattleMons[battler].types[0]; + defType2 = gBattleMons[battler].types[1]; // Check AI moves for damage dealt for (i = 0; i < MAX_MON_MOVES; i++) @@ -148,8 +148,8 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult) playerMove = gBattleMons[opposingBattler].moves[i]; if (playerMove != MOVE_NONE && gMovesInfo[playerMove].power != 0) { - struct SimulatedDamage dmg = AI_CalcDamage(playerMove, opposingBattler, battler, &effectiveness, FALSE, weather, DMG_ROLL_HIGHEST); - if (dmg.expected > maxDamageTaken) + damageTaken = AI_CalcDamage(playerMove, opposingBattler, battler, &effectiveness, FALSE, weather, DMG_ROLL_HIGHEST).expected; + if (damageTaken > maxDamageTaken) maxDamageTaken = damageTaken; } } @@ -172,7 +172,7 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult) return FALSE; // Start assessing whether or not mon has bad odds - // Jump straight to swtiching out in cases where mon gets OHKO'd + // Jump straight to switching 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 @@ -180,7 +180,7 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult) && gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 4))) { // 50% chance to stay in regardless - if (Random() % 2 == 0) + if (!RandomPercentage(RNG_AI_HASBADODDS, 50)) return FALSE; // Switch mon out @@ -191,36 +191,36 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult) } // 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 + 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) + if (!RandomPercentage(RNG_AI_HASBADODDS, 50)) return FALSE; // Switch mon out - gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; - if (emitResult) + gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE; + if (emitResult) BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0); - return TRUE; - } - } - return FALSE; + return TRUE; + } + } + return FALSE; } static bool32 ShouldSwitchIfAllBadMoves(u32 battler, bool32 emitResult) { - if (AI_DATA->shouldSwitchMon & gBitTable[battler]) + if (AI_DATA->shouldSwitchMon & (1u << battler)) { - AI_DATA->shouldSwitchMon &= ~(gBitTable[battler]); + AI_DATA->shouldSwitchMon &= ~(1u << battler); gBattleStruct->AI_monToSwitchIntoId[battler] = AI_DATA->monToSwitchId[battler]; if (emitResult) BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_SWITCH, 0); @@ -242,7 +242,7 @@ static bool32 ShouldSwitchIfWonderGuard(u32 battler, bool32 emitResult) struct Pokemon *party = NULL; u16 move; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) return FALSE; opposingPosition = BATTLE_OPPOSITE(GetBattlerPosition(battler)); @@ -318,10 +318,10 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler, bool32 emitResult) if (IS_MOVE_STATUS(gLastLandedMoves[battler])) return FALSE; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battlerIn1 = battler; - if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))]) + if (gAbsentBattlerFlags & (1u << GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))))) battlerIn2 = battler; else battlerIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))); @@ -690,7 +690,7 @@ static bool32 HasSuperEffectiveMoveAgainstOpponents(u32 battler, bool32 noRng) u32 opposingPosition = BATTLE_OPPOSITE(GetBattlerPosition(battler)); u32 opposingBattler = GetBattlerAtPosition(opposingPosition); - if (!(gAbsentBattlerFlags & gBitTable[opposingBattler])) + if (!(gAbsentBattlerFlags & (1u << opposingBattler))) { for (i = 0; i < MAX_MON_MOVES; i++) { @@ -707,12 +707,12 @@ static bool32 HasSuperEffectiveMoveAgainstOpponents(u32 battler, bool32 noRng) } } } - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) return FALSE; opposingBattler = GetBattlerAtPosition(BATTLE_PARTNER(opposingPosition)); - if (!(gAbsentBattlerFlags & gBitTable[opposingBattler])) + if (!(gAbsentBattlerFlags & (1u << opposingBattler))) { for (i = 0; i < MAX_MON_MOVES; i++) { @@ -765,10 +765,10 @@ static bool32 FindMonWithFlagsAndSuperEffective(u32 battler, u16 flags, u32 modu if (IS_MOVE_STATUS(gLastLandedMoves[battler])) return FALSE; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battlerIn1 = battler; - if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))]) + if (gAbsentBattlerFlags & (1u << GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))))) battlerIn2 = battler; else battlerIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))); @@ -846,10 +846,10 @@ static bool32 CanMonSurviveHazardSwitchin(u32 battler) // Battler will faint to hazards, check to see if another mon can clear them if (hazardDamage > battlerHp) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battlerIn1 = battler; - if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))]) + if (gAbsentBattlerFlags & (1u << GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))))) battlerIn2 = battler; else battlerIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))); @@ -881,7 +881,9 @@ static bool32 CanMonSurviveHazardSwitchin(u32 battler) for (j = 0; j < MAX_MON_MOVES; j++) { aiMove = GetMonData(&party[i], MON_DATA_MOVE1 + j, NULL); - if (aiMove == MOVE_RAPID_SPIN || aiMove == MOVE_DEFOG || aiMove == MOVE_MORTAL_SPIN || aiMove == MOVE_TIDY_UP) + if (MoveHasAdditionalEffectSelf(aiMove, MOVE_EFFECT_RAPID_SPIN) + || (B_DEFOG_EFFECT_CLEARING >= GEN_6 && gMovesInfo[aiMove].effect == EFFECT_DEFOG) + || gMovesInfo[aiMove].effect == EFFECT_TIDY_UP) { // Have a mon that can clear the hazards, so switching out is okay return TRUE; @@ -1023,10 +1025,10 @@ bool32 ShouldSwitch(u32 battler, bool32 emitResult) availableToSwitch = 0; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battlerIn1 = battler; - if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))]) + if (gAbsentBattlerFlags & (1u << GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))))) battlerIn2 = battler; else battlerIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))); @@ -1140,7 +1142,7 @@ void AI_TrySwitchOrUseItem(u32 battler) s32 monToSwitchId = AI_DATA->mostSuitableMonId[battler]; if (monToSwitchId == PARTY_SIZE) { - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) { battlerIn1 = GetBattlerAtPosition(battlerPosition); battlerIn2 = battlerIn1; @@ -1195,14 +1197,14 @@ static u32 GetBestMonBatonPass(struct Pokemon *party, int firstId, int lastId, u for (i = firstId; i < lastId; i++) { - if (invalidMons & gBitTable[i]) + if (invalidMons & (1u << i)) continue; for (j = 0; j < MAX_MON_MOVES; j++) { if (GetMonData(&party[i], MON_DATA_MOVE1 + j, NULL) == MOVE_BATON_PASS) { - bits |= gBitTable[i]; + bits |= 1u << i; break; } } @@ -1213,7 +1215,7 @@ static u32 GetBestMonBatonPass(struct Pokemon *party, int firstId, int lastId, u do { i = (Random() % (lastId - firstId)) + firstId; - } while (!(bits & gBitTable[i])); + } while (!(bits & (1 << i))); return i; } @@ -1231,13 +1233,13 @@ static u32 GetBestMonTypeMatchup(struct Pokemon *party, int firstId, int lastId, // Find the mon whose type is the most suitable defensively. for (i = firstId; i < lastId; i++) { - if (!(gBitTable[i] & invalidMons) && !(gBitTable[i] & bits)) + if (!((1u << i) & invalidMons) && !((1u << i) & bits)) { u16 species = GetMonData(&party[i], MON_DATA_SPECIES); uq4_12_t typeEffectiveness = UQ_4_12(1.0); - u8 atkType1 = gBattleMons[opposingBattler].type1; - u8 atkType2 = gBattleMons[opposingBattler].type2; + u8 atkType1 = gBattleMons[opposingBattler].types[0]; + u8 atkType2 = gBattleMons[opposingBattler].types[1]; u8 defType1 = gSpeciesInfo[species].types[0]; u8 defType2 = gSpeciesInfo[species].types[1]; @@ -1271,7 +1273,7 @@ static u32 GetBestMonTypeMatchup(struct Pokemon *party, int firstId, int lastId, if (i != MAX_MON_MOVES) return bestMonId; // Has both the typing and at least one super effective move. - bits |= gBitTable[bestMonId]; // Sorry buddy, we want something better. + bits |= (1u << bestMonId); // Sorry buddy, we want something better. } else { @@ -1293,7 +1295,7 @@ static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 inva // If we couldn't find the best mon in terms of typing, find the one that deals most damage. for (i = firstId; i < lastId; i++) { - if (gBitTable[i] & invalidMons) + if ((1 << (i)) & invalidMons) continue; InitializeSwitchinCandidate(&party[i]); for (j = 0; j < MAX_MON_MOVES; j++) @@ -1318,7 +1320,7 @@ static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 inva return bestMonId; } -static bool32 IsMonGrounded(u16 heldItemEffect, u32 ability, u8 type1, u8 type2) +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 @@ -1337,7 +1339,7 @@ static bool32 IsMonGrounded(u16 heldItemEffect, u32 ability, u8 type1, u8 type2) // Gets hazard damage static u32 GetSwitchinHazardsDamage(u32 battler, struct BattlePokemon *battleMon) { - u8 defType1 = battleMon->type1, defType2 = battleMon->type2, tSpikesLayers; + u8 defType1 = battleMon->types[0], defType2 = battleMon->types[1], tSpikesLayers; u16 heldItemEffect = ItemId_GetHoldEffect(battleMon->item); u32 maxHP = battleMon->maxHP, ability = battleMon->ability, status = battleMon->status1; u32 spikesDamage = 0, tSpikesDamage = 0, hazardDamage = 0; @@ -1404,7 +1406,7 @@ static s32 GetSwitchinWeatherImpact(void) if (holdEffect != HOLD_EFFECT_SAFETY_GOGGLES && ability != ABILITY_MAGIC_GUARD && ability != ABILITY_OVERCOAT) { if ((gBattleWeather & B_WEATHER_HAIL) - && (AI_DATA->switchinCandidate.battleMon.type1 != TYPE_ICE || AI_DATA->switchinCandidate.battleMon.type2 != TYPE_ICE) + && (AI_DATA->switchinCandidate.battleMon.types[0] != TYPE_ICE || AI_DATA->switchinCandidate.battleMon.types[1] != TYPE_ICE) && ability != ABILITY_SNOW_CLOAK && ability != ABILITY_ICE_BODY) { weatherImpact = maxHP / 16; @@ -1412,9 +1414,9 @@ static s32 GetSwitchinWeatherImpact(void) 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 + && (AI_DATA->switchinCandidate.battleMon.types[0] != TYPE_GROUND && AI_DATA->switchinCandidate.battleMon.types[1] != TYPE_GROUND + && AI_DATA->switchinCandidate.battleMon.types[0] != TYPE_ROCK && AI_DATA->switchinCandidate.battleMon.types[1] != TYPE_ROCK + && AI_DATA->switchinCandidate.battleMon.types[0] != TYPE_STEEL && AI_DATA->switchinCandidate.battleMon.types[1] != TYPE_STEEL && ability != ABILITY_SAND_VEIL && ability != ABILITY_SAND_RUSH && ability != ABILITY_SAND_FORCE)) { weatherImpact = maxHP / 16; @@ -1465,7 +1467,7 @@ static u32 GetSwitchinRecurringHealing(void) // Items if (ability != ABILITY_KLUTZ) { - if (holdEffect == HOLD_EFFECT_BLACK_SLUDGE && (AI_DATA->switchinCandidate.battleMon.type1 == TYPE_POISON || AI_DATA->switchinCandidate.battleMon.type2 == TYPE_POISON)) + if (holdEffect == HOLD_EFFECT_BLACK_SLUDGE && (AI_DATA->switchinCandidate.battleMon.types[0] == TYPE_POISON || AI_DATA->switchinCandidate.battleMon.types[1] == TYPE_POISON)) { recurringHealing = maxHP / 16; if (recurringHealing == 0) @@ -1499,7 +1501,7 @@ static u32 GetSwitchinRecurringDamage(void) // Items if (ability != ABILITY_MAGIC_GUARD && ability != ABILITY_KLUTZ) { - if (holdEffect == HOLD_EFFECT_BLACK_SLUDGE && AI_DATA->switchinCandidate.battleMon.type1 != TYPE_POISON && AI_DATA->switchinCandidate.battleMon.type2 != TYPE_POISON) + if (holdEffect == HOLD_EFFECT_BLACK_SLUDGE && AI_DATA->switchinCandidate.battleMon.types[0] != TYPE_POISON && AI_DATA->switchinCandidate.battleMon.types[1] != TYPE_POISON) { passiveDamage = maxHP / 8; if (passiveDamage == 0) @@ -1524,7 +1526,7 @@ static u32 GetSwitchinRecurringDamage(void) // 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 defType1 = AI_DATA->switchinCandidate.battleMon.types[0], defType2 = AI_DATA->switchinCandidate.battleMon.types[1]; u8 tSpikesLayers = gSideTimers[GetBattlerSide(battler)].toxicSpikesAmount; u16 heldItemEffect = ItemId_GetHoldEffect(AI_DATA->switchinCandidate.battleMon.item); u32 status = AI_DATA->switchinCandidate.battleMon.status1, ability = AI_DATA->switchinCandidate.battleMon.ability, maxHP = AI_DATA->switchinCandidate.battleMon.maxHP; @@ -1564,9 +1566,9 @@ static u32 GetSwitchinStatusDamage(u32 battler) if ((status & STATUS1_TOXIC_COUNTER) != STATUS1_TOXIC_TURN(15)) // not 16 turns AI_DATA->switchinCandidate.battleMon.status1 += STATUS1_TOXIC_TURN(1); statusDamage = maxHP / 16; - statusDamage *= AI_DATA->switchinCandidate.battleMon.status1 & STATUS1_TOXIC_COUNTER >> 8; if (statusDamage == 0) statusDamage = 1; + statusDamage *= AI_DATA->switchinCandidate.battleMon.status1 & STATUS1_TOXIC_COUNTER >> 8; } } @@ -1607,8 +1609,8 @@ static u32 GetSwitchinHitsToKO(s32 damageTaken, u32 battler) u16 maxHP = AI_DATA->switchinCandidate.battleMon.maxHP, item = AI_DATA->switchinCandidate.battleMon.item, heldItemEffect = ItemId_GetHoldEffect(item); u8 weatherDuration = gWishFutureKnock.weatherDuration, holdEffectParam = ItemId_GetHoldEffectParam(item); u32 opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); - u32 opposingAbility = gBattleMons[opposingBattler].ability; - bool32 usedSingleUseHealingItem = FALSE; + u32 opposingAbility = gBattleMons[opposingBattler].ability, ability = AI_DATA->switchinCandidate.battleMon.ability; + bool32 usedSingleUseHealingItem = FALSE, opponentCanBreakMold = IsMoldBreakerTypeAbility(opposingBattler, opposingAbility); s32 currentHP = startingHP; // No damage being dealt @@ -1629,6 +1631,10 @@ static u32 GetSwitchinHitsToKO(s32 damageTaken, u32 battler) // Take attack damage for the turn currentHP = currentHP - damageTaken; + // One shot prevention effects + if (damageTaken >= maxHP && currentHP == maxHP && (heldItemEffect == HOLD_EFFECT_FOCUS_SASH || (!opponentCanBreakMold && B_STURDY >= GEN_5 && ability == ABILITY_STURDY))) + currentHP = 1; + // 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; @@ -1691,6 +1697,10 @@ static u32 GetSwitchinHitsToKO(s32 damageTaken, u32 battler) hitsToKO++; } + // Disguise will always add an extra hit to KO + if (opponentCanBreakMold && AI_DATA->switchinCandidate.battleMon.species == SPECIES_MIMIKYU_DISGUISED) + hitsToKO++; + // If mon had a hypothetical status from TSpikes, clear it if (AI_DATA->switchinCandidate.hypotheticalStatus == TRUE) { @@ -1706,7 +1716,7 @@ static u16 GetSwitchinTypeMatchup(u32 opposingBattler, struct BattlePokemon batt // 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; + defType1 = battleMon.types[0], defType2 = battleMon.types[1]; // Multiply type effectiveness by a factor depending on type matchup typeEffectiveness = uq4_12_multiply(typeEffectiveness, (GetTypeModifier(atkType1, defType1))); @@ -1733,7 +1743,7 @@ static int GetRandomSwitchinWithBatonPass(int aliveCount, int bits, int firstId, do { return (Random() % (lastId - firstId)) + firstId; - } while (!(bits & gBitTable[currentMonId])); + } while (!(bits & (1 << (currentMonId)))); } // Catch any other cases (such as only one mon alive and it has Baton Pass) @@ -1873,7 +1883,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, // Check for Baton Pass; hitsToKO requirements mean mon can boost and BP without dying whether it's slower or not if (aiMove == MOVE_BATON_PASS && ((hitsToKOAI > hitsToKOAIThreshold + 1 && AI_DATA->switchinCandidate.battleMon.speed < playerMonSpeed) || (hitsToKOAI > hitsToKOAIThreshold && AI_DATA->switchinCandidate.battleMon.speed > playerMonSpeed))) - bits |= gBitTable[i]; + bits |= 1u << i; // Check for mon with resistance and super effective move for GetBestMonTypeMatchup if (aiMove != MOVE_NONE && gMovesInfo[aiMove].power != 0) @@ -2000,9 +2010,9 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, } // If ace mon is the last available Pokemon and U-Turn/Volt Switch was used - switch to the mon. if (aceMonId != PARTY_SIZE - && (gMovesInfo[gLastUsedMove].effect == EFFECT_HIT_ESCAPE || gMovesInfo[gLastUsedMove].effect == EFFECT_PARTING_SHOT || gMovesInfo[gLastUsedMove].effect == EFFECT_BATON_PASS)) + && (gMovesInfo[gLastUsedMove].effect == EFFECT_HIT_ESCAPE || gMovesInfo[gLastUsedMove].effect == EFFECT_PARTING_SHOT || gMovesInfo[gLastUsedMove].effect == EFFECT_BATON_PASS || gMovesInfo[gLastUsedMove].effect == EFFECT_CHILLY_RECEPTION || gMovesInfo[gLastUsedMove].effect == EFFECT_SHED_TAIL)) return aceMonId; - + return PARTY_SIZE; } @@ -2040,16 +2050,16 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) if (gBattleTypeFlags & BATTLE_TYPE_ARENA) return gBattlerPartyIndexes[battler] + 1; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battlerIn1 = battler; - if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler)))]) + if (gAbsentBattlerFlags & (1u << GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))))) battlerIn2 = battler; else battlerIn2 = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))); opposingBattler = BATTLE_OPPOSITE(battlerIn1); - if (gAbsentBattlerFlags & gBitTable[opposingBattler]) + if (gAbsentBattlerFlags & (1u << opposingBattler)) opposingBattler ^= BIT_FLANK; } else @@ -2074,7 +2084,7 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) // Split ideal mon decision between after previous mon KO'd (prioritize offensive options) and after switching active mon out (prioritize defensive options), and expand the scope of both. // Only use better mon selection if AI_FLAG_SMART_MON_CHOICES is set for the trainer. - if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SMART_MON_CHOICES && !(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) // Double Battles aren't included in AI_FLAG_SMART_MON_CHOICE. Defaults to regular switch in logic + if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SMART_MON_CHOICES && !IsDoubleBattle()) // Double Battles aren't included in AI_FLAG_SMART_MON_CHOICE. Defaults to regular switch in logic { bestMonId = GetBestMonIntegrated(party, firstId, lastId, battler, opposingBattler, battlerIn1, battlerIn2, switchAfterMonKOd); return bestMonId; @@ -2095,12 +2105,12 @@ u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd) || i == gBattleStruct->monToSwitchIntoId[battlerIn2] || (GetMonAbility(&party[i]) == ABILITY_TRUANT && IsTruantMonVulnerable(battler, opposingBattler))) // While not really invalid per se, not really wise to switch into this mon.) { - invalidMons |= gBitTable[i]; + invalidMons |= 1u << i; } else if (IsAceMon(battler, i))// Save Ace Pokemon for last. { aceMonId = i; - invalidMons |= gBitTable[i]; + invalidMons |= 1u << i; } else { diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 5505bbed18..3f08ace393 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -165,8 +165,8 @@ void SaveBattlerData(u32 battlerId) AI_THINKING_STRUCT->saved[battlerId].moves[i] = gBattleMons[battlerId].moves[i]; } // Save and restore types even for AI controlled battlers in case it gets changed during move evaluation process. - AI_THINKING_STRUCT->saved[battlerId].types[0] = gBattleMons[battlerId].type1; - AI_THINKING_STRUCT->saved[battlerId].types[1] = gBattleMons[battlerId].type2; + AI_THINKING_STRUCT->saved[battlerId].types[0] = gBattleMons[battlerId].types[0]; + AI_THINKING_STRUCT->saved[battlerId].types[1] = gBattleMons[battlerId].types[1]; } static bool32 ShouldFailForIllusion(u32 illusionSpecies, u32 battlerId) @@ -218,11 +218,11 @@ void SetBattlerData(u32 battlerId) if (illusionSpecies != SPECIES_NONE && ShouldFailForIllusion(illusionSpecies, battlerId)) { // If the battler's type has not been changed, AI assumes the types of the illusion mon. - if (gBattleMons[battlerId].type1 == gSpeciesInfo[species].types[0] - && gBattleMons[battlerId].type2 == gSpeciesInfo[species].types[1]) + if (gBattleMons[battlerId].types[0] == gSpeciesInfo[species].types[0] + && gBattleMons[battlerId].types[1] == gSpeciesInfo[species].types[1]) { - gBattleMons[battlerId].type1 = gSpeciesInfo[illusionSpecies].types[0]; - gBattleMons[battlerId].type2 = gSpeciesInfo[illusionSpecies].types[1]; + gBattleMons[battlerId].types[0] = gSpeciesInfo[illusionSpecies].types[0]; + gBattleMons[battlerId].types[1] = gSpeciesInfo[illusionSpecies].types[1]; } species = illusionSpecies; } @@ -262,8 +262,8 @@ void RestoreBattlerData(u32 battlerId) for (i = 0; i < 4; i++) gBattleMons[battlerId].moves[i] = AI_THINKING_STRUCT->saved[battlerId].moves[i]; } - gBattleMons[battlerId].type1 = AI_THINKING_STRUCT->saved[battlerId].types[0]; - gBattleMons[battlerId].type2 = AI_THINKING_STRUCT->saved[battlerId].types[1]; + gBattleMons[battlerId].types[0] = AI_THINKING_STRUCT->saved[battlerId].types[0]; + gBattleMons[battlerId].types[1] = AI_THINKING_STRUCT->saved[battlerId].types[1]; } u32 GetHealthPercentage(u32 battlerId) @@ -351,12 +351,12 @@ bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, u32 category) if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && GetBattleMoveCategory(moves[i]) == category - && !(unusable & gBitTable[i])) + && !(unusable & (1u << i))) { SetTypeBeforeUsingMove(moves[i], attacker); - GET_MOVE_TYPE(moves[i], moveType); + moveType = GetMoveType(moves[i]); if (CalcTypeEffectivenessMultiplier(moves[i], moveType, attacker, target, AI_DATA->abilities[target], FALSE) != 0) - usable |= gBitTable[i]; + usable |= 1u << i; } } @@ -400,10 +400,9 @@ static inline s32 DmgRoll(s32 dmg) bool32 IsDamageMoveUnusable(u32 move, u32 battlerAtk, u32 battlerDef) { - s32 moveType; struct AiLogicData *aiData = AI_DATA; u32 battlerDefAbility; - GET_MOVE_TYPE(move, moveType); + u32 moveType = GetMoveType(move); if (DoesBattlerIgnoreAbilityChecks(aiData->abilities[battlerAtk], move)) battlerDefAbility = ABILITY_NONE; @@ -483,7 +482,7 @@ bool32 IsDamageMoveUnusable(u32 move, u32 battlerAtk, u32 battlerDef) return TRUE; break; case EFFECT_POLTERGEIST: - if (AI_DATA->items[battlerDef] == ITEM_NONE) + if (AI_DATA->items[battlerDef] == ITEM_NONE || gFieldStatuses & STATUS_FIELD_MAGIC_ROOM || battlerDefAbility == ABILITY_KLUTZ) return TRUE; break; case EFFECT_FIRST_TURN_ONLY: @@ -519,12 +518,16 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u { struct SimulatedDamage simDamage; s32 moveType; + u32 moveEffect = gMovesInfo[move].effect; uq4_12_t effectivenessMultiplier; bool32 isDamageMoveUnusable = FALSE; bool32 toggledGimmick = FALSE; struct AiLogicData *aiData = AI_DATA; gBattleStruct->aiCalcInProgress = TRUE; + if (moveEffect == EFFECT_NATURE_POWER) + move = GetNaturePowerMove(battlerAtk); + // Temporarily enable gimmicks for damage calcs if planned if (gBattleStruct->gimmick.usableGimmick[battlerAtk] && GetActiveGimmick(battlerAtk) == GIMMICK_NONE && !(gBattleStruct->gimmick.usableGimmick[battlerAtk] == GIMMICK_Z_MOVE && !considerZPower)) @@ -537,17 +540,30 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u SetActiveGimmick(battlerAtk, gBattleStruct->gimmick.usableGimmick[battlerAtk]); } - if (gMovesInfo[move].effect == EFFECT_PHOTON_GEYSER) - gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(gBattlerAttacker) != gMovesInfo[gCurrentMove].category); - else if (gMovesInfo[move].effect == EFFECT_SHELL_SIDE_ARM) - gBattleStruct->swapDamageCategory = (gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] != gMovesInfo[gCurrentMove].category); - else if (gMovesInfo[move].effect == EFFECT_NATURE_POWER) - move = GetNaturePowerMove(battlerAtk); + moveEffect = gMovesInfo[move].effect; + switch (moveEffect) + { + case EFFECT_PHOTON_GEYSER: + gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL); + break; + case EFFECT_SHELL_SIDE_ARM: + if (gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] == DAMAGE_CATEGORY_PHYSICAL) + gBattleStruct->swapDamageCategory = TRUE; + break; + case EFFECT_TERA_BLAST: + if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA) + gBattleStruct->swapDamageCategory = GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL; + break; + case EFFECT_TERA_STARSTORM: + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA && gBattleMons[gBattlerAttacker].species == SPECIES_TERAPAGOS_STELLAR) + gBattleStruct->swapDamageCategory = GetCategoryBasedOnStats(battlerAtk) == DAMAGE_CATEGORY_PHYSICAL; + break; + } gBattleStruct->dynamicMoveType = 0; SetTypeBeforeUsingMove(move, battlerAtk); - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); effectivenessMultiplier = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, aiData->abilities[battlerDef], FALSE); if (gMovesInfo[move].power) @@ -559,7 +575,7 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u ProteanTryChangeType(battlerAtk, aiData->abilities[battlerAtk], move, moveType); // Certain moves like Rollout calculate damage based on values which change during the move execution, but before calling dmg calc. - switch (gMovesInfo[move].effect) + switch (moveEffect) { case EFFECT_ROLLOUT: n = gDisableStructs[battlerAtk].rolloutTimer - 1; @@ -577,13 +593,13 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u if (critChanceIndex > 1) // Consider crit damage only if a move has at least +2 crit chance { s32 nonCritDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, - effectivenessMultiplier, weather, FALSE, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + effectivenessMultiplier, weather, FALSE, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); s32 critDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, - effectivenessMultiplier, weather, TRUE, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + effectivenessMultiplier, weather, TRUE, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); u32 critOdds = GetCritHitOdds(critChanceIndex); // With critOdds getting closer to 1, dmg gets closer to critDmg. @@ -596,20 +612,33 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u else if (critChanceIndex == -2) // Guaranteed critical { s32 critDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, - effectivenessMultiplier, weather, TRUE, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + effectivenessMultiplier, weather, TRUE, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); simDamage.expected = GetDamageByRollType(critDmg, rollType); simDamage.minimum = LowestRollDmg(critDmg); } else { - s32 nonCritDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, - effectivenessMultiplier, weather, FALSE, - aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], - aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); - + s32 nonCritDmg = 0; + if (moveEffect == EFFECT_TRIPLE_KICK) + { + for (gMultiHitCounter = gMovesInfo[move].strikeCount; gMultiHitCounter > 0; gMultiHitCounter--) // The global is used to simulate actual damage done + { + nonCritDmg += CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, + effectivenessMultiplier, weather, FALSE, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + } + } + else + { + nonCritDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower, + effectivenessMultiplier, weather, FALSE, + aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef], + aiData->abilities[battlerAtk], aiData->abilities[battlerDef]); + } simDamage.expected = GetDamageByRollType(nonCritDmg, rollType); simDamage.minimum = LowestRollDmg(nonCritDmg); } @@ -617,7 +646,7 @@ struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u if (GetActiveGimmick(battlerAtk) != GIMMICK_Z_MOVE) { // Handle dynamic move damage - switch (gMovesInfo[move].effect) + switch (moveEffect) { case EFFECT_LEVEL_DAMAGE: simDamage.expected = simDamage.minimum = gBattleMons[battlerAtk].level * (aiData->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1); @@ -833,7 +862,7 @@ static bool32 AI_IsMoveEffectInPlus(u32 battlerAtk, u32 battlerDef, u32 move, s3 case MOVE_EFFECT_SP_DEF_MINUS_2: case MOVE_EFFECT_ACC_MINUS_2: case MOVE_EFFECT_EVS_MINUS_2: - if (ShouldLowerStat(battlerDef, abilityDef, STAT_ATK + (gMovesInfo[move].additionalEffects[i].moveEffect - MOVE_EFFECT_ATK_MINUS_1)) && noOfHitsToKo != 1) + if (ShouldLowerStat(battlerDef, abilityDef, STAT_ATK + (gMovesInfo[move].additionalEffects[i].moveEffect - MOVE_EFFECT_ATK_MINUS_2)) && noOfHitsToKo != 1) return TRUE; break; } @@ -993,7 +1022,7 @@ uq4_12_t AI_GetTypeEffectiveness(u32 move, u32 battlerAtk, u32 battlerDef) gBattleStruct->dynamicMoveType = 0; SetTypeBeforeUsingMove(move, battlerAtk); - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); typeEffectiveness = CalcTypeEffectivenessMultiplier(move, moveType, battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], FALSE); RestoreBattlerData(battlerAtk); @@ -1084,6 +1113,26 @@ s32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler, u32 moveConsidered) return AI_IS_SLOWER; } +static bool32 CanEndureHit(u32 battler, u32 battlerTarget, u32 move) +{ + if (!BATTLER_MAX_HP(battlerTarget) || gMovesInfo[move].effect == EFFECT_MULTI_HIT) + return FALSE; + if (gMovesInfo[move].strikeCount > 1 && !(gMovesInfo[move].effect == EFFECT_DRAGON_DARTS && IsValidDoubleBattle(battlerTarget))) + return FALSE; + if (AI_DATA->holdEffects[battlerTarget] == HOLD_EFFECT_FOCUS_SASH) + return TRUE; + + if (!DoesBattlerIgnoreAbilityChecks(AI_DATA->abilities[battler], move)) + { + if (B_STURDY >= GEN_5 && AI_DATA->abilities[battlerTarget] == ABILITY_STURDY) + return TRUE; + if (gBattleMons[battlerTarget].species == SPECIES_MIMIKYU_DISGUISED) + return TRUE; + } + + return FALSE; +} + // Check if target has means to faint ai mon. bool32 CanTargetFaintAi(u32 battlerDef, u32 battlerAtk) { @@ -1093,8 +1142,9 @@ bool32 CanTargetFaintAi(u32 battlerDef, u32 battlerAtk) for (i = 0; i < MAX_MON_MOVES; i++) { - if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !(unusable & gBitTable[i]) - && AI_DATA->simulatedDmg[battlerDef][battlerAtk][i].expected >= gBattleMons[battlerAtk].hp) + if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !(unusable & (1u << i)) + && AI_DATA->simulatedDmg[battlerDef][battlerAtk][i].expected >= gBattleMons[battlerAtk].hp + && !CanEndureHit(battlerDef, battlerAtk, moves[i])) { return TRUE; } @@ -1131,7 +1181,7 @@ u32 GetBestDmgMoveFromBattler(u32 battlerAtk, u32 battlerDef) for (i = 0; i < MAX_MON_MOVES; i++) { - if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !(unusable & gBitTable[i]) + if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !(unusable & (1u << i)) && bestDmg < AI_DATA->simulatedDmg[battlerAtk][battlerDef][i].expected) { bestDmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][i].expected; @@ -1152,7 +1202,7 @@ u32 GetBestDmgFromBattler(u32 battler, u32 battlerTarget) { if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE - && !(unusable & gBitTable[i]) + && !(unusable & (1u << i)) && bestDmg < AI_DATA->simulatedDmg[battler][battlerTarget][i].expected) { bestDmg = AI_DATA->simulatedDmg[battler][battlerTarget][i].expected; @@ -1172,7 +1222,7 @@ bool32 CanAIFaintTarget(u32 battlerAtk, u32 battlerDef, u32 numHits) for (i = 0; i < MAX_MON_MOVES; i++) { - if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !(moveLimitations & gBitTable[i])) + if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !(moveLimitations & (1u << i))) { // Use the pre-calculated value in simulatedDmg instead of re-calculating it dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][i].expected; @@ -1181,7 +1231,13 @@ bool32 CanAIFaintTarget(u32 battlerAtk, u32 battlerDef, u32 numHits) dmg *= numHits; if (gBattleMons[battlerDef].hp <= dmg) - return TRUE; + { + if (numHits > 1) + return TRUE; + + if (!CanEndureHit(battlerAtk, battlerDef, moves[i])) + return TRUE; + } } } @@ -1217,7 +1273,7 @@ bool32 CanTargetFaintAiWithMod(u32 battlerDef, u32 battlerAtk, s32 hpMod, s32 dm if (dmgMod) dmg *= dmgMod; - if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !(unusable & gBitTable[i]) && dmg >= hpCheck) + if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !(unusable & (1u << i)) && dmg >= hpCheck) { return TRUE; } @@ -1376,14 +1432,6 @@ u32 AI_GetWeather(struct AiLogicData *aiData) return gBattleWeather; } -u32 AI_GetBattlerMoveTargetType(u32 battlerId, u32 move) -{ - if (gMovesInfo[move].effect == EFFECT_EXPANDING_FORCE && AI_IsTerrainAffected(battlerId, STATUS_FIELD_PSYCHIC_TERRAIN)) - return MOVE_TARGET_BOTH; - else - return gMovesInfo[move].target; -} - bool32 IsAromaVeilProtectedMove(u32 move) { switch (move) @@ -1901,13 +1949,14 @@ bool32 ShouldLowerEvasion(u32 battlerAtk, u32 battlerDef, u32 defAbility) bool32 CanIndexMoveFaintTarget(u32 battlerAtk, u32 battlerDef, u32 index, u32 numHits) { s32 dmg; + u16 *moves = gBattleMons[battlerAtk].moves; if (numHits) dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][index].expected * numHits; else dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][index].minimum; - if (gBattleMons[battlerDef].hp <= dmg) + if (gBattleMons[battlerDef].hp <= dmg && !CanEndureHit(battlerAtk, battlerDef, moves[index])) return TRUE; return FALSE; } @@ -2068,6 +2117,26 @@ bool32 HasAnyKnownMove(u32 battlerId) return FALSE; } +bool32 HasMoveThatLowersOwnStats(u32 battlerId) +{ + s32 i, j; + u32 aiMove; + u16 *moves = GetMovesArray(battlerId); + for (i = 0; i < MAX_MON_MOVES; i++) + { + aiMove = moves[i]; + if (aiMove != MOVE_NONE && aiMove != MOVE_UNAVAILABLE) + { + for (j = 0; j < gMovesInfo[aiMove].numAdditionalEffects; j++) + { + if (IsSelfStatLoweringEffect(gMovesInfo[aiMove].additionalEffects[j].moveEffect) && gMovesInfo[aiMove].additionalEffects[j].self) + return TRUE; + } + } + } + return FALSE; +} + bool32 HasMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef, u32 accCheck, bool32 ignoreStatus, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect) { s32 i; @@ -2079,12 +2148,12 @@ bool32 HasMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef, u32 accCheck, bool if (moves[i] == MOVE_NONE || moves[i] == MOVE_UNAVAILABLE) continue; - if (!(gBitTable[i] & moveLimitations)) + if (!((1u << i) & moveLimitations)) { if (ignoreStatus && IS_MOVE_STATUS(moves[i])) continue; else if ((!IS_MOVE_STATUS(moves[i]) && gMovesInfo[moves[i]].accuracy == 0) - || AI_GetBattlerMoveTargetType(battlerAtk, moves[i]) & (MOVE_TARGET_USER | MOVE_TARGET_OPPONENTS_FIELD)) + || GetBattlerMoveTargetType(battlerAtk, moves[i]) & (MOVE_TARGET_USER | MOVE_TARGET_OPPONENTS_FIELD)) continue; if (AI_DATA->moveAccuracy[battlerAtk][battlerDef][i] <= accCheck) @@ -2105,7 +2174,7 @@ bool32 HasSleepMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef) { if (moves[i] == MOVE_NONE) break; - if (!(gBitTable[i] & moveLimitations)) + if (!((1u << i) & moveLimitations)) { if (gMovesInfo[moves[i]].effect == EFFECT_SLEEP && AI_DATA->moveAccuracy[battlerAtk][battlerDef][i] < 85) @@ -2184,7 +2253,7 @@ bool32 IsAttackBoostMoveEffect(u32 effect) switch (effect) { case EFFECT_ATTACK_UP: - case EFFECT_ATTACK_UP_2: + case EFFECT_ATTACK_UP_2: case EFFECT_ATTACK_ACCURACY_UP: case EFFECT_ATTACK_SPATK_UP: case EFFECT_DRAGON_DANCE: @@ -2204,34 +2273,34 @@ bool32 IsStatRaisingEffect(u32 effect) switch (effect) { case EFFECT_ATTACK_UP: - case EFFECT_ATTACK_UP_2: - case EFFECT_DEFENSE_UP: - case EFFECT_DEFENSE_UP_2: + case EFFECT_ATTACK_UP_2: + case EFFECT_DEFENSE_UP: + case EFFECT_DEFENSE_UP_2: case EFFECT_DEFENSE_UP_3: - case EFFECT_SPEED_UP: - case EFFECT_SPEED_UP_2: - case EFFECT_SPECIAL_ATTACK_UP: - case EFFECT_SPECIAL_ATTACK_UP_2: + case EFFECT_SPEED_UP: + case EFFECT_SPEED_UP_2: + case EFFECT_SPECIAL_ATTACK_UP: + case EFFECT_SPECIAL_ATTACK_UP_2: case EFFECT_SPECIAL_ATTACK_UP_3: - case EFFECT_SPECIAL_DEFENSE_UP: - case EFFECT_SPECIAL_DEFENSE_UP_2: + case EFFECT_SPECIAL_DEFENSE_UP: + case EFFECT_SPECIAL_DEFENSE_UP_2: case EFFECT_ACCURACY_UP: case EFFECT_ACCURACY_UP_2: case EFFECT_EVASION_UP: case EFFECT_EVASION_UP_2: case EFFECT_MINIMIZE: case EFFECT_DEFENSE_CURL: - case EFFECT_CALM_MIND: + case EFFECT_CALM_MIND: case EFFECT_COSMIC_POWER: - case EFFECT_DRAGON_DANCE: - case EFFECT_ACUPRESSURE: - case EFFECT_SHELL_SMASH: - case EFFECT_SHIFT_GEAR: - case EFFECT_ATTACK_ACCURACY_UP: - case EFFECT_ATTACK_SPATK_UP: - case EFFECT_GROWTH: - case EFFECT_COIL: - case EFFECT_QUIVER_DANCE: + case EFFECT_DRAGON_DANCE: + case EFFECT_ACUPRESSURE: + case EFFECT_SHELL_SMASH: + case EFFECT_SHIFT_GEAR: + case EFFECT_ATTACK_ACCURACY_UP: + case EFFECT_ATTACK_SPATK_UP: + case EFFECT_GROWTH: + case EFFECT_COIL: + case EFFECT_QUIVER_DANCE: case EFFECT_BULK_UP: case EFFECT_GEOMANCY: case EFFECT_STOCKPILE: @@ -2273,6 +2342,34 @@ bool32 IsStatLoweringEffect(u32 effect) } } +bool32 IsSelfStatLoweringEffect(u32 effect) +{ + // Self stat lowering moves like Overheart, Superpower etc. + switch (effect) + { + case MOVE_EFFECT_ATK_MINUS_1: + case MOVE_EFFECT_DEF_MINUS_1: + case MOVE_EFFECT_SPD_MINUS_1: + case MOVE_EFFECT_SP_ATK_MINUS_1: + case MOVE_EFFECT_SP_DEF_MINUS_1: + case MOVE_EFFECT_EVS_MINUS_1: + case MOVE_EFFECT_ACC_MINUS_1: + case MOVE_EFFECT_ATK_MINUS_2: + case MOVE_EFFECT_DEF_MINUS_2: + case MOVE_EFFECT_SPD_MINUS_2: + case MOVE_EFFECT_SP_ATK_MINUS_2: + case MOVE_EFFECT_SP_DEF_MINUS_2: + case MOVE_EFFECT_EVS_MINUS_2: + case MOVE_EFFECT_ACC_MINUS_2: + case MOVE_EFFECT_V_CREATE: + case MOVE_EFFECT_ATK_DEF_DOWN: + case MOVE_EFFECT_DEF_SPDEF_DOWN: + return TRUE; + default: + return FALSE; + } +} + bool32 HasDamagingMove(u32 battlerId) { u32 i; @@ -2501,7 +2598,7 @@ u32 GetBattlerSecondaryDamage(u32 battlerId) bool32 BattlerWillFaintFromWeather(u32 battler, u32 ability) { if ((BattlerAffectedBySandstorm(battler, ability) || BattlerAffectedByHail(battler, ability)) - && gBattleMons[battler].hp <= gBattleMons[battler].maxHP / 16) + && gBattleMons[battler].hp <= max(1, gBattleMons[battler].maxHP / 16)) return TRUE; return FALSE; @@ -2510,7 +2607,7 @@ bool32 BattlerWillFaintFromWeather(u32 battler, u32 ability) bool32 BattlerWillFaintFromSecondaryDamage(u32 battler, u32 ability) { if (GetBattlerSecondaryDamage(battler) != 0 - && gBattleMons[battler].hp <= gBattleMons[battler].maxHP / 16) + && gBattleMons[battler].hp <= max(1, gBattleMons[battler].maxHP / 16)) return TRUE; return FALSE; } @@ -3027,7 +3124,7 @@ bool32 AnyPartyMemberStatused(u32 battlerId, bool32 checkSoundproof) else party = gEnemyParty; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battlerOnField1 = gBattlerPartyIndexes[battlerId]; battlerOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battlerId)))]; @@ -3250,7 +3347,8 @@ bool32 IsMoveEffectWeather(u32 move) || gMovesInfo[move].effect == EFFECT_RAIN_DANCE || gMovesInfo[move].effect == EFFECT_SANDSTORM || gMovesInfo[move].effect == EFFECT_HAIL - || gMovesInfo[move].effect == EFFECT_SNOWSCAPE)) + || gMovesInfo[move].effect == EFFECT_SNOWSCAPE + || gMovesInfo[move].effect == EFFECT_CHILLY_RECEPTION)) return TRUE; return FALSE; } @@ -3418,7 +3516,7 @@ s32 CountUsablePartyMons(u32 battlerId) else party = gEnemyParty; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battlerOnField1 = gBattlerPartyIndexes[battlerId]; battlerOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battlerId)))]; @@ -3722,11 +3820,14 @@ 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)) { - ADJUST_SCORE_PTR(WEAK_EFFECT); // burning is good - if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL)) + if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL) + || (!(AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_OMNISCIENT) // Not Omniscient but expects physical attacker + && gSpeciesInfo[gBattleMons[battlerDef].species].baseAttack >= gSpeciesInfo[gBattleMons[battlerDef].species].baseSpAttack + 10)) { - if (CanTargetFaintAi(battlerDef, battlerAtk)) - ADJUST_SCORE_PTR(DECENT_EFFECT); // burning the target to stay alive is cool + if (gMovesInfo[GetBestDmgMoveFromBattler(battlerDef, battlerAtk)].category == DAMAGE_CATEGORY_PHYSICAL) + ADJUST_SCORE_PTR(DECENT_EFFECT); + else + ADJUST_SCORE_PTR(WEAK_EFFECT); } if (HasMoveEffectANDArg(battlerAtk, EFFECT_DOUBLE_POWER_ON_ARG_STATUS, STATUS1_BURN) @@ -3803,11 +3904,14 @@ 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)) { - ADJUST_SCORE_PTR(WEAK_EFFECT); // frostbite is good - if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL)) + if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL) + || (!(AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_OMNISCIENT) // Not Omniscient but expects special attacker + && gSpeciesInfo[gBattleMons[battlerDef].species].baseSpAttack >= gSpeciesInfo[gBattleMons[battlerDef].species].baseAttack + 10)) { - if (CanTargetFaintAi(battlerDef, battlerAtk)) - ADJUST_SCORE_PTR(DECENT_EFFECT); // frostbiting the target to stay alive is cool + if (gMovesInfo[GetBestDmgMoveFromBattler(battlerDef, battlerAtk)].category == DAMAGE_CATEGORY_SPECIAL) + ADJUST_SCORE_PTR(DECENT_EFFECT); + else + ADJUST_SCORE_PTR(WEAK_EFFECT); } if (HasMoveEffectANDArg(battlerAtk, EFFECT_DOUBLE_POWER_ON_ARG_STATUS, STATUS1_FROSTBITE) @@ -3829,7 +3933,7 @@ bool32 AI_MoveMakesContact(u32 ability, u32 holdEffect, u32 move) bool32 ShouldUseZMove(u32 battlerAtk, u32 battlerDef, u32 chosenMove) { // simple logic. just upgrades chosen move to z move if possible, unless regular move would kill opponent - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && battlerDef == BATTLE_PARTNER(battlerAtk)) + if ((IsDoubleBattle()) && battlerDef == BATTLE_PARTNER(battlerAtk)) return FALSE; // don't use z move on partner if (HasTrainerUsedGimmick(battlerAtk, GIMMICK_Z_MOVE)) return FALSE; // can't use z move twice @@ -3974,3 +4078,42 @@ bool32 AI_ShouldSpicyExtract(u32 battlerAtk, u32 battlerAtkPartner, u32 move, st && AI_IsFaster(battlerAtk, battlerAtkPartner, TRUE) && HasMoveWithCategory(battlerAtkPartner, DAMAGE_CATEGORY_PHYSICAL)); } + +void IncreaseSubstituteMoveScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score) +{ + if (gMovesInfo[move].effect == EFFECT_SUBSTITUTE) // Substitute specific + { + if (HasAnyKnownMove(battlerDef) && GetBestDmgFromBattler(battlerDef, battlerAtk) < gBattleMons[battlerAtk].maxHP / 4) + ADJUST_SCORE_PTR(GOOD_EFFECT); + } + else if (gMovesInfo[move].effect == EFFECT_SHED_TAIL) // Shed Tail specific + { + if ((ShouldPivot(battlerAtk, battlerDef, AI_DATA->abilities[battlerDef], move, AI_THINKING_STRUCT->movesetIndex)) + && (HasAnyKnownMove(battlerDef) && (GetBestDmgFromBattler(battlerDef, battlerAtk) < gBattleMons[battlerAtk].maxHP / 2))) + ADJUST_SCORE_PTR(BEST_EFFECT); + } + + if (gStatuses3[battlerDef] & STATUS3_PERISH_SONG) + ADJUST_SCORE_PTR(GOOD_EFFECT); + + if (gBattleMons[battlerDef].status1 & STATUS1_SLEEP) + ADJUST_SCORE_PTR(GOOD_EFFECT); + else if (gBattleMons[battlerDef].status1 & (STATUS1_BURN | STATUS1_PSN_ANY | STATUS1_FROSTBITE)) + ADJUST_SCORE_PTR(DECENT_EFFECT); + + // TODO: + // if (IsPredictedToSwitch(battlerDef, battlerAtk) + // ADJUST_SCORE_PTR(DECENT_EFFECT); + + if (HasMoveEffect(battlerDef, EFFECT_SLEEP) + || HasMoveEffect(battlerDef, EFFECT_TOXIC) + || HasMoveEffect(battlerDef, EFFECT_POISON) + || HasMoveEffect(battlerDef, EFFECT_PARALYZE) + || HasMoveEffect(battlerDef, EFFECT_WILL_O_WISP) + || HasMoveEffect(battlerDef, EFFECT_CONFUSE) + || HasMoveEffect(battlerDef, EFFECT_LEECH_SEED)) + ADJUST_SCORE_PTR(GOOD_EFFECT); + + if (AI_DATA->hpPercents[battlerAtk] > 70) + ADJUST_SCORE_PTR(WEAK_EFFECT); +} diff --git a/src/battle_anim.c b/src/battle_anim.c index 71813ddf46..b036f83cbf 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -1,6 +1,7 @@ #include "global.h" #include "battle.h" #include "battle_anim.h" +#include "battle_anim_scripts.h" #include "battle_controllers.h" #include "battle_interface.h" #include "battle_util.h" @@ -29,11 +30,6 @@ #define ANIM_SPRITE_INDEX_COUNT 8 -extern const u16 gMovesWithQuietBGM[]; -extern const u8 *const gBattleAnims_General[]; -extern const u8 *const gBattleAnims_Special[]; -extern const u8 *const gBattleAnims_StatusConditions[]; - static void Cmd_loadspritegfx(void); static void Cmd_unloadspritegfx(void); static void Cmd_createsprite(void); @@ -182,6 +178,93 @@ static void (* const sScriptCmdTable[])(void) = Cmd_createdragondartsprite, // 0x34 }; +static const u16 sMovesWithQuietBGM[] = +{ + MOVE_SING, MOVE_PERISH_SONG, MOVE_GRASS_WHISTLE +}; + +static const u8* const sBattleAnims_StatusConditions[NUM_B_ANIMS_STATUS] = +{ + [B_ANIM_STATUS_PSN] = gBattleAnimStatus_Poison, + [B_ANIM_STATUS_CONFUSION] = gBattleAnimStatus_Confusion, + [B_ANIM_STATUS_BRN] = gBattleAnimStatus_Burn, + [B_ANIM_STATUS_INFATUATION] = gBattleAnimStatus_Infatuation, + [B_ANIM_STATUS_SLP] = gBattleAnimStatus_Sleep, + [B_ANIM_STATUS_PRZ] = gBattleAnimStatus_Paralysis, + [B_ANIM_STATUS_FRZ] = gBattleAnimStatus_Freeze, + [B_ANIM_STATUS_CURSED] = gBattleAnimStatus_Curse, + [B_ANIM_STATUS_NIGHTMARE] = gBattleAnimStatus_Nightmare, +}; + +static const u8* const sBattleAnims_General[NUM_B_ANIMS_GENERAL] = +{ + [B_ANIM_STATS_CHANGE] = gBattleAnimGeneral_StatsChange, + [B_ANIM_SUBSTITUTE_FADE] = gBattleAnimGeneral_SubstituteFade, + [B_ANIM_SUBSTITUTE_APPEAR] = gBattleAnimGeneral_SubstituteAppear, + [B_ANIM_POKEBLOCK_THROW] = gBattleAnimGeneral_PokeblockThrow, + [B_ANIM_ITEM_KNOCKOFF] = gBattleAnimGeneral_ItemKnockoff, + [B_ANIM_TURN_TRAP] = gBattleAnimGeneral_TurnTrap, + [B_ANIM_HELD_ITEM_EFFECT] = gBattleAnimGeneral_HeldItemEffect, + [B_ANIM_SMOKEBALL_ESCAPE] = gBattleAnimGeneral_SmokeballEscape, + [B_ANIM_HANGED_ON] = gBattleAnimGeneral_HangedOn, + [B_ANIM_RAIN_CONTINUES] = gBattleAnimGeneral_Rain, + [B_ANIM_SUN_CONTINUES] = gBattleAnimGeneral_Sun, + [B_ANIM_SANDSTORM_CONTINUES] = gBattleAnimGeneral_Sandstorm, + [B_ANIM_HAIL_CONTINUES] = gBattleAnimGeneral_Hail, + [B_ANIM_LEECH_SEED_DRAIN] = gBattleAnimGeneral_LeechSeedDrain, + [B_ANIM_MON_HIT] = gBattleAnimGeneral_MonHit, + [B_ANIM_ITEM_STEAL] = gBattleAnimGeneral_ItemSteal, + [B_ANIM_SNATCH_MOVE] = gBattleAnimGeneral_SnatchMove, + [B_ANIM_FUTURE_SIGHT_HIT] = gBattleAnimGeneral_FutureSightHit, + [B_ANIM_DOOM_DESIRE_HIT] = gBattleAnimGeneral_DoomDesireHit, + [B_ANIM_FOCUS_PUNCH_SETUP] = gBattleAnimGeneral_FocusPunchSetUp, + [B_ANIM_INGRAIN_HEAL] = gBattleAnimGeneral_IngrainHeal, + [B_ANIM_WISH_HEAL] = gBattleAnimGeneral_WishHeal, + [B_ANIM_MEGA_EVOLUTION] = gBattleAnimGeneral_MegaEvolution, + [B_ANIM_ILLUSION_OFF] = gBattleAnimGeneral_IllusionOff, + [B_ANIM_FORM_CHANGE] = gBattleAnimGeneral_FormChange, + [B_ANIM_SLIDE_OFFSCREEN] = gBattleAnimGeneral_SlideOffScreen, + [B_ANIM_RESTORE_BG] = gBattleAnimGeneral_RestoreBg, + [B_ANIM_TOTEM_FLARE] = gBattleAnimGeneral_TotemFlare, + [B_ANIM_GULP_MISSILE] = gBattleAnimGeneral_GulpMissile, + [B_ANIM_STRONG_WINDS] = gBattleAnimGeneral_StrongWinds, + [B_ANIM_PRIMAL_REVERSION] = gBattleAnimGeneral_PrimalReversion, + [B_ANIM_AQUA_RING_HEAL] = gBattleAnimGeneral_AquaRingHeal, + [B_ANIM_BEAK_BLAST_SETUP] = gBattleAnimGeneral_BeakBlastSetUp, + [B_ANIM_SHELL_TRAP_SETUP] = gBattleAnimGeneral_ShellTrapSetUp, + [B_ANIM_ZMOVE_ACTIVATE] = gBattleAnimGeneral_ZMoveActivate, + [B_ANIM_AFFECTION_HANGED_ON] = gBattleAnimGeneral_AffectionHangedOn, + [B_ANIM_SNOW_CONTINUES] = gBattleAnimGeneral_Snow, + [B_ANIM_ULTRA_BURST] = gBattleAnimGeneral_UltraBurst, + [B_ANIM_SALT_CURE_DAMAGE] = gBattleAnimGeneral_SaltCureDamage, + [B_ANIM_DYNAMAX_GROWTH] = gBattleAnimGeneral_DynamaxGrowth, + [B_ANIM_MAX_SET_WEATHER] = gBattleAnimGeneral_SetWeather, + [B_ANIM_SYRUP_BOMB_SPEED_DROP] = gBattleAnimGeneral_SyrupBombSpeedDrop, + [B_ANIM_RAINBOW] = gBattleAnimGeneral_Rainbow, + [B_ANIM_SEA_OF_FIRE] = gBattleAnimGeneral_SeaOfFire, + [B_ANIM_SWAMP] = gBattleAnimGeneral_Swamp, + [B_ANIM_TRICK_ROOM] = gBattleAnimGeneral_TrickRoom, + [B_ANIM_WONDER_ROOM] = gBattleAnimGeneral_WonderRoom, + [B_ANIM_MAGIC_ROOM] = gBattleAnimGeneral_MagicRoom, + [B_ANIM_TAILWIND] = gBattleAnimGeneral_Tailwind, + [B_ANIM_FOG_CONTINUES] = gBattleAnimGeneral_Fog, + [B_ANIM_TERA_CHARGE] = gBattleAnimGeneral_TeraCharge, + [B_ANIM_TERA_ACTIVATE] = gBattleAnimGeneral_TeraActivate, + [B_ANIM_SIMPLE_HEAL] = gBattleAnimGeneral_SimpleHeal, +}; + +static const u8* const sBattleAnims_Special[NUM_B_ANIMS_SPECIAL] = +{ + [B_ANIM_LVL_UP] = gBattleAnimSpecial_LevelUp, + [B_ANIM_SWITCH_OUT_PLAYER_MON] = gBattleAnimSpecial_SwitchOutPlayerMon, + [B_ANIM_SWITCH_OUT_OPPONENT_MON] = gBattleAnimSpecial_SwitchOutOpponentMon, + [B_ANIM_BALL_THROW] = gBattleAnimSpecial_BallThrow, + [B_ANIM_BALL_THROW_WITH_TRAINER] = gBattleAnimSpecial_BallThrowWithTrainer, + [B_ANIM_SUBSTITUTE_TO_MON] = gBattleAnimSpecial_SubstituteToMon, + [B_ANIM_MON_TO_SUBSTITUTE] = gBattleAnimSpecial_MonToSubstitute, + [B_ANIM_CRITICAL_CAPTURE_THROW] = gBattleAnimSpecial_CriticalCaptureBallThrow, +}; + void ClearBattleAnimationVars(void) { s32 i; @@ -314,16 +397,16 @@ void LaunchBattleAnimation(u32 animType, u32 animId) { case ANIM_TYPE_GENERAL: default: - sBattleAnimScriptPtr = gBattleAnims_General[animId]; + sBattleAnimScriptPtr = sBattleAnims_General[animId]; break; case ANIM_TYPE_MOVE: sBattleAnimScriptPtr = GetMoveAnimationScript(animId); break; case ANIM_TYPE_STATUS: - sBattleAnimScriptPtr = gBattleAnims_StatusConditions[animId]; + sBattleAnimScriptPtr = sBattleAnims_StatusConditions[animId]; break; case ANIM_TYPE_SPECIAL: - sBattleAnimScriptPtr = gBattleAnims_Special[animId]; + sBattleAnimScriptPtr = sBattleAnims_Special[animId]; break; } gAnimScriptActive = TRUE; @@ -335,9 +418,9 @@ void LaunchBattleAnimation(u32 animType, u32 animId) if (animType == ANIM_TYPE_MOVE) { - for (i = 0; gMovesWithQuietBGM[i] != 0xFFFF; i++) + for (i = 0; i < ARRAY_COUNT(sMovesWithQuietBGM); i++) { - if (animId == gMovesWithQuietBGM[i]) + if (animId == sMovesWithQuietBGM[i]) { m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 128); break; @@ -798,7 +881,7 @@ static void Cmd_end(void) // Debugging - ensure no hanging mon bg tasks if (FuncIsActiveTask(Task_UpdateMonBg)) DebugPrintf("Move %d animation still has Task_UpdateMonBg active at the end!", gAnimMoveIndex); - + m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 256); if (!IsContest()) { @@ -2145,12 +2228,9 @@ static void Cmd_stopsound(void) static void Cmd_jumpifmovetypeequal(void) { - u8 moveType; const u8 *type = sBattleAnimScriptPtr + 1; sBattleAnimScriptPtr += 2; - GET_MOVE_TYPE(gCurrentMove, moveType); - - if (*type != moveType) + if (*type != GetMoveType(gCurrentMove)) sBattleAnimScriptPtr += 4; else sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); diff --git a/src/battle_anim_bug.c b/src/battle_anim_bug.c index 65bfcba2e1..e897290768 100644 --- a/src/battle_anim_bug.c +++ b/src/battle_anim_bug.c @@ -11,7 +11,6 @@ static void AnimTranslateWebThread_Step(struct Sprite *); static void AnimStringWrap(struct Sprite *); static void AnimSpiderWeb_Step(struct Sprite *); static void AnimSpiderWeb_End(struct Sprite *); -static void AnimTranslateStinger(struct Sprite *); static void AnimTailGlowOrb(struct Sprite *); static const union AffineAnimCmd sAffineAnim_MegahornHorn_0[] = @@ -371,7 +370,7 @@ static void AnimSpiderWeb_End(struct Sprite *sprite) // arg 2: target x pixel offset // arg 3: target y pixel offset // arg 4: duration -static void AnimTranslateStinger(struct Sprite *sprite) +void AnimTranslateStinger(struct Sprite *sprite) { s16 lVarX, lVarY; u16 rot; diff --git a/src/battle_anim_dragon.c b/src/battle_anim_dragon.c index 4191c42585..f3ee2a3818 100644 --- a/src/battle_anim_dragon.c +++ b/src/battle_anim_dragon.c @@ -42,35 +42,35 @@ const struct SpriteTemplate gOutrageFlameSpriteTemplate = .callback = AnimOutrageFlame, }; -static const union AnimCmd sAnim_DreepyMissileOpponent_0[] = +static const union AnimCmd sAnim_DreepyMissileOpponent_0[] = { ANIMCMD_FRAME(0, 0, .hFlip = TRUE), ANIMCMD_END, }; -const union AnimCmd *const gAnims_DreepyMissileOpponent[] = +const union AnimCmd *const gAnims_DreepyMissileOpponent[] = { sAnim_DreepyMissileOpponent_0, }; -static const union AnimCmd sAnim_DreepyMissilePlayer_0[] = +static const union AnimCmd sAnim_DreepyMissilePlayer_0[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_END, }; -const union AnimCmd *const gAnims_DreepyMissilePlayer[] = +const union AnimCmd *const gAnims_DreepyMissilePlayer[] = { sAnim_DreepyMissilePlayer_0, }; -static const union AnimCmd sAnim_DreepyMissileNotDrag_0[] = +static const union AnimCmd sAnim_DreepyMissileNotDrag_0[] = { ANIMCMD_FRAME(0, 0, .hFlip = TRUE, .vFlip = TRUE), ANIMCMD_END, }; -const union AnimCmd *const gAnims_DreepyMissileOpponentNotDrag[] = +const union AnimCmd *const gAnims_DreepyMissileOpponentNotDrag[] = { sAnim_DreepyMissileNotDrag_0, }; @@ -627,36 +627,36 @@ static void AnimOverheatFlame_Step(struct Sprite *sprite) void AnimDracoMeteorRock(struct Sprite *sprite) { - if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) - { - sprite->data[0] = sprite->x - gBattleAnimArgs[0]; - sprite->data[2] = sprite->x - gBattleAnimArgs[2]; - } - else - { - sprite->data[0] = sprite->x + gBattleAnimArgs[0]; - sprite->data[2] = sprite->x + gBattleAnimArgs[2]; - } + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + { + sprite->data[0] = sprite->x - gBattleAnimArgs[0]; + sprite->data[2] = sprite->x - gBattleAnimArgs[2]; + } + else + { + sprite->data[0] = sprite->x + gBattleAnimArgs[0]; + sprite->data[2] = sprite->x + gBattleAnimArgs[2]; + } - sprite->data[1] = sprite->y + gBattleAnimArgs[1]; - sprite->data[3] = sprite->y + gBattleAnimArgs[3]; - sprite->data[4] = gBattleAnimArgs[4]; + sprite->data[1] = sprite->y + gBattleAnimArgs[1]; + sprite->data[3] = sprite->y + gBattleAnimArgs[3]; + sprite->data[4] = gBattleAnimArgs[4]; - sprite->data[6] = gBattleAnimArgs[2]; - sprite->data[7] = gBattleAnimArgs[3]; + sprite->data[6] = gBattleAnimArgs[2]; + sprite->data[7] = gBattleAnimArgs[3]; - sprite->x = sprite->data[0]; - sprite->y = sprite->data[1]; - sprite->callback = AnimDracoMeteorRock_Step; + sprite->x = sprite->data[0]; + sprite->y = sprite->data[1]; + sprite->callback = AnimDracoMeteorRock_Step; } static void AnimDracoMeteorRock_Step(struct Sprite *sprite) { - sprite->x2 = ((sprite->data[2] - sprite->data[0]) * sprite->data[5]) / sprite->data[4]; - sprite->y2 = ((sprite->data[3] - sprite->data[1]) * sprite->data[5]) / sprite->data[4]; + sprite->x2 = ((sprite->data[2] - sprite->data[0]) * sprite->data[5]) / sprite->data[4]; + sprite->y2 = ((sprite->data[3] - sprite->data[1]) * sprite->data[5]) / sprite->data[4]; - if (sprite->data[5] == sprite->data[4]) - DestroyAnimSprite(sprite); + if (sprite->data[5] == sprite->data[4]) + DestroyAnimSprite(sprite); - sprite->data[5]++; + sprite->data[5]++; } diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index b917cdc9a5..50fd34921f 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -2535,13 +2535,13 @@ const struct SpriteTemplate gTauntFingerSpriteTemplate = const struct SpriteTemplate gPowerOrbs_Float = { - .tileTag = ANIM_TAG_RED_ORB, - .paletteTag = ANIM_TAG_RED_ORB, - .oam = &gOamData_AffineOff_ObjNormal_16x16, - .anims = gSporeParticleAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = AnimSporeParticle, + .tileTag = ANIM_TAG_RED_ORB, + .paletteTag = ANIM_TAG_RED_ORB, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gSporeParticleAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSporeParticle, }; const union AnimCmd gRockPolishStreak_AnimCmd[] = @@ -3101,6 +3101,17 @@ const struct SpriteTemplate gPsyshockSmokeSpriteTemplate = .callback = AnimSpriteOnMonPos, }; +const struct SpriteTemplate gChainBindingSpriteTemplate = +{ + .tileTag = ANIM_TAG_PURPLE_CHAIN, + .paletteTag = ANIM_TAG_PURPLE_CHAIN, + .oam = &gOamData_AffineNormal_ObjNormal_64x32, + .anims = sAnims_ConstrictBinding, + .images = NULL, + .affineAnims = sAffineAnims_ConstrictBinding, + .callback = AnimConstrictBinding, +}; + // functions static void AnimGrassKnot(struct Sprite *sprite) { @@ -3317,7 +3328,7 @@ static void AnimSolarBeamSmallOrb(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, TRUE); - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gAnimMoveIndex == MOVE_CORE_ENFORCER) + if (IsDoubleBattle() && gAnimMoveIndex == MOVE_CORE_ENFORCER) { CoreEnforcerLoadBeamTarget(sprite); } @@ -5484,8 +5495,8 @@ static void AnimMilkBottle_Step2(struct Sprite *sprite, int unk1, int unk2) void AnimGrantingStars(struct Sprite *sprite) { - if (!gBattleAnimArgs[2]) - SetSpriteCoordsToAnimAttackerCoords(sprite); + if (!InitSpritePosToAnimBattler(gBattleAnimArgs[2], sprite, FALSE)) + return; SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); sprite->y += gBattleAnimArgs[1]; @@ -6567,11 +6578,11 @@ void PrepareDoubleTeamAnim(u32 taskId, u32 animBattler, bool32 forAllySwitch) gSprites[spriteId].sBattlerFlank = (animBattler != ANIM_ATTACKER); else gSprites[spriteId].sBattlerFlank = (animBattler == ANIM_ATTACKER); - + // correct direction on opponent side if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) gSprites[spriteId].sBattlerFlank ^= 1; - + gSprites[spriteId].callback = AnimDoubleTeam; task->tBlendSpritesCount++; } @@ -6603,14 +6614,31 @@ static void ReloadBattlerSprites(u32 battler, struct Pokemon *party) UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], mon, HEALTHBOX_ALL); // If battler has an indicator for a gimmick, hide the sprite until the move animation finishes. UpdateIndicatorVisibilityAndType(gHealthboxSpriteIds[battler], TRUE); - + // Try to recreate shadow sprite - if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId < MAX_SPRITES) + if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4) { - DestroySprite(&gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId]); - gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId = MAX_SPRITES; - CreateEnemyShadowSprite(battler); - SetBattlerShadowSpriteCallback(battler, GetMonData(mon, MON_DATA_SPECIES)); + // Both of these *should* be true, but use an OR just to be certain + if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary < MAX_SPRITES + || gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary < MAX_SPRITES) + { + DestroySprite(&gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary]); + DestroySprite(&gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary]); + gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary = MAX_SPRITES; + gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary = MAX_SPRITES; + CreateEnemyShadowSprite(battler); + SetBattlerShadowSpriteCallback(battler, GetMonData(mon, MON_DATA_SPECIES)); + } + } + else + { + if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary < MAX_SPRITES) + { + DestroySprite(&gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary]); + gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary = MAX_SPRITES; + CreateEnemyShadowSprite(battler); + SetBattlerShadowSpriteCallback(battler, GetMonData(mon, MON_DATA_SPECIES)); + } } } @@ -7223,26 +7251,42 @@ static void AnimNightSlash(struct Sprite *sprite) static const union AffineAnimCmd sCompressTargetHorizontallyAffineAnimCmds[] = { - AFFINEANIMCMD_FRAME(64, 0, 0, 16), //Compress - AFFINEANIMCMD_FRAME(0, 0, 0, 64), - AFFINEANIMCMD_FRAME(-64, 0, 0, 16), - AFFINEANIMCMD_END, + AFFINEANIMCMD_FRAME(64, 0, 0, 16), //Compress + AFFINEANIMCMD_FRAME(0, 0, 0, 64), + AFFINEANIMCMD_FRAME(-64, 0, 0, 16), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd sCompressTargetHorizontallyAffineAnimCmdsFast[] = +{ + AFFINEANIMCMD_FRAME(32, 0, 0, 16), //Compress + AFFINEANIMCMD_FRAME(0, 0, 0, 32), + AFFINEANIMCMD_FRAME(-32, 0, 0, 16), + AFFINEANIMCMD_END, }; static void AnimTask_CompressTargetStep(u8 taskId) { - struct Task* task = &gTasks[taskId]; + struct Task* task = &gTasks[taskId]; - if (!RunAffineAnimFromTaskData(task)) - DestroyAnimVisualTask(taskId); + if (!RunAffineAnimFromTaskData(task)) + DestroyAnimVisualTask(taskId); } void AnimTask_CompressTargetHorizontally(u8 taskId) { - struct Task* task = &gTasks[taskId]; - u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); - PrepareAffineAnimInTaskData(task, spriteId, sCompressTargetHorizontallyAffineAnimCmds); - task->func = AnimTask_CompressTargetStep; + struct Task* task = &gTasks[taskId]; + u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + PrepareAffineAnimInTaskData(task, spriteId, sCompressTargetHorizontallyAffineAnimCmds); + task->func = AnimTask_CompressTargetStep; +} + +void AnimTask_CompressTargetHorizontallyFast(u8 taskId) +{ + struct Task* task = &gTasks[taskId]; + u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + PrepareAffineAnimInTaskData(task, spriteId, sCompressTargetHorizontallyAffineAnimCmdsFast); + task->func = AnimTask_CompressTargetStep; } void AnimTask_CreateSmallSteelBeamOrbs(u8 taskId) diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index 3324d276fd..b33c0a8bb6 100755 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -1726,7 +1726,7 @@ void AnimTask_AirCutterProjectile(u8 taskId) attackerX = gTasks[taskId].data[9] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); attackerY = gTasks[taskId].data[10] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y); - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle() && IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget))) { SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &targetX, &targetY); @@ -3854,7 +3854,7 @@ static void AnimPerishSongMusicNote_Step2(struct Sprite *sprite) static void AnimGuardRing(struct Sprite *sprite) { - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) + if (IsDoubleBattle() && IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) { SetAverageBattlerPositions(gBattleAnimAttacker, FALSE, &sprite->x, &sprite->y); sprite->y += 40; diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index ed2e7457f6..8c2d73ff80 100644 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -1281,6 +1281,17 @@ const struct SpriteTemplate gTeraCrystalSpreadSpriteTemplate = .callback = AnimTask_TeraCrystalShatter, }; +const struct SpriteTemplate gPinkPetalVortexTemplate = +{ + .tileTag = ANIM_TAG_PINK_PETAL, + .paletteTag = ANIM_TAG_PINK_PETAL, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSweetScentPetalAnimCmdTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimParticleInVortex +}; + // Task data for AnimTask_TeraCrystalShatter #define tCounter data[0] #define tDX data[6] diff --git a/src/battle_anim_electric.c b/src/battle_anim_electric.c index 38ca948749..de6d820264 100644 --- a/src/battle_anim_electric.c +++ b/src/battle_anim_electric.c @@ -525,17 +525,17 @@ const struct SpriteTemplate gFlashCannonGrayChargeTemplate = static const union AffineAnimCmd sSpriteAffineAnim_JudgmentBall[] = { - AFFINEANIMCMD_FRAME(16, 16, 0, 0), - AFFINEANIMCMD_FRAME(8, 8, 0, 15), //Half size - AFFINEANIMCMD_FRAME(0, 0, 0, 120), //Delay - AFFINEANIMCMD_FRAME(24, 24, 0, 5), //Normal size - AFFINEANIMCMD_FRAME(0, 0, 0, 10), //Delay - AFFINEANIMCMD_FRAME(-16, -16, 0, 15), //Revert to 1 px - AFFINEANIMCMD_END, + AFFINEANIMCMD_FRAME(16, 16, 0, 0), + AFFINEANIMCMD_FRAME(8, 8, 0, 15), //Half size + AFFINEANIMCMD_FRAME(0, 0, 0, 120), //Delay + AFFINEANIMCMD_FRAME(24, 24, 0, 5), //Normal size + AFFINEANIMCMD_FRAME(0, 0, 0, 10), //Delay + AFFINEANIMCMD_FRAME(-16, -16, 0, 15), //Revert to 1 px + AFFINEANIMCMD_END, }; static const union AffineAnimCmd* const sSpriteAffineAnimTable_JudgmentBall[] = { - sSpriteAffineAnim_JudgmentBall, + sSpriteAffineAnim_JudgmentBall, }; const struct SpriteTemplate gJudgmentBlackChargeTemplate = { diff --git a/src/battle_anim_fight.c b/src/battle_anim_fight.c index 0db2a92afc..ed18e89f9b 100644 --- a/src/battle_anim_fight.c +++ b/src/battle_anim_fight.c @@ -403,24 +403,24 @@ const struct SpriteTemplate gFocusPunchFistSpriteTemplate = const struct SpriteTemplate gPalmSpriteTemplate = { - .tileTag = ANIM_TAG_PURPLE_HAND_OUTLINE, - .paletteTag = ANIM_TAG_PURPLE_HAND_OUTLINE, - .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = gAnims_HandsAndFeet, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = AnimBasicFistOrFoot, + .tileTag = ANIM_TAG_PURPLE_HAND_OUTLINE, + .paletteTag = ANIM_TAG_PURPLE_HAND_OUTLINE, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_HandsAndFeet, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimBasicFistOrFoot, }; const struct SpriteTemplate gAuraSphereBlast = { - .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, - .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, - .oam = &gOamData_AffineOff_ObjNormal_64x64, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = AnimSuperpowerFireball, + .tileTag = ANIM_TAG_IMPACT_2, + .paletteTag = ANIM_TAG_IMPACT_2, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSuperpowerFireball, }; const union AffineAnimCmd gForcePalmAffineAnimCmd_1[] = diff --git a/src/battle_anim_fire.c b/src/battle_anim_fire.c index 3a770a7c8c..401cc09eaf 100644 --- a/src/battle_anim_fire.c +++ b/src/battle_anim_fire.c @@ -530,13 +530,13 @@ const struct SpriteTemplate gSpacialRendBladesTemplate2 = // Sea of Fire const struct SpriteTemplate gTwisterEmberSpriteTemplate = { - .tileTag = ANIM_TAG_SMALL_EMBER, - .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = gAnims_BasicFire, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = AnimMoveTwisterParticle, + .tileTag = ANIM_TAG_SMALL_EMBER, + .paletteTag = ANIM_TAG_SMALL_EMBER, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAnims_BasicFire, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimMoveTwisterParticle, }; static void AnimLavaPlumeOrbitScatter(struct Sprite *sprite) diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c index f58aa97ee2..7d21624495 100644 --- a/src/battle_anim_flying.c +++ b/src/battle_anim_flying.c @@ -33,7 +33,7 @@ static void AnimSkyAttackBird_Step(struct Sprite *); static void AnimTask_AnimateGustTornadoPalette_Step(u8); static void AnimTask_LoadWindstormBackground_Step(u8 taskId); -const struct SpriteTemplate gEllipticalGustCenteredSpriteTemplate = +const struct SpriteTemplate gEllipticalGustCenteredSpriteTemplate = { .tileTag = ANIM_TAG_GUST, .paletteTag = ANIM_TAG_GUST, @@ -359,7 +359,10 @@ const struct SpriteTemplate gSkyAttackBirdSpriteTemplate = // same as AnimEllipticalGust but centered on targets static void AnimEllipticalGustCentered(struct Sprite *sprite) { - InitSpritePosToAnimTargetsCentre(sprite, FALSE); + if (IsDoubleBattle()) + InitSpritePosToAnimTargetsCentre(sprite, FALSE); + else + InitSpritePosToAnimTarget(sprite, FALSE); sprite->y += 20; sprite->data[1] = 191; sprite->callback = AnimEllipticalGust_Step; @@ -527,7 +530,7 @@ void AnimFlyBallAttack(struct Sprite *sprite) sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); sprite->data[3] = sprite->y; sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); - sprite->data[5] = gBattleAnimArgs[1]; // if sprite is to remain invisible + sprite->data[5] = gBattleAnimArgs[1]; // if sprite is to remain invisible InitAnimLinearTranslation(sprite); sprite->callback = AnimFlyBallAttack_Step; diff --git a/src/battle_anim_mon_movement.c b/src/battle_anim_mon_movement.c index cbd70817f5..04fd111a84 100644 --- a/src/battle_anim_mon_movement.c +++ b/src/battle_anim_mon_movement.c @@ -487,11 +487,7 @@ static void ReverseVerticalDipDirection(struct Sprite *sprite) // arg 2: duration static void SlideMonToOriginalPos(struct Sprite *sprite) { - u32 monSpriteId; - if (!gBattleAnimArgs[0]) - monSpriteId = gBattlerSpriteIds[gBattleAnimAttacker]; - else - monSpriteId = gBattlerSpriteIds[gBattleAnimTarget]; + u32 monSpriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); sprite->data[0] = gBattleAnimArgs[2]; sprite->data[1] = gSprites[monSpriteId].x + gSprites[monSpriteId].x2; @@ -554,15 +550,9 @@ static void SlideMonToOriginalPos_Step(struct Sprite *sprite) // arg 4: duration static void SlideMonToOffset(struct Sprite *sprite) { - u8 battler; - u8 monSpriteId; - if (!gBattleAnimArgs[0]) - battler = gBattleAnimAttacker; - else - battler = gBattleAnimTarget; + u8 monSpriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); - monSpriteId = gBattlerSpriteIds[battler]; - if (GetBattlerSide(battler) != B_SIDE_PLAYER) + if (GetBattlerSide(gBattleAnimArgs[0]) != B_SIDE_PLAYER) { gBattleAnimArgs[1] = -gBattleAnimArgs[1]; if (gBattleAnimArgs[3] == 1) @@ -730,13 +720,13 @@ static void AnimTask_DuckDownHop_Step1(u8 taskId) { u8 spriteId; - spriteId = gTasks[taskId].data[0]; - gTasks[taskId].data[12] += gTasks[taskId].data[5]; - gSprites[spriteId].y2 = (gTasks[taskId].data[12] >> 8); - if (--gTasks[taskId].data[6] == 0) - { + spriteId = gTasks[taskId].data[0]; + gTasks[taskId].data[12] += gTasks[taskId].data[5]; + gSprites[spriteId].y2 = (gTasks[taskId].data[12] >> 8); + if (--gTasks[taskId].data[6] == 0) + { gTasks[taskId].func = AnimTask_DuckDownHop_Step2; - } + } } static void AnimTask_DuckDownHop_Step2(u8 taskId) @@ -748,11 +738,11 @@ static void AnimTask_DuckDownHop_Step2(u8 taskId) } else { - spriteId = gTasks[taskId].data[0]; - gTasks[taskId].data[11] += gTasks[taskId].data[1]; - gSprites[spriteId].x2 = gTasks[taskId].data[11] >> 8; - gSprites[spriteId].y2 = Sin((u8)(gTasks[taskId].data[10] >> 8), gTasks[taskId].data[2]) + (gTasks[taskId].data[12] >> 8); - gTasks[taskId].data[10] += gTasks[taskId].data[7]; + spriteId = gTasks[taskId].data[0]; + gTasks[taskId].data[11] += gTasks[taskId].data[1]; + gSprites[spriteId].x2 = gTasks[taskId].data[11] >> 8; + gSprites[spriteId].y2 = Sin((u8)(gTasks[taskId].data[10] >> 8), gTasks[taskId].data[2]) + (gTasks[taskId].data[12] >> 8); + gTasks[taskId].data[10] += gTasks[taskId].data[7]; if (--gTasks[taskId].data[3] == 0) { DestroyAnimVisualTask(taskId); diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index 542a179d6a..dec12e0dc6 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -17,8 +17,6 @@ #include "util.h" #include "constants/battle_anim.h" -#define IS_DOUBLE_BATTLE() ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) - extern const struct OamData gOamData_AffineNormal_ObjNormal_64x64; static void AnimTranslateLinear_WithFollowup_SetCornerVecX(struct Sprite *sprite); @@ -118,11 +116,7 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType) } else { - if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) - mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]]; - else - mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]]; - + mon = GetPartyBattlerData(battlerId); illusionMon = GetIllusionMonPtr(battlerId); if (illusionMon != NULL) mon = illusionMon; @@ -663,12 +657,6 @@ static void UNUSED TranslateSpriteToBattleAttackerPos(struct Sprite *sprite) #undef sStartY #undef sTargetY -static void UNUSED EndUnkPaletteAnim(struct Sprite *sprite) -{ - PaletteStruct_ResetById(sprite->data[5]); - DestroySpriteAndMatrix(sprite); -} - void RunStoredCallbackWhenAffineAnimEnds(struct Sprite *sprite) { if (sprite->affineAnimEnded) @@ -874,11 +862,6 @@ bool8 IsBattlerSpritePresent(u8 battlerId) } } -bool8 IsDoubleBattle(void) -{ - return IS_DOUBLE_BATTLE(); -} - #define BG_ANIM_PAL_1 8 #define BG_ANIM_PAL_2 9 #define BG_ANIM_PAL_CONTEST 14 diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c index f023859b59..50bb83305f 100644 --- a/src/battle_anim_new.c +++ b/src/battle_anim_new.c @@ -2175,18 +2175,7 @@ const struct SpriteTemplate gSpiritShackleArrowTemplate = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = AnimSonicBoomProjectile -}; - -const struct SpriteTemplate gSpiritShackleChainTemplate = -{ - .tileTag = ANIM_TAG_CHAIN_LINK, - .paletteTag = ANIM_TAG_CHAIN_LINK, - .oam = &gOamData_AffineOff_ObjNormal_32x16, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = AnimThunderWave + .callback = AnimTranslateStinger }; //darkest lariat @@ -4201,13 +4190,13 @@ const struct SpriteTemplate gTripleAxelIceCrystalSpriteTemplate = // dual wingbeat static const union AffineAnimCmd sSpriteAffineAnim_WingAttackFeather[] = { - AFFINEANIMCMD_FRAME(0, 0, -1, 14), //Rotate a little right - AFFINEANIMCMD_FRAME(0, 0, 1, 28), //Rotate a little left - AFFINEANIMCMD_END, + AFFINEANIMCMD_FRAME(0, 0, -1, 14), //Rotate a little right + AFFINEANIMCMD_FRAME(0, 0, 1, 28), //Rotate a little left + AFFINEANIMCMD_END, }; static const union AffineAnimCmd* const sSpriteAffineAnimTable_WingAttackFeather[] = { - sSpriteAffineAnim_WingAttackFeather, + sSpriteAffineAnim_WingAttackFeather, }; const struct SpriteTemplate gDualWingbeatFeatherSpriteTemplate = { @@ -4233,11 +4222,11 @@ const struct SpriteTemplate gSpriteTemplate_LargeCrossImpact = { // expanding force static const struct OamData sGeyserOam = { - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .shape = SPRITE_SHAPE(32x32), - .size = SPRITE_SIZE(32x32), - .priority = 1, //Above sprites + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .priority = 1, //Above sprites }; const struct SpriteTemplate gSpriteTemplate_ExpandingForceExplode = { .tileTag = ANIM_TAG_EXPLOSION_2, @@ -4251,12 +4240,12 @@ const struct SpriteTemplate gSpriteTemplate_ExpandingForceExplode = { // spirit break static const union AffineAnimCmd sSpriteAffineAnim_SpiritBreakBall[] = { - AFFINEANIMCMD_FRAME(16, 16, 0, 0), - AFFINEANIMCMD_FRAME(2, 2, 0, 50), //Grow slowly to half size - AFFINEANIMCMD_END, + AFFINEANIMCMD_FRAME(16, 16, 0, 0), + AFFINEANIMCMD_FRAME(2, 2, 0, 50), //Grow slowly to half size + AFFINEANIMCMD_END, }; static const union AffineAnimCmd* const sSpriteAffineAnimTable_SpiritBreakBall[] = { - sSpriteAffineAnim_SpiritBreakBall, + sSpriteAffineAnim_SpiritBreakBall, }; const struct SpriteTemplate gSpriteTemplate_SpiritBreakChargeBall = { .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, @@ -4280,11 +4269,11 @@ const struct SpriteTemplate gSpriteTemplate_SpiritBreakExplode = { // chloroblast const union AffineAnimCmd sSpriteAffineAnim_HydroCannonBall[] = { - AFFINEANIMCMD_FRAME(16, 16, 0, 16), //Double in size - AFFINEANIMCMD_END + AFFINEANIMCMD_FRAME(16, 16, 0, 16), //Double in size + AFFINEANIMCMD_END }; const union AffineAnimCmd* const sSpriteAffineAnimTable_HydroCannonBall[] = { - sSpriteAffineAnim_HydroCannonBall, + sSpriteAffineAnim_HydroCannonBall, }; const struct SpriteTemplate gSpriteTemplate_ChloroblastShot = { .tileTag = ANIM_TAG_HYDRO_PUMP, @@ -4393,12 +4382,12 @@ const struct SpriteTemplate gSpriteTemplate_FlipTurnBack = { // wicked blow static const union AffineAnimCmd sSpriteAffineAnim_DrainPunchFist[] = { - AFFINEANIMCMD_FRAME(256, 256, 0, 1), //Double sprite size - AFFINEANIMCMD_FRAME(-32, -32, 0, 8), - AFFINEANIMCMD_END, + AFFINEANIMCMD_FRAME(256, 256, 0, 1), //Double sprite size + AFFINEANIMCMD_FRAME(-32, -32, 0, 8), + AFFINEANIMCMD_END, }; static const union AffineAnimCmd* const sSpriteAffineAnimTable_DrainPunchFist[] = { - sSpriteAffineAnim_DrainPunchFist, + sSpriteAffineAnim_DrainPunchFist, }; const struct SpriteTemplate gSpriteTemplate_WickedBlowFist = { @@ -4431,14 +4420,14 @@ const struct SpriteTemplate gSpriteTemplate_WickedBlowRedStars = { // surging strikes static const union AnimCmd sAnimCmdSurgingStrike[] = { - //Only tthe first three frames of the animation - ANIMCMD_FRAME(64, 4), - ANIMCMD_FRAME(48, 4), - ANIMCMD_FRAME(32, 4), - ANIMCMD_END, + //Only tthe first three frames of the animation + ANIMCMD_FRAME(64, 4), + ANIMCMD_FRAME(48, 4), + ANIMCMD_FRAME(32, 4), + ANIMCMD_END, }; static const union AnimCmd *const sAnimCmdTable_SurgingStrike[] = { - sAnimCmdSurgingStrike, + sAnimCmdSurgingStrike, }; const struct SpriteTemplate gSpriteTemplate_SurgingStrikesImpact = { .tileTag = ANIM_TAG_IMPACT_2, @@ -4476,22 +4465,22 @@ const struct SpriteTemplate gSpriteTemplate_FieryWrathGeyser = { static const union AffineAnimCmd sSpriteAffineAnim_GlacialLance_Grow[] = { AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0), AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 30), //Double sprite size - AFFINEANIMCMD_END, + AFFINEANIMCMD_END, }; static const union AffineAnimCmd sSpriteAffineAnim_GlacialLance_OnFoe[] = { - AFFINEANIMCMD_FRAME(256, 256, 0, 1), //Double sprite size - AFFINEANIMCMD_FRAME(0, 0, -8, 4), //Rotate 45 degrees right - AFFINEANIMCMD_END, + AFFINEANIMCMD_FRAME(256, 256, 0, 1), //Double sprite size + AFFINEANIMCMD_FRAME(0, 0, -8, 4), //Rotate 45 degrees right + AFFINEANIMCMD_END, }; static const union AffineAnimCmd sSpriteAffineAnim_GlacialLance_OnPlayer[] = { - AFFINEANIMCMD_FRAME(256, 256, 0, 1), //Double sprite size - AFFINEANIMCMD_FRAME(0, 0, 24, 4), //Rotate 135 degrees left - AFFINEANIMCMD_END, + AFFINEANIMCMD_FRAME(256, 256, 0, 1), //Double sprite size + AFFINEANIMCMD_FRAME(0, 0, 24, 4), //Rotate 135 degrees left + AFFINEANIMCMD_END, }; static const union AffineAnimCmd* const sSpriteAffineAnimTable_GlacialLance[] = { - sSpriteAffineAnim_GlacialLance_Grow, - sSpriteAffineAnim_GlacialLance_OnFoe, - sSpriteAffineAnim_GlacialLance_OnPlayer, + sSpriteAffineAnim_GlacialLance_Grow, + sSpriteAffineAnim_GlacialLance_OnFoe, + sSpriteAffineAnim_GlacialLance_OnPlayer, }; const struct SpriteTemplate gSpriteTemplate_GlacialLance = { .tileTag = ANIM_TAG_ICICLE_SPEAR, @@ -4561,11 +4550,11 @@ const struct SpriteTemplate gSpriteTemplate_PowerShiftDefenseBall = { // stone axe static const union AnimCmd sAnimCmdFlippedX[] = { - ANIMCMD_FRAME(0, 1, .hFlip = TRUE), - ANIMCMD_END, + ANIMCMD_FRAME(0, 1, .hFlip = TRUE), + ANIMCMD_END, }; static const union AnimCmd *const sAnimCmdTable_FlippedX[] = { - sAnimCmdFlippedX, + sAnimCmdFlippedX, }; const struct SpriteTemplate gSpriteTemplate_StoneAxeSlash = { .tileTag = ANIM_TAG_SLAM_HIT_2, @@ -4599,12 +4588,12 @@ const struct SpriteTemplate gSpriteTemplate_VioletMind = { // also psystrike .callback = AnimSpriteOnMonPos }; static const union AffineAnimCmd sSpriteAffineAnim_MysticalPowerRing[] = { - AFFINEANIMCMD_FRAME(16, 16, 0, 0), //Start small - AFFINEANIMCMD_FRAME(16, 16, 0, 15), //Grow sprite + AFFINEANIMCMD_FRAME(16, 16, 0, 0), //Start small + AFFINEANIMCMD_FRAME(16, 16, 0, 15), //Grow sprite AFFINEANIMCMD_END, }; static const union AffineAnimCmd* const sSpriteAffineAnimTable_MysticalPowerRing[] = { - sSpriteAffineAnim_MysticalPowerRing, + sSpriteAffineAnim_MysticalPowerRing, }; const struct SpriteTemplate gSpriteTemplate_MysticalPowerRing = { .tileTag = ANIM_TAG_THIN_RING, @@ -4702,17 +4691,17 @@ const struct SpriteTemplate gSpriteTemplate_TripleArrowKick = { // infernal parade static const union AffineAnimCmd sSpriteAffineAnim_FlutterbyPulsate[] = { - AFFINEANIMCMD_FRAME(16, 16, 0, 4), - AFFINEANIMCMD_FRAME(-16, -16, 0, 4), - AFFINEANIMCMD_JUMP(0), + AFFINEANIMCMD_FRAME(16, 16, 0, 4), + AFFINEANIMCMD_FRAME(-16, -16, 0, 4), + AFFINEANIMCMD_JUMP(0), }; static const union AffineAnimCmd sSpriteAffineAnim_FlutterbyGrow[] = { - AFFINEANIMCMD_FRAME(8, 8, 0, 16), //Double in size - AFFINEANIMCMD_END, + AFFINEANIMCMD_FRAME(8, 8, 0, 16), //Double in size + AFFINEANIMCMD_END, }; static const union AffineAnimCmd* const sSpriteAffineAnimTable_Flutterby[] = { - sSpriteAffineAnim_FlutterbyPulsate, - sSpriteAffineAnim_FlutterbyGrow, + sSpriteAffineAnim_FlutterbyPulsate, + sSpriteAffineAnim_FlutterbyGrow, }; const struct SpriteTemplate gSpriteTemplate_InfernalParadeFlame = { .tileTag = ANIM_TAG_PURPLE_FLAME, @@ -4737,13 +4726,13 @@ const struct SpriteTemplate gSpriteTemplate_CeaselessEdgeSlash = { // wildbolt storm static const union AnimCmd sAnimCmdAnimatedSpark2[] = { - ANIMCMD_FRAME((16 * 16) / (8 * 8) * 0, 8), - ANIMCMD_FRAME((16 * 16) / (8 * 8) * 1, 8), - ANIMCMD_FRAME((16 * 16) / (8 * 8) * 2, 8), - ANIMCMD_JUMP(0) + ANIMCMD_FRAME((16 * 16) / (8 * 8) * 0, 8), + ANIMCMD_FRAME((16 * 16) / (8 * 8) * 1, 8), + ANIMCMD_FRAME((16 * 16) / (8 * 8) * 2, 8), + ANIMCMD_JUMP(0) }; static const union AnimCmd *const sAnimCmdTable_AnimatedSpark2[] = { - sAnimCmdAnimatedSpark2, + sAnimCmdAnimatedSpark2, }; const struct SpriteTemplate gSpriteTemplate_WildboltStormSpark = { .tileTag = ANIM_TAG_SPARK_2, @@ -7234,6 +7223,72 @@ const struct SpriteTemplate gBitterBladeImpactTemplate = .callback = AnimClawSlash }; +const struct SpriteTemplate gRedExplosionSpriteTemplate = +{ + .tileTag = ANIM_TAG_RED_EXPLOSION, + .paletteTag = ANIM_TAG_RED_EXPLOSION, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos, +}; + +const struct SpriteTemplate gBloodMoonOnslaughtSpriteTemplate = +{ + .tileTag = ANIM_TAG_BEAM, + .paletteTag = ANIM_TAG_BEAM, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sArrowRaidOnslaughtAffineAnimTable, + .callback = AnimAssistPawprint +}; + +const struct SpriteTemplate gMoonUpSpriteTemplate = +{ + .tileTag = ANIM_TAG_BLOOD_MOON, + .paletteTag = ANIM_TAG_BLOOD_MOON, + .oam = &gOamData_AffineOff_ObjNormal_64x64, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimWeatherBallUp, +}; + +const union AnimCmd gSproutAnimCmds[] = +{ + ANIMCMD_FRAME(96, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSproutAnimTable[] = +{ + gSproutAnimCmds, +}; + +const struct SpriteTemplate gSproutGrowSpriteTemplate = +{ + .tileTag = ANIM_TAG_SPROUT, + .paletteTag = ANIM_TAG_SPROUT, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gSproutAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimSpriteOnMonPos, +}; + +const struct SpriteTemplate gFreezyFrostRisingSpearSpriteTemplate = +{ + .tileTag = ANIM_TAG_ICICLE_SPEAR, + .paletteTag = ANIM_TAG_ICICLE_SPEAR, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_GeyserTarget +}; + // functions //general void AnimTask_IsTargetPartner(u8 taskId) @@ -7250,7 +7305,7 @@ static u8 LoadBattleAnimTarget(u8 arg) { u8 battler; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { switch (gBattleAnimArgs[arg]) { @@ -7281,7 +7336,7 @@ static u8 LoadBattleAnimTarget(u8 arg) static u8 GetProperCentredCoord(u8 battler, u8 coordType) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) return (GetBattlerSpriteCoord2(battler, coordType) + GetBattlerSpriteCoord2(BATTLE_PARTNER(battler), coordType)) / 2; return GetBattlerSpriteCoord(battler, coordType); @@ -7471,14 +7526,14 @@ static void SpriteCB_SpriteToCentreOfSide(struct Sprite *sprite) if (gBattleAnimArgs[2] == 0) //Attacker { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimAttackersCentre(sprite, var); else InitSpritePosToAnimAttacker(sprite, var); } else { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimTargetsCentre(sprite, var); else InitSpritePosToAnimTarget(sprite, var); @@ -7562,7 +7617,7 @@ static void SpriteCB_GrowingSuperpower(struct Sprite *sprite) static void SpriteCB_CentredSpiderWeb(struct Sprite *sprite) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimTargetsCentre(sprite, FALSE); else InitSpritePosToAnimTarget(sprite, FALSE); @@ -7576,14 +7631,14 @@ static void SpriteCB_CoreEnforcerHits(struct Sprite *sprite) if (gBattleAnimArgs[2] == 0) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimAttackersCentre(sprite, FALSE); else InitSpritePosToAnimAttacker(sprite, FALSE); } else { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimTargetsCentre(sprite, FALSE); else InitSpritePosToAnimTarget(sprite, FALSE); @@ -7595,7 +7650,7 @@ static void SpriteCB_CoreEnforcerHits(struct Sprite *sprite) static void SpriteCB_CoreEnforcerBeam(struct Sprite *sprite) { - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) { AnimSolarBeamBigOrb(sprite); } @@ -7867,14 +7922,14 @@ void SpriteCB_RandomCentredHits(struct Sprite *sprite) if (gBattleAnimArgs[0] == 0) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimAttackersCentre(sprite, FALSE); else InitSpritePosToAnimAttacker(sprite, FALSE); } else { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimTargetsCentre(sprite, FALSE); else InitSpritePosToAnimTarget(sprite, FALSE); @@ -8179,7 +8234,7 @@ static void SpriteCB_BeamUpStep(struct Sprite *sprite) static void SpriteCB_CentredElectricity(struct Sprite *sprite) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) InitSpritePosToAnimTargetsCentre(sprite, FALSE); else InitSpritePosToAnimTarget(sprite, FALSE); @@ -8272,69 +8327,69 @@ static void SpriteCB_GeyserTarget(struct Sprite *sprite) //// Anim Tasks Functions void AnimTask_IsAttackerPlayerSide(u8 taskId) { - if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) - gBattleAnimArgs[7] = 0; - else - gBattleAnimArgs[7] = 1; + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) + gBattleAnimArgs[7] = 0; + else + gBattleAnimArgs[7] = 1; - DestroyAnimVisualTask(taskId); + DestroyAnimVisualTask(taskId); } static void AnimTask_FadeOutParticlesHelper(u8 taskId) { - if (gTasks[taskId].data[1] == 0) //Target reached - { - DestroyAnimVisualTask(taskId); - } - else if (gTasks[taskId].data[4]++ >= gTasks[taskId].data[3]) - { - gTasks[taskId].data[4] = 0; //Reset timer - gTasks[taskId].data[1]--; - gTasks[taskId].data[2]++; - SetGpuReg(REG_OFFSET_BLDALPHA, (gTasks[taskId].data[2] * 256) + gTasks[taskId].data[1]); - } + if (gTasks[taskId].data[1] == 0) //Target reached + { + DestroyAnimVisualTask(taskId); + } + else if (gTasks[taskId].data[4]++ >= gTasks[taskId].data[3]) + { + gTasks[taskId].data[4] = 0; //Reset timer + gTasks[taskId].data[1]--; + gTasks[taskId].data[2]++; + SetGpuReg(REG_OFFSET_BLDALPHA, (gTasks[taskId].data[2] * 256) + gTasks[taskId].data[1]); + } } void AnimTask_FadeOutParticles(u8 taskId) { - u8 existingTaskId = FindTaskIdByFunc(AnimTask_FadeOutParticlesHelper); - if (existingTaskId != 0xFF) - DestroyAnimVisualTask(existingTaskId); //Can only have one of these tasks going at a time + u8 existingTaskId = FindTaskIdByFunc(AnimTask_FadeOutParticlesHelper); + if (existingTaskId != 0xFF) + DestroyAnimVisualTask(existingTaskId); //Can only have one of these tasks going at a time - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); //Blend sprites out - gTasks[taskId].data[1] = 16; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = gBattleAnimArgs[0]; //Delay - gTasks[taskId].data[4] = 0; //Delay Timer - gTasks[taskId].func = AnimTask_FadeOutParticlesHelper; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); //Blend sprites out + gTasks[taskId].data[1] = 16; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = gBattleAnimArgs[0]; //Delay + gTasks[taskId].data[4] = 0; //Delay Timer + gTasks[taskId].func = AnimTask_FadeOutParticlesHelper; } static const union AffineAnimCmd sShellSmashShrinkAffineAnimCmds[] = { - AFFINEANIMCMD_FRAME(64, 64, 0, 16), //Flatten - AFFINEANIMCMD_FRAME(0, 0, 0, 48), - AFFINEANIMCMD_FRAME(-64, -64, 0, 16), - AFFINEANIMCMD_END, + AFFINEANIMCMD_FRAME(64, 64, 0, 16), //Flatten + AFFINEANIMCMD_FRAME(0, 0, 0, 48), + AFFINEANIMCMD_FRAME(-64, -64, 0, 16), + AFFINEANIMCMD_END, }; //Shrinks the attacker, pauses, then scales up the attacker again void AnimTask_ShellSmashShrinkAttacker(u8 taskId) { - struct Task* task = &gTasks[taskId]; - u8 spriteId; + struct Task* task = &gTasks[taskId]; + u8 spriteId; - task->data[0] = gBattleAnimArgs[0]; //Pause - spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); - PrepareAffineAnimInTaskData(task, spriteId, sShellSmashShrinkAffineAnimCmds); - task->func = AnimTask_DynamaxGrowthStep; + task->data[0] = gBattleAnimArgs[0]; //Pause + spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); + PrepareAffineAnimInTaskData(task, spriteId, sShellSmashShrinkAffineAnimCmds); + task->func = AnimTask_DynamaxGrowthStep; } static void AnimTask_DynamaxGrowthStep(u8 taskId) // from CFRU { - struct Task* task = &gTasks[taskId]; - if (!RunAffineAnimFromTaskData(task)) - DestroyAnimVisualTask(taskId); + struct Task* task = &gTasks[taskId]; + if (!RunAffineAnimFromTaskData(task)) + DestroyAnimVisualTask(taskId); } void AnimTask_AllBattlersInvisible(u8 taskId) @@ -8352,14 +8407,14 @@ void AnimTask_AllBattlersInvisible(u8 taskId) void AnimTask_AllBattlersVisible(u8 taskId) { u32 i, spriteId; - for (i = 0; i < gBattlersCount; ++i) - { - spriteId = gBattlerSpriteIds[i]; - if (IsBattlerSpriteVisible(i) && spriteId != 0xFF) - gSprites[spriteId].invisible = FALSE; - } + for (i = 0; i < gBattlersCount; ++i) + { + spriteId = gBattlerSpriteIds[i]; + if (IsBattlerSpriteVisible(i) && spriteId != 0xFF) + gSprites[spriteId].invisible = FALSE; + } - DestroyAnimVisualTask(taskId); + DestroyAnimVisualTask(taskId); } void AnimTask_AllBattlersInvisibleExceptAttackerAndTarget(u8 taskId) @@ -8701,24 +8756,24 @@ void AnimTask_AffectionHangedOn(u8 taskId) //arg 5: Wave Amplitude static void SpriteCB_PowerShiftBall(struct Sprite* sprite) { - InitSpritePosToAnimAttacker(sprite, TRUE); + InitSpritePosToAnimAttacker(sprite, TRUE); - if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) - gBattleAnimArgs[2] *= -1; //Flip X + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) + gBattleAnimArgs[2] *= -1; //Flip X - sprite->data[0] = gBattleAnimArgs[4]; //Duration - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; //Target X - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; //Target Y - sprite->data[5] = gBattleAnimArgs[5]; //Wave Amplitude + sprite->data[0] = gBattleAnimArgs[4]; //Duration + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; //Target X + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; //Target Y + sprite->data[5] = gBattleAnimArgs[5]; //Wave Amplitude - InitAnimArcTranslation(sprite); - sprite->callback = SpriteCB_PowerShiftBallStep; + InitAnimArcTranslation(sprite); + sprite->callback = SpriteCB_PowerShiftBallStep; } static void SpriteCB_PowerShiftBallStep(struct Sprite* sprite) // Also used by Triple Arrows { - if (TranslateAnimHorizontalArc(sprite)) - DestroySpriteAndMatrix(sprite); + if (TranslateAnimHorizontalArc(sprite)) + DestroySpriteAndMatrix(sprite); } //Creates a sprite that moves left or right along the target. @@ -8729,28 +8784,28 @@ static void SpriteCB_PowerShiftBallStep(struct Sprite* sprite) // Also used by T //arg 4: direction static void SpriteCB_HorizontalSlice(struct Sprite *sprite) { - sprite->x2 = gBattleAnimArgs[0]; - sprite->y2 = gBattleAnimArgs[1]; + sprite->x2 = gBattleAnimArgs[0]; + sprite->y2 = gBattleAnimArgs[1]; - sprite->data[0] = gBattleAnimArgs[2]; //Slice distance - sprite->data[1] = gBattleAnimArgs[3]; //Slice speed - sprite->data[2] = gBattleAnimArgs[4]; //Slice direction - sprite->data[3] = 0; //Timer + sprite->data[0] = gBattleAnimArgs[2]; //Slice distance + sprite->data[1] = gBattleAnimArgs[3]; //Slice speed + sprite->data[2] = gBattleAnimArgs[4]; //Slice direction + sprite->data[3] = 0; //Timer - sprite->callback = SpriteCB_HorizontalSliceStep; + sprite->callback = SpriteCB_HorizontalSliceStep; } void SpriteCB_HorizontalSliceStep(struct Sprite *sprite) { - if (sprite->data[2] == 1) //Move left - sprite->x2 -= sprite->data[1]; - else - sprite->x2 += sprite->data[1]; + if (sprite->data[2] == 1) //Move left + sprite->x2 -= sprite->data[1]; + else + sprite->x2 += sprite->data[1]; - sprite->data[3] += sprite->data[1]; + sprite->data[3] += sprite->data[1]; - if (sprite->data[3] >= sprite->data[0]) - DestroySpriteAndMatrix(sprite); + if (sprite->data[3] >= sprite->data[0]) + DestroySpriteAndMatrix(sprite); } //Creates the slam hit for LashOut @@ -8759,27 +8814,27 @@ void SpriteCB_HorizontalSliceStep(struct Sprite *sprite) //arg 2: flip static void SpriteCB_LashOutStrike(struct Sprite* sprite) { - bool8 flip = GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER; + bool8 flip = GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER; - if (gBattleAnimArgs[2]) - flip ^= 1; + if (gBattleAnimArgs[2]) + flip ^= 1; - sprite->data[0] = 11; + sprite->data[0] = 11; - if (flip) - { - sprite->x -= gBattleAnimArgs[0]; - sprite->data[0] *= -1; - StartSpriteAffineAnim(sprite, 1); - } - else - { - sprite->x += gBattleAnimArgs[0]; - } + if (flip) + { + sprite->x -= gBattleAnimArgs[0]; + sprite->data[0] *= -1; + StartSpriteAffineAnim(sprite, 1); + } + else + { + sprite->x += gBattleAnimArgs[0]; + } - sprite->y += gBattleAnimArgs[1]; - sprite->data[1] = 192; - sprite->callback = AnimKnockOffStrike_Step; + sprite->y += gBattleAnimArgs[1]; + sprite->data[1] = 192; + sprite->callback = AnimKnockOffStrike_Step; } /* TODO - Use the ShellSmash Anim @@ -8790,91 +8845,91 @@ static void SpriteCB_LashOutStrike(struct Sprite* sprite) //arg 3: Affine anim static void SpriteCB_ShellSmashShell(struct Sprite* sprite) { - //Init Position - sprite->x = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; - sprite->y = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + 2; //2 to slightly encompass the entire sprite + //Init Position + sprite->x = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[0]; + sprite->y = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + 2; //2 to slightly encompass the entire sprite - //Prepare linear movement - sprite->data[0] = gBattleAnimArgs[2]; //Duration - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[1]; - sprite->data[4] = sprite->y; - sprite->callback = StartAnimLinearTranslation; - StoreSpriteCallbackInData6(sprite, SpriteCB_ShellSmashShell_DestroyDuringFadeOut); + //Prepare linear movement + sprite->data[0] = gBattleAnimArgs[2]; //Duration + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + gBattleAnimArgs[1]; + sprite->data[4] = sprite->y; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, SpriteCB_ShellSmashShell_DestroyDuringFadeOut); - //Rotate properly - StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); + //Rotate properly + StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]); } static void SpriteCB_ShellSmashShell_DestroyDuringFadeOut(struct Sprite* sprite) { - if (GetGpuReg(REG_OFFSET_BLDALPHA) >= BLDALPHA_BLEND(0, 8)) //Fade out 1/2 done - DestroyAnimSprite(sprite); + if (GetGpuReg(REG_OFFSET_BLDALPHA) >= BLDALPHA_BLEND(0, 8)) //Fade out 1/2 done + DestroyAnimSprite(sprite); } */ static void SpriteCB_AnimSpriteOnTargetSideCentre(struct Sprite *sprite) { - u8 target = LoadBattleAnimTarget(2); + u8 target = LoadBattleAnimTarget(2); - if (!sprite->data[0]) - { - if (IsAlly(gBattleAnimAttacker, target)) - { - if (IsDoubleBattle()) - InitSpritePosToAnimAttackersCentre(sprite, FALSE); - else - InitSpritePosToAnimAttacker(sprite, FALSE); - } - else - { - if (IsDoubleBattle()) - InitSpritePosToAnimTargetsCentre(sprite, FALSE); - else - InitSpritePosToAnimTarget(sprite, FALSE); - } + if (!sprite->data[0]) + { + if (IsAlly(gBattleAnimAttacker, target)) + { + if (IsDoubleBattle()) + InitSpritePosToAnimAttackersCentre(sprite, FALSE); + else + InitSpritePosToAnimAttacker(sprite, FALSE); + } + else + { + if (IsDoubleBattle()) + InitSpritePosToAnimTargetsCentre(sprite, FALSE); + else + InitSpritePosToAnimTarget(sprite, FALSE); + } - sprite->data[0]++; - } - else if (sprite->animEnded || sprite->affineAnimEnded) - { - DestroySpriteAndMatrix(sprite); - } + sprite->data[0]++; + } + else if (sprite->animEnded || sprite->affineAnimEnded) + { + DestroySpriteAndMatrix(sprite); + } } static void SpriteCB_SpriteOnMonUntilAffineAnimEnds(struct Sprite* sprite) { - u8 target = LoadBattleAnimTarget(0); + u8 target = LoadBattleAnimTarget(0); - if (!IsBattlerSpriteVisible(target)) - DestroyAnimSprite(sprite); - else - { - sprite->x = GetBattlerSpriteCoord(target, BATTLER_COORD_X_2); - sprite->y = GetBattlerSpriteCoord(target, BATTLER_COORD_Y_PIC_OFFSET); - StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); - sprite->callback = RunStoredCallbackWhenAffineAnimEnds; - } + if (!IsBattlerSpriteVisible(target)) + DestroyAnimSprite(sprite); + else + { + sprite->x = GetBattlerSpriteCoord(target, BATTLER_COORD_X_2); + sprite->y = GetBattlerSpriteCoord(target, BATTLER_COORD_Y_PIC_OFFSET); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = RunStoredCallbackWhenAffineAnimEnds; + } } static void SpriteCB_SpriteOnMonForDurationUseY(struct Sprite *sprite) { - u8 target = LoadBattleAnimTarget(0); + u8 target = LoadBattleAnimTarget(0); - if (!IsBattlerSpriteVisible(target)) - DestroyAnimSprite(sprite); - else - { - sprite->x = GetBattlerSpriteCoord(target, BATTLER_COORD_X); - sprite->y = GetBattlerSpriteCoord(target, BATTLER_COORD_Y_PIC_OFFSET); + if (!IsBattlerSpriteVisible(target)) + DestroyAnimSprite(sprite); + else + { + sprite->x = GetBattlerSpriteCoord(target, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord(target, BATTLER_COORD_Y_PIC_OFFSET); - sprite->x2 = gBattleAnimArgs[1]; - sprite->y2 = gBattleAnimArgs[2]; - sprite->data[0] = 0; - sprite->data[1] = gBattleAnimArgs[3]; - sprite->data[2] = gBattleAnimArgs[4]; - sprite->data[3] = 0; - sprite->callback = AnimBrickBreakWall_Step; - } + sprite->x2 = gBattleAnimArgs[1]; + sprite->y2 = gBattleAnimArgs[2]; + sprite->data[0] = 0; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[2] = gBattleAnimArgs[4]; + sprite->data[3] = 0; + sprite->callback = AnimBrickBreakWall_Step; + } } //Moves a sprite upward for set amount of time @@ -8885,28 +8940,28 @@ static void SpriteCB_SpriteOnMonForDurationUseY(struct Sprite *sprite) //arg 4: Duration static void SpriteCB_MoveSpriteUpwardsForDuration(struct Sprite* sprite) { - if (gBattleAnimArgs[0] == ANIM_ATTACKER) - { - sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[2]; - } - else - { - sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[1]; - sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[2]; - } + if (gBattleAnimArgs[0] == ANIM_ATTACKER) + { + sprite->x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[2]; + } + else + { + sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[1]; + sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[2]; + } - sprite->data[0] = 0; - sprite->data[1] = gBattleAnimArgs[3]; //Speed - sprite->data[2] = gBattleAnimArgs[4]; //Duration - sprite->callback = SpriteCB_MoveSpriteUpwardsForDurationStep; + sprite->data[0] = 0; + sprite->data[1] = gBattleAnimArgs[3]; //Speed + sprite->data[2] = gBattleAnimArgs[4]; //Duration + sprite->callback = SpriteCB_MoveSpriteUpwardsForDurationStep; } static void SpriteCB_MoveSpriteUpwardsForDurationStep(struct Sprite* sprite) { - sprite->y -= sprite->data[1]; - if (sprite->data[0]++ > sprite->data[2]) - DestroyAnimSprite(sprite); + sprite->y -= sprite->data[1]; + if (sprite->data[0]++ > sprite->data[2]) + DestroyAnimSprite(sprite); } //Creates arc impacts for Surging Strikes @@ -8918,13 +8973,13 @@ static void SpriteCB_MoveSpriteUpwardsForDurationStep(struct Sprite* sprite) //arg 5: wave amplitude static void SpriteCB_SurgingStrikes(struct Sprite* sprite) { - InitSpritePosToAnimTarget(sprite, TRUE); - sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; //Target X - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; //Target Y - sprite->data[5] = gBattleAnimArgs[5]; - InitAnimArcTranslation(sprite); - sprite->callback = AnimMissileArc_Step; + InitSpritePosToAnimTarget(sprite, TRUE); + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; //Target X + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; //Target Y + sprite->data[5] = gBattleAnimArgs[5]; + InitAnimArcTranslation(sprite); + sprite->callback = AnimMissileArc_Step; } //Creates the moving Steel Wheel for Steel Roller @@ -8935,34 +8990,34 @@ static void SpriteCB_SurgingStrikes(struct Sprite* sprite) //arg 4: horizontal speed static void SpriteCB_SteelRoller(struct Sprite* sprite) { - sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X); - sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y); + sprite->x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X); + sprite->y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y); - sprite->x2 = gBattleAnimArgs[0]; - sprite->y2 += gBattleAnimArgs[1]; + sprite->x2 = gBattleAnimArgs[0]; + sprite->y2 += gBattleAnimArgs[1]; - sprite->data[4] = gBattleAnimArgs[3]; //Left/Right distance - sprite->data[5] = gBattleAnimArgs[4]; //Left/Right speed + sprite->data[4] = gBattleAnimArgs[3]; //Left/Right distance + sprite->data[5] = gBattleAnimArgs[4]; //Left/Right speed - sprite->data[3] = gBattleAnimArgs[2]; //Falling Speed - sprite->callback = SpriteCB_SteelRoller_Down; + sprite->data[3] = gBattleAnimArgs[2]; //Falling Speed + sprite->callback = SpriteCB_SteelRoller_Down; } static void SpriteCB_SteelRoller_Down(struct Sprite *sprite) { - sprite->y2 += sprite->data[3]; - if (sprite->y2 >= 0) - { - sprite->y2 = 0; - sprite->callback = SpriteCB_SteelRoller_LeftRight; - } + sprite->y2 += sprite->data[3]; + if (sprite->y2 >= 0) + { + sprite->y2 = 0; + sprite->callback = SpriteCB_SteelRoller_LeftRight; + } } static void SpriteCB_SteelRoller_LeftRight(struct Sprite* sprite) { - sprite->data[0] = -sprite->data[4]; //Slice distance - sprite->data[1] = sprite->data[5]; //Slice speed - sprite->callback = SpriteCB_LeftRightSliceStep0; + sprite->data[0] = -sprite->data[4]; //Slice distance + sprite->data[1] = sprite->data[5]; //Slice speed + sprite->callback = SpriteCB_LeftRightSliceStep0; } //Creates slashes that can be flipped. @@ -8972,63 +9027,63 @@ static void SpriteCB_SteelRoller_LeftRight(struct Sprite* sprite) //arg 3: flip y static void SpriteCB_FlippableSlash(struct Sprite* sprite) { - InitSpritePosToAnimTarget(sprite, TRUE); + InitSpritePosToAnimTarget(sprite, TRUE); - if (gBattleAnimArgs[2]) //Flip X - sprite->hFlip = TRUE; + if (gBattleAnimArgs[2]) //Flip X + sprite->hFlip = TRUE; - if (gBattleAnimArgs[3]) //Flip Y - sprite->vFlip = TRUE; + if (gBattleAnimArgs[3]) //Flip Y + sprite->vFlip = TRUE; - sprite->data[0] = 0; - sprite->data[1] = 0; - StoreSpriteCallbackInData6(sprite, AnimFalseSwipeSlice_Step3); - sprite->callback = RunStoredCallbackWhenAnimEnds; + sprite->data[0] = 0; + sprite->data[1] = 0; + StoreSpriteCallbackInData6(sprite, AnimFalseSwipeSlice_Step3); + sprite->callback = RunStoredCallbackWhenAnimEnds; } //Moves the balls for Dragon Energy sideways along the target side //arg 0: Duration static void SpriteCB_DragonEnergyShot(struct Sprite* sprite) { - s16 startingX, finishingX, y; - u8 def1 = gBattleAnimTarget; - u8 def2 = BATTLE_PARTNER(def1); + s16 startingX, finishingX, y; + u8 def1 = gBattleAnimTarget; + u8 def2 = BATTLE_PARTNER(def1); - if (!IsDoubleBattle() || IsAlly(gBattleAnimAttacker, gBattleAnimTarget)) - y = GetBattlerSpriteCoord(def1, BATTLER_COORD_Y_PIC_OFFSET); - else - { - y = 0; + if (!IsDoubleBattle() || IsAlly(gBattleAnimAttacker, gBattleAnimTarget)) + y = GetBattlerSpriteCoord(def1, BATTLER_COORD_Y_PIC_OFFSET); + else + { + y = 0; - if (IsBattlerSpritePresent(def1)) - y = GetBattlerSpriteCoord(def1, BATTLER_COORD_Y_PIC_OFFSET); + if (IsBattlerSpritePresent(def1)) + y = GetBattlerSpriteCoord(def1, BATTLER_COORD_Y_PIC_OFFSET); - if (IsBattlerSpritePresent(def2)) - y += GetBattlerSpriteCoord(def2, BATTLER_COORD_Y_PIC_OFFSET); + if (IsBattlerSpritePresent(def2)) + y += GetBattlerSpriteCoord(def2, BATTLER_COORD_Y_PIC_OFFSET); - if (IsBattlerSpritePresent(def1) && IsBattlerSpritePresent(def2)) //Both targets are visible - y /= 2; - } + if (IsBattlerSpritePresent(def1) && IsBattlerSpritePresent(def2)) //Both targets are visible + y /= 2; + } - if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT) - { - startingX = 0; - finishingX = 255; - } - else - { - startingX = 255; - finishingX = 0; - } + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT) + { + startingX = 0; + finishingX = 255; + } + else + { + startingX = 255; + finishingX = 0; + } - sprite->x = startingX; - sprite->y = y; - sprite->x2 = 0; - sprite->data[0] = gBattleAnimArgs[0]; - sprite->data[2] = finishingX; - sprite->data[4] = y; - sprite->callback = StartAnimLinearTranslation; - StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->x = startingX; + sprite->y = y; + sprite->x2 = 0; + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[2] = finishingX; + sprite->data[4] = y; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); } //Moves the butterflies created in Max Flutterby @@ -9037,42 +9092,42 @@ static void SpriteCB_DragonEnergyShot(struct Sprite* sprite) //arg 2: wave amplitude static void SpriteCB_MaxFlutterby(struct Sprite* sprite) { - InitSpritePosToAnimAttacker(sprite, FALSE); + InitSpritePosToAnimAttacker(sprite, FALSE); - sprite->data[0] = 0x10; //Speed delay - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); //Target X - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); //Target Y - sprite->data[5] = gBattleAnimArgs[2]; //Wave amplitude + sprite->data[0] = 0x10; //Speed delay + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); //Target X + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); //Target Y + sprite->data[5] = gBattleAnimArgs[2]; //Wave amplitude - sprite->callback = SpriteCB_MaxFlutterbyStep1; + sprite->callback = SpriteCB_MaxFlutterbyStep1; } //The butterflies prepare to move towards the target static void SpriteCB_MaxFlutterbyStep1(struct Sprite* sprite) { - if (!FuncIsActiveTask(AnimTask_DynamaxGrowthStep)) - { - if (gAnimMoveIndex != MOVE_INFERNAL_PARADE) - PlaySE(SE_M_SAND_ATTACK); + if (!FuncIsActiveTask(AnimTask_DynamaxGrowthStep)) + { + if (gAnimMoveIndex != MOVE_INFERNAL_PARADE) + PlaySE(SE_M_SAND_ATTACK); - StartSpriteAffineAnim(sprite, 1); - InitAnimArcTranslation(sprite); - sprite->callback = SpriteCB_MaxFlutterbyStep2; - } + StartSpriteAffineAnim(sprite, 1); + InitAnimArcTranslation(sprite); + sprite->callback = SpriteCB_MaxFlutterbyStep2; + } } //Destroys the butterflies when they reach the target static void SpriteCB_MaxFlutterbyStep2(struct Sprite* sprite) { - sprite->invisible = FALSE; + sprite->invisible = FALSE; - if (TranslateAnimHorizontalArc(sprite)) - { - if (gAnimMoveIndex == MOVE_INFERNAL_PARADE) - PlaySE(SE_M_FLAME_WHEEL2); + if (TranslateAnimHorizontalArc(sprite)) + { + if (gAnimMoveIndex == MOVE_INFERNAL_PARADE) + PlaySE(SE_M_FLAME_WHEEL2); - DestroySpriteAndMatrix(sprite); - } + DestroySpriteAndMatrix(sprite); + } } //Moves the ice lance for Glacial Lance @@ -9085,56 +9140,56 @@ static void SpriteCB_MaxFlutterbyStep2(struct Sprite* sprite) //arg 6: duration to target static void SpriteCB_GlacialLance(struct Sprite* sprite) { - u8 def1 = gBattleAnimTarget; - u8 def2 = BATTLE_PARTNER(def1); + u8 def1 = gBattleAnimTarget; + u8 def2 = BATTLE_PARTNER(def1); - InitSpritePosToAnimAttacker(sprite, TRUE); - sprite->data[5] = gBattleAnimArgs[4]; - sprite->data[6] = gBattleAnimArgs[5]; + InitSpritePosToAnimAttacker(sprite, TRUE); + sprite->data[5] = gBattleAnimArgs[4]; + sprite->data[6] = gBattleAnimArgs[5]; - sprite->data[0] = gBattleAnimArgs[6]; + sprite->data[0] = gBattleAnimArgs[6]; - if (!IsDoubleBattle() || IsAlly(gBattleAnimAttacker, gBattleAnimTarget)) - { - sprite->data[2] = GetBattlerSpriteCoord(def1, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; //Converge on target - sprite->data[4] = GetBattlerSpriteCoord(def1, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; - } - else - { - sprite->data[2] = (GetBattlerSpriteCoord(def1, BATTLER_COORD_X_2) + GetBattlerSpriteCoord(def2, BATTLER_COORD_X_2)) / 2 + gBattleAnimArgs[2]; //Converge on target - sprite->data[4] = (GetBattlerSpriteCoord(def1, BATTLER_COORD_Y_PIC_OFFSET) + GetBattlerSpriteCoord(def2, BATTLER_COORD_Y_PIC_OFFSET)) / 2 + gBattleAnimArgs[3]; - } + if (!IsDoubleBattle() || IsAlly(gBattleAnimAttacker, gBattleAnimTarget)) + { + sprite->data[2] = GetBattlerSpriteCoord(def1, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; //Converge on target + sprite->data[4] = GetBattlerSpriteCoord(def1, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; + } + else + { + sprite->data[2] = (GetBattlerSpriteCoord(def1, BATTLER_COORD_X_2) + GetBattlerSpriteCoord(def2, BATTLER_COORD_X_2)) / 2 + gBattleAnimArgs[2]; //Converge on target + sprite->data[4] = (GetBattlerSpriteCoord(def1, BATTLER_COORD_Y_PIC_OFFSET) + GetBattlerSpriteCoord(def2, BATTLER_COORD_Y_PIC_OFFSET)) / 2 + gBattleAnimArgs[3]; + } - sprite->oam.priority = 1; //Above the ice cube - sprite->callback = SpriteCB_GlacialLance_Step1; + sprite->oam.priority = 1; //Above the ice cube + sprite->callback = SpriteCB_GlacialLance_Step1; } static void SpriteCB_GlacialLance_Step1(struct Sprite* sprite) { - if (sprite->data[7]++ >= sprite->data[5]) - { - sprite->data[7] = 0; - sprite->callback = SpriteCB_GlacialLance_Step2; - } - else - --sprite->y; //Move up + if (sprite->data[7]++ >= sprite->data[5]) + { + sprite->data[7] = 0; + sprite->callback = SpriteCB_GlacialLance_Step2; + } + else + --sprite->y; //Move up } static void SpriteCB_GlacialLance_Step2(struct Sprite* sprite) { - if (sprite->data[7]++ >= sprite->data[6]) - { - if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) - StartSpriteAffineAnim(sprite, 2); - else - StartSpriteAffineAnim(sprite, 1); + if (sprite->data[7]++ >= sprite->data[6]) + { + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) + StartSpriteAffineAnim(sprite, 2); + else + StartSpriteAffineAnim(sprite, 1); - sprite->data[5] = 0; - sprite->data[6] = 0; - sprite->data[7] = 0; - sprite->callback = StartAnimLinearTranslation; - StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); - } + sprite->data[5] = 0; + sprite->data[6] = 0; + sprite->data[7] = 0; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + } } @@ -9145,46 +9200,46 @@ static void SpriteCB_GlacialLance_Step2(struct Sprite* sprite) //arg 3: Wave Amplitude static void SpriteCB_TripleArrowKick(struct Sprite* sprite) { - InitSpritePosToAnimTarget(sprite, TRUE); - StartSpriteAnim(sprite, 1); //Feet + InitSpritePosToAnimTarget(sprite, TRUE); + StartSpriteAnim(sprite, 1); //Feet - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); //Target X - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); //Target Y - sprite->data[5] = gBattleAnimArgs[3]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); //Target X + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); //Target Y + sprite->data[5] = gBattleAnimArgs[3]; - InitAnimArcTranslation(sprite); - sprite->callback = SpriteCB_PowerShiftBallStep; //Arc until complete + 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, + 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, + 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); + 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; + if (gBattleAnimArgs[0] == 0) + PrepareAffineAnimInTaskData(task, spriteId, sDynamaxGrowthAffineAnimCmds); + else + PrepareAffineAnimInTaskData(task, spriteId, sDynamaxGrowthAttackAnimationAffineAnimCmds); + task->func = AnimTask_DynamaxGrowthStep; } void AnimTask_GetWeatherToSet(u8 taskId) @@ -9204,7 +9259,7 @@ void AnimTask_GetWeatherToSet(u8 taskId) gBattleAnimArgs[ARG_RET_ID] = 4; break; } - DestroyAnimVisualTask(taskId); + DestroyAnimVisualTask(taskId); } void AnimTask_SyrupBomb(u8 taskId) @@ -9219,3 +9274,13 @@ void AnimTask_StickySyrup(u8 taskId) gBattleAnimArgs[0] = gAnimDisableStructPtr->syrupBombIsShiny; DestroyAnimVisualTask(taskId); } + +void AnimTask_RandomBool(u8 taskId) +{ + if (RandomPercentage(RNG_NONE, 50)) + gBattleAnimArgs[ARG_RET_ID] = TRUE; + else + gBattleAnimArgs[ARG_RET_ID] = FALSE; + + DestroyAnimVisualTask(taskId); +} diff --git a/src/battle_anim_normal.c b/src/battle_anim_normal.c index 6333cc8183..d9fc8aa412 100644 --- a/src/battle_anim_normal.c +++ b/src/battle_anim_normal.c @@ -414,7 +414,7 @@ u32 UnpackSelectedBattlePalettes(s16 selector) bool8 anim1 = (selector >> 5) & 1; bool8 anim2 = (selector >> 6) & 1; u32 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gAnimMoveIndex); - + switch (moveTarget) { case MOVE_TARGET_BOTH: @@ -431,7 +431,7 @@ u32 UnpackSelectedBattlePalettes(s16 selector) } break; } - + return GetBattlePalettesMask(battleBackground, attacker, target, attackerPartner, targetPartner, anim1, anim2); } @@ -830,7 +830,7 @@ void AnimTask_InvertScreenColor(u8 taskId) selectedPalettes |= (0x10000 << gBattleAnimTarget); if (gBattleAnimArgs[0] & 0x8 && IsBattlerAlive(BATTLE_PARTNER(gBattleAnimTarget))) selectedPalettes |= (0x10000 << BATTLE_PARTNER(gBattleAnimTarget)); - if (gBattleAnimArgs[0] & 0x10 && IsBattlerAlive(BATTLE_PARTNER(gBattleAnimAttacker))) + if (gBattleAnimArgs[0] & 0x10 && IsBattlerAlive(BATTLE_PARTNER(gBattleAnimAttacker))) selectedPalettes |= (0x10000 << BATTLE_PARTNER(gBattleAnimAttacker)); InvertPlttBuffer(selectedPalettes); diff --git a/src/battle_anim_poison.c b/src/battle_anim_poison.c index dfaa32cc5e..301cdd4643 100644 --- a/src/battle_anim_poison.c +++ b/src/battle_anim_poison.c @@ -182,24 +182,24 @@ const struct SpriteTemplate gWaterBubbleSpriteTemplate = const struct SpriteTemplate gGreenPoisonDrip = { - .tileTag = ANIM_TAG_GREEN_POISON_BUBBLE, - .paletteTag = ANIM_TAG_GREEN_POISON_BUBBLE, - .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .tileTag = ANIM_TAG_GREEN_POISON_BUBBLE, + .paletteTag = ANIM_TAG_GREEN_POISON_BUBBLE, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, .anims = &gAnims_PoisonProjectile[1], - .images = NULL, - .affineAnims = gAffineAnims_Droplet, - .callback = AnimAcidPoisonDroplet, + .images = NULL, + .affineAnims = gAffineAnims_Droplet, + .callback = AnimAcidPoisonDroplet, }; const struct SpriteTemplate gGreenPoisonBubble = { - .tileTag = ANIM_TAG_GREEN_POISON_BUBBLE, - .paletteTag = ANIM_TAG_GREEN_POISON_BUBBLE, - .oam = &gOamData_AffineDouble_ObjNormal_16x16, - .anims = gAnims_PoisonProjectile, - .images = NULL, - .affineAnims = gAffineAnims_PoisonProjectile, - .callback = AnimAcidPoisonBubble, + .tileTag = ANIM_TAG_GREEN_POISON_BUBBLE, + .paletteTag = ANIM_TAG_GREEN_POISON_BUBBLE, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gAnims_PoisonProjectile, + .images = NULL, + .affineAnims = gAffineAnims_PoisonProjectile, + .callback = AnimAcidPoisonBubble, }; const union AnimCmd gSuckerPunchAnimCmd[] = diff --git a/src/battle_anim_rock.c b/src/battle_anim_rock.c index f9b93a727a..b6239ca063 100644 --- a/src/battle_anim_rock.c +++ b/src/battle_anim_rock.c @@ -314,18 +314,18 @@ const struct SpriteTemplate gStealthRockSpriteTemplate = static const union AffineAnimCmd sSpriteAffineAnim_CrushGripHandEnemyAttack[] = { - AFFINEANIMCMD_FRAME(0, 0, 96, 1), //180 degree turn - AFFINEANIMCMD_END + AFFINEANIMCMD_FRAME(0, 0, 96, 1), //180 degree turn + AFFINEANIMCMD_END }; static const union AffineAnimCmd sSpriteAffineAnim_DoNothing[] = { - AFFINEANIMCMD_FRAME(0, 0, 0, 1), //Do nothing - AFFINEANIMCMD_END + AFFINEANIMCMD_FRAME(0, 0, 0, 1), //Do nothing + AFFINEANIMCMD_END }; static const union AffineAnimCmd* const sSpriteAffineAnimTable_CrushGripHand[] = { - sSpriteAffineAnim_DoNothing, - sSpriteAffineAnim_CrushGripHandEnemyAttack, + sSpriteAffineAnim_DoNothing, + sSpriteAffineAnim_CrushGripHandEnemyAttack, }; const struct SpriteTemplate gCrushGripHandTemplate = { @@ -349,6 +349,28 @@ const struct SpriteTemplate gSeedFlareGreenWavesTemplate = .callback = AnimFlyingSandCrescent }; +const struct SpriteTemplate gMakingItRainTemplate = +{ + .tileTag = ANIM_TAG_COIN, + .paletteTag = ANIM_TAG_COIN, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gCoinAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFallingRock, +}; + +const struct SpriteTemplate gFallingSeedSpriteTemplate = +{ + .tileTag = ANIM_TAG_SEED, + .paletteTag = ANIM_TAG_SEED, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = AnimFallingRock, +}; + static void AnimStealthRock(struct Sprite *sprite) { s16 x, y; @@ -456,7 +478,14 @@ void AnimRockFragment(struct Sprite *sprite) // Swirls particle in vortex. Used for moves like Fire Spin or Sand Tomb void AnimParticleInVortex(struct Sprite *sprite) { - InitSpritePosToAnimBattler(gBattleAnimArgs[6], sprite, FALSE); + if (IsDoubleBattle() //got a little lazy here will fix later + && (gAnimMoveIndex == MOVE_BLEAKWIND_STORM + || gAnimMoveIndex == MOVE_SANDSEAR_STORM + || gAnimMoveIndex == MOVE_SPRINGTIDE_STORM + || gAnimMoveIndex == MOVE_WILDBOLT_STORM)) + InitSpritePosToAnimTargetsCentre(sprite, FALSE); + else + InitSpritePosToAnimTarget(sprite, FALSE); sprite->data[0] = gBattleAnimArgs[3]; sprite->data[1] = gBattleAnimArgs[2]; sprite->data[2] = gBattleAnimArgs[4]; diff --git a/src/battle_anim_smokescreen.c b/src/battle_anim_smokescreen.c index 3b05ef6280..12fe97b993 100644 --- a/src/battle_anim_smokescreen.c +++ b/src/battle_anim_smokescreen.c @@ -9,9 +9,6 @@ #define TAG_SMOKESCREEN 55019 -#define PALTAG_SHADOW 55039 -#define GFXTAG_SHADOW 55129 - static void SpriteCB_SmokescreenImpactMain(struct Sprite *); static void SpriteCB_SmokescreenImpact(struct Sprite *); @@ -95,39 +92,6 @@ static const struct SpriteTemplate sSmokescreenImpactSpriteTemplate = .callback = SpriteCB_SmokescreenImpact }; -const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow = -{ - .data = gEnemyMonShadow_Gfx, .size = 0x80, .tag = GFXTAG_SHADOW -}; - -static const struct OamData sOamData_EnemyShadow = -{ - .y = 0, - .affineMode = ST_OAM_AFFINE_OFF, - .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = FALSE, - .bpp = ST_OAM_4BPP, - .shape = SPRITE_SHAPE(32x8), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(32x8), - .tileNum = 0, - .priority = 3, - .paletteNum = 0, - .affineParam = 0 -}; - -const struct SpriteTemplate gSpriteTemplate_EnemyShadow = -{ - .tileTag = GFXTAG_SHADOW, - .paletteTag = PALTAG_SHADOW, - .oam = &sOamData_EnemyShadow, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCB_SetInvisible -}; - #define sActiveSprites data[0] #define sPersist data[1] diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c index 7e7ded7676..f746f186aa 100644 --- a/src/battle_anim_status_effects.c +++ b/src/battle_anim_status_effects.c @@ -398,28 +398,28 @@ void AnimTask_FrozenIceCubeAttacker(u8 taskId) void AnimTask_CentredFrozenIceCube(u8 taskId) { // same as AnimTask_FrozenIceCube but center position on target(s) - s16 x, y; - u8 spriteId; - u8 battler1 = gBattleAnimTarget; - u8 battler2 = BATTLE_PARTNER(battler1); + s16 x, y; + u8 spriteId; + u8 battler1 = gBattleAnimTarget; + u8 battler2 = BATTLE_PARTNER(battler1); - if (!IsDoubleBattle() || IsAlly(gBattleAnimAttacker, gBattleAnimTarget)) - { - x = GetBattlerSpriteCoord(battler1, BATTLER_COORD_X_2); - y = GetBattlerSpriteCoord(battler1, BATTLER_COORD_Y_PIC_OFFSET); - } - else - { - x = (GetBattlerSpriteCoord(battler1, BATTLER_COORD_X_2) + GetBattlerSpriteCoord(battler2, BATTLER_COORD_X_2)) / 2; - y = (GetBattlerSpriteCoord(battler1, BATTLER_COORD_Y_PIC_OFFSET) + GetBattlerSpriteCoord(battler2, BATTLER_COORD_Y_PIC_OFFSET)) / 2; - } + if (!IsDoubleBattle() || IsAlly(gBattleAnimAttacker, gBattleAnimTarget)) + { + x = GetBattlerSpriteCoord(battler1, BATTLER_COORD_X_2); + y = GetBattlerSpriteCoord(battler1, BATTLER_COORD_Y_PIC_OFFSET); + } + else + { + x = (GetBattlerSpriteCoord(battler1, BATTLER_COORD_X_2) + GetBattlerSpriteCoord(battler2, BATTLER_COORD_X_2)) / 2; + y = (GetBattlerSpriteCoord(battler1, BATTLER_COORD_Y_PIC_OFFSET) + GetBattlerSpriteCoord(battler2, BATTLER_COORD_Y_PIC_OFFSET)) / 2; + } - x -= 32; - y -= 36; + x -= 32; + y -= 36; - spriteId = CreateSprite(&sFrozenIceCubeSpriteTemplate, x, y, 4); - if (GetSpriteTileStartByTag(ANIM_TAG_ICE_CUBE) == 0xFFFF) - gSprites[spriteId].invisible = TRUE; + spriteId = CreateSprite(&sFrozenIceCubeSpriteTemplate, x, y, 4); + if (GetSpriteTileStartByTag(ANIM_TAG_ICE_CUBE) == 0xFFFF) + gSprites[spriteId].invisible = TRUE; SetSubspriteTables(&gSprites[spriteId], sFrozenIceCubeSubspriteTable); gTasks[taskId].data[15] = spriteId; diff --git a/src/battle_anim_water.c b/src/battle_anim_water.c index 159b27dec9..65f8178d13 100644 --- a/src/battle_anim_water.c +++ b/src/battle_anim_water.c @@ -585,14 +585,14 @@ const struct SpriteTemplate gAquaTailHitSpriteTemplate = }; 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) + 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, + sAnimCmdAnimatedSpark2, }; const struct SpriteTemplate gSparkBeamSpriteTemplate = diff --git a/src/battle_arena.c b/src/battle_arena.c index 26df519be0..b292ff8837 100644 --- a/src/battle_arena.c +++ b/src/battle_arena.c @@ -386,9 +386,9 @@ void BattleArena_AddSkillPoints(u8 battler) if (gHitMarker & HITMARKER_OBEYS) { u8 *failedMoveBits = &gBattleStruct->alreadyStatusedMoveAttempt; - if (*failedMoveBits & gBitTable[battler]) + if (*failedMoveBits & (1u << battler)) { - *failedMoveBits &= ~(gBitTable[battler]); + *failedMoveBits &= ~((1u << battler)); skillPoints[battler] -= 2; } else if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT) @@ -529,6 +529,7 @@ static void SetArenaData(void) static void SaveArenaChallenge(void) { + ClearEnemyPartyAfterChallenge(); gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index 0c71d0a1da..7aeefa54b6 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -118,7 +118,7 @@ void SetControllerToLinkOpponent(u32 battler) static void LinkOpponentBufferRunCommand(u32 battler) { - if (gBattleControllerExecFlags & gBitTable[battler]) + if (gBattleControllerExecFlags & (1u << battler)) { if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sLinkOpponentBufferCommands)) sLinkOpponentBufferCommands[gBattleResources->bufferA[battler][0]](battler); @@ -376,7 +376,7 @@ static void LinkOpponentBufferExecCompleted(u32 battler) } else { - gBattleControllerExecFlags &= ~gBitTable[battler]; + gBattleControllerExecFlags &= ~(1u << battler); } } diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index e5fb49bebf..283b492a91 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -117,7 +117,7 @@ void SetControllerToLinkPartner(u32 battler) static void LinkPartnerBufferRunCommand(u32 battler) { - if (gBattleControllerExecFlags & gBitTable[battler]) + if (gBattleControllerExecFlags & (1u << battler)) { if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sLinkPartnerBufferCommands)) sLinkPartnerBufferCommands[gBattleResources->bufferA[battler][0]](battler); @@ -202,7 +202,7 @@ static void LinkPartnerBufferExecCompleted(u32 battler) } else { - gBattleControllerExecFlags &= ~gBitTable[battler]; + gBattleControllerExecFlags &= ~(1u << battler); } } diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index a5dc6f3af1..57ebccf7fa 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -132,7 +132,7 @@ void SetControllerToOpponent(u32 battler) static void OpponentBufferRunCommand(u32 battler) { - if (gBattleControllerExecFlags & gBitTable[battler]) + if (gBattleControllerExecFlags & (1u << battler)) { if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sOpponentBufferCommands)) sOpponentBufferCommands[gBattleResources->bufferA[battler][0]](battler); @@ -211,6 +211,18 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) } } +static void TrySetBattlerShadowSpriteCallback(u32 battler) +{ + if (gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary].callback == SpriteCallbackDummy) + { + if (B_ENEMY_MON_SHADOW_STYLE <= GEN_3 + || gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary].callback == SpriteCallbackDummy) + { + SetBattlerShadowSpriteCallback(battler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES)); + } + } +} + static void Intro_TryShinyAnimShowHealthbox(u32 battler) { bool32 bgmRestored = FALSE; @@ -269,33 +281,36 @@ static void Intro_TryShinyAnimShowHealthbox(u32 battler) if (!twoMons || (twoMons && gBattleTypeFlags & BATTLE_TYPE_MULTI && !BATTLE_TWO_VS_ONE_OPPONENT)) { - if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) + if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy) { - battlerAnimsDone = TRUE; + TrySetBattlerShadowSpriteCallback(battler); + if (gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) + { + battlerAnimsDone = TRUE; + } } } else { if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy - && gSprites[gBattleControllerData[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy) + && gSprites[gBattleControllerData[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy) { - battlerAnimsDone = TRUE; + TrySetBattlerShadowSpriteCallback(battler); + TrySetBattlerShadowSpriteCallback(BATTLE_PARTNER(battler)); + if (gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy + && gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy) + { + battlerAnimsDone = TRUE; + } } } if (bgmRestored && battlerAnimsDone) { if (twoMons && (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) || BATTLE_TWO_VS_ONE_OPPONENT)) - { DestroySprite(&gSprites[gBattleControllerData[BATTLE_PARTNER(battler)]]); - SetBattlerShadowSpriteCallback(BATTLE_PARTNER(battler), GetMonData(&gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]], MON_DATA_SPECIES)); - } DestroySprite(&gSprites[gBattleControllerData[battler]]); - SetBattlerShadowSpriteCallback(battler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES)); gBattleSpritesDataPtr->animationData->introAnimActive = FALSE; gBattleSpritesDataPtr->healthBoxesData[battler].bgmRestored = FALSE; gBattleSpritesDataPtr->healthBoxesData[battler].healthboxSlideInStarted = FALSE; @@ -390,7 +405,7 @@ static void OpponentBufferExecCompleted(u32 battler) } else { - gBattleControllerExecFlags &= ~gBitTable[battler]; + gBattleControllerExecFlags &= ~(1u << battler); } } @@ -549,7 +564,7 @@ static void OpponentHandleChooseMove(u32 battler) if (GetBattlerMoveTargetType(battler, chosenMove) & MOVE_TARGET_BOTH) { gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + if (gAbsentBattlerFlags & (1u << gBattlerTarget)) gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); } // If opponent can and should use a gimmick (considering trainer data), do it @@ -581,7 +596,7 @@ static void OpponentHandleChooseMove(u32 battler) if (GetBattlerMoveTargetType(battler, move) & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER)) BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (battler << 8)); - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (IsDoubleBattle()) { do { target = GetBattlerAtPosition(Random() & 2); @@ -653,7 +668,7 @@ static void OpponentHandleChoosePokemon(u32 battler) { s32 battler1, battler2, firstId, lastId; - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) { battler2 = battler1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); } diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 6dcea9eb98..afff143266 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -44,6 +44,7 @@ #include "level_caps.h" #include "menu.h" #include "pokemon_summary_screen.h" +#include "type_icons.h" static void PlayerBufferExecCompleted(u32 battler); static void PlayerHandleLoadMonSprite(u32 battler); @@ -59,7 +60,6 @@ static void PlayerHandlePrintString(u32 battler); static void PlayerHandlePrintSelectionString(u32 battler); static void PlayerHandleChooseAction(u32 battler); static void PlayerHandleYesNoBox(u32 battler); -static void PlayerHandleChooseMove(u32 battler); static void PlayerHandleChooseItem(u32 battler); static void PlayerHandleChoosePokemon(u32 battler); static void PlayerHandleCmd23(u32 battler); @@ -81,14 +81,11 @@ static void PlayerHandleEndLinkBattle(u32 battler); static void PlayerHandleBattleDebug(u32 battler); static void PlayerBufferRunCommand(u32 battler); -static void HandleInputChooseTarget(u32 battler); -static void HandleInputChooseMove(u32 battler); static void MoveSelectionDisplayPpNumber(u32 battler); static void MoveSelectionDisplayPpString(u32 battler); static void MoveSelectionDisplayMoveType(u32 battler); static void MoveSelectionDisplayMoveNames(u32 battler); static void MoveSelectionDisplayMoveDescription(u32 battler); -static void HandleMoveSwitching(u32 battler); static void SwitchIn_HandleSoundAndEnd(u32 battler); static void WaitForMonSelection(u32 battler); static void CompleteWhenChoseItem(u32 battler); @@ -183,13 +180,13 @@ static void PlayerBufferExecCompleted(u32 battler) } else { - gBattleControllerExecFlags &= ~gBitTable[battler]; + gBattleControllerExecFlags &= ~(1u << battler); } } static void PlayerBufferRunCommand(u32 battler) { - if (gBattleControllerExecFlags & gBitTable[battler]) + if (gBattleControllerExecFlags & (1u << battler)) { if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sPlayerBufferCommands)) sPlayerBufferCommands[gBattleResources->bufferA[battler][0]](battler); @@ -382,9 +379,9 @@ static void HandleInputChooseAction(u32 battler) } else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) { - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle() && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT - && !(gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]) + && !(gAbsentBattlerFlags & (1u << GetBattlerAtPosition(B_POSITION_PLAYER_LEFT))) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { // Return item to bag if partner had selected one. @@ -426,7 +423,7 @@ static void HandleInputChooseAction(u32 battler) } } -static void HandleInputChooseTarget(u32 battler) +void HandleInputChooseTarget(u32 battler) { s32 i; static const u8 identities[MAX_BATTLERS_COUNT] = {B_POSITION_PLAYER_LEFT, B_POSITION_PLAYER_RIGHT, B_POSITION_OPPONENT_RIGHT, B_POSITION_OPPONENT_LEFT}; @@ -510,7 +507,7 @@ static void HandleInputChooseTarget(u32 battler) break; } - if (gAbsentBattlerFlags & gBitTable[gMultiUsePlayerCursor] + if (gAbsentBattlerFlags & (1u << gMultiUsePlayerCursor) || !CanTargetBattler(battler, gMultiUsePlayerCursor, move)) i = 0; } while (i == 0); @@ -560,7 +557,7 @@ static void HandleInputChooseTarget(u32 battler) break; } - if (gAbsentBattlerFlags & gBitTable[gMultiUsePlayerCursor] + if (gAbsentBattlerFlags & (1u << gMultiUsePlayerCursor) || !CanTargetBattler(battler, gMultiUsePlayerCursor, move)) i = 0; } while (i == 0); @@ -596,7 +593,7 @@ static void HideShownTargets(u32 battler) } } -static void HandleInputShowEntireFieldTargets(u32 battler) +void HandleInputShowEntireFieldTargets(u32 battler) { if (JOY_HELD(DPAD_ANY) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) gPlayerDpadHoldFrames++; @@ -624,7 +621,7 @@ static void HandleInputShowEntireFieldTargets(u32 battler) } } -static void HandleInputShowTargets(u32 battler) +void HandleInputShowTargets(u32 battler) { if (JOY_HELD(DPAD_ANY) && gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A) gPlayerDpadHoldFrames++; @@ -662,7 +659,7 @@ static void TryShowAsTarget(u32 battler) } } -static void HandleInputChooseMove(u32 battler) +void HandleInputChooseMove(u32 battler) { u16 moveTarget; u32 canSelectTarget = 0; @@ -756,7 +753,7 @@ static void HandleInputChooseMove(u32 battler) if (moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED)) gMultiUsePlayerCursor = battler; - else if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)]) + else if (gAbsentBattlerFlags & (1u << GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))) gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); else gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); @@ -890,7 +887,7 @@ static void HandleInputChooseMove(u32 battler) } else if (JOY_NEW(START_BUTTON)) { - if (gBattleStruct->gimmick.usableGimmick[battler] != GIMMICK_NONE) + if (gBattleStruct->gimmick.usableGimmick[battler] != GIMMICK_NONE && !HasTrainerUsedGimmick(battler, gBattleStruct->gimmick.usableGimmick[battler])) { gBattleStruct->gimmick.playerSelect ^= 1; ReloadMoveNames(battler); @@ -968,7 +965,7 @@ static u32 UNUSED HandleMoveInputUnused(u32 battler) return var; } -static void HandleMoveSwitching(u32 battler) +void HandleMoveSwitching(u32 battler) { u8 perMovePPBonuses[MAX_MON_MOVES]; struct ChooseMoveStruct moveStruct; @@ -997,10 +994,10 @@ static void HandleMoveSwitching(u32 battler) moveInfo->maxPp[gMoveSelectionCursor[battler]] = moveInfo->maxPp[gMultiUsePlayerCursor]; moveInfo->maxPp[gMultiUsePlayerCursor] = i; - if (gDisableStructs[battler].mimickedMoves & gBitTable[gMoveSelectionCursor[battler]]) + if (gDisableStructs[battler].mimickedMoves & (1u << gMoveSelectionCursor[battler])) { - gDisableStructs[battler].mimickedMoves &= (~gBitTable[gMoveSelectionCursor[battler]]); - gDisableStructs[battler].mimickedMoves |= gBitTable[gMultiUsePlayerCursor]; + gDisableStructs[battler].mimickedMoves &= ~(1u << gMoveSelectionCursor[battler]); + gDisableStructs[battler].mimickedMoves |= 1u << gMultiUsePlayerCursor; } MoveSelectionDisplayMoveNames(battler); @@ -1716,9 +1713,7 @@ static void MoveSelectionDisplayMoveType(u32 battler) u8 type; u32 speciesId; struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]); - txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfaceType); - type = gMovesInfo[moveInfo->moves[gMoveSelectionCursor[battler]]].type; if (moveInfo->moves[gMoveSelectionCursor[battler]] == MOVE_TERA_BLAST) @@ -1733,13 +1728,12 @@ static void MoveSelectionDisplayMoveType(u32 battler) if (speciesId == SPECIES_OGERPON_WELLSPRING_MASK || speciesId == SPECIES_OGERPON_WELLSPRING_MASK_TERA || speciesId == SPECIES_OGERPON_HEARTHFLAME_MASK || speciesId == SPECIES_OGERPON_HEARTHFLAME_MASK_TERA || speciesId == SPECIES_OGERPON_CORNERSTONE_MASK || speciesId == SPECIES_OGERPON_CORNERSTONE_MASK_TERA) - type = gBattleMons[battler].type2; + type = gBattleMons[battler].types[1]; } - // Max Guard is a Normal-type move else if (gMovesInfo[moveInfo->moves[gMoveSelectionCursor[battler]]].category == DAMAGE_CATEGORY_STATUS && (GetActiveGimmick(battler) == GIMMICK_DYNAMAX || IsGimmickSelected(battler, GIMMICK_DYNAMAX))) { - type = TYPE_NORMAL; + type = TYPE_NORMAL; // Max Guard is always a Normal-type move } else if (moveInfo->moves[gMoveSelectionCursor[battler]] == MOVE_TERA_STARSTORM) { @@ -1747,8 +1741,13 @@ static void MoveSelectionDisplayMoveType(u32 battler) || (IsGimmickSelected(battler, GIMMICK_TERA) && gBattleMons[battler].species == SPECIES_TERAPAGOS_TERASTAL)) type = TYPE_STELLAR; } - + else if (P_SHOW_DYNAMIC_TYPES) // Non-vanilla changes to battle UI showing dynamic types + { + struct Pokemon *mon = &gPlayerParty[gBattlerPartyIndexes[battler]]; + type = CheckDynamicMoveType(mon, moveInfo->moves[gMoveSelectionCursor[battler]], battler); + } end = StringCopy(txtPtr, gTypesInfo[type].name); + PrependFontIdToFit(txtPtr, end, FONT_NORMAL, WindowWidthPx(B_WIN_MOVE_TYPE) - 25); BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_TYPE); } @@ -2045,7 +2044,41 @@ static void PlayerHandleChooseAction(u32 battler) ActionSelectionCreateCursorAt(gActionSelectionCursor[battler], 0); PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, battler, gBattlerPartyIndexes[battler]); BattleStringExpandPlaceholdersToDisplayedString(gText_WhatWillPkmnDo); - BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_ACTION_PROMPT); + + if (B_SHOW_PARTNER_TARGET && gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && IsBattlerAlive(B_POSITION_PLAYER_RIGHT)) + { + StringCopy(gStringVar1, COMPOUND_STRING("Partner will use:\n")); + u32 move = gBattleMons[B_POSITION_PLAYER_RIGHT].moves[*(gBattleStruct->chosenMovePositions + B_POSITION_PLAYER_RIGHT)]; + StringAppend(gStringVar1, gMovesInfo[move].name); + if (gMovesInfo[move].target == MOVE_TARGET_SELECTED) + { + if (gBattleStruct->aiChosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_OPPONENT_LEFT) + StringAppend(gStringVar1, COMPOUND_STRING(" -{UP_ARROW}")); + else if (gBattleStruct->aiChosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_OPPONENT_RIGHT) + StringAppend(gStringVar1, COMPOUND_STRING(" {UP_ARROW}-")); + else if (gBattleStruct->aiChosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_PLAYER_LEFT) + StringAppend(gStringVar1, COMPOUND_STRING(" {DOWN_ARROW}-")); + else if (gBattleStruct->aiChosenTarget[B_POSITION_PLAYER_RIGHT] == B_POSITION_PLAYER_RIGHT) + StringAppend(gStringVar1, COMPOUND_STRING(" {DOWN_ARROW}-")); + } + else if (gMovesInfo[move].target == MOVE_TARGET_BOTH) + { + StringAppend(gStringVar1, COMPOUND_STRING(" {UP_ARROW}{UP_ARROW}")); + } + else if (gMovesInfo[move].target == MOVE_TARGET_FOES_AND_ALLY) + { + StringAppend(gStringVar1, COMPOUND_STRING(" {V_D_ARROW}{UP_ARROW}")); + } + else if (gMovesInfo[move].target == MOVE_TARGET_ALL_BATTLERS) + { + StringAppend(gStringVar1, COMPOUND_STRING(" {V_D_ARROW}{V_D_ARROW}")); + } + BattlePutTextOnWindow(gStringVar1, B_WIN_ACTION_PROMPT); + } + else + { + BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_ACTION_PROMPT); + } } static void PlayerHandleYesNoBox(u32 battler) @@ -2064,7 +2097,7 @@ static void PlayerHandleYesNoBox(u32 battler) } } -static void HandleChooseMoveAfterDma3(u32 battler) +void HandleChooseMoveAfterDma3(u32 battler) { if (!IsDma3ManagerBusyWithBgCopy()) { @@ -2086,7 +2119,7 @@ static void PlayerChooseMoveInBattlePalace(u32 battler) } } -static void PlayerHandleChooseMove(u32 battler) +void PlayerHandleChooseMove(u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_PALACE) { @@ -2101,7 +2134,7 @@ static void PlayerHandleChooseMove(u32 battler) gBattleStruct->gimmick.playerSelect = FALSE; AssignUsableZMoves(battler, moveInfo->moves); - gBattleStruct->zmove.viable = (gBattleStruct->zmove.possibleZMoves[battler] & gBitTable[gMoveSelectionCursor[battler]]) != 0; + gBattleStruct->zmove.viable = (gBattleStruct->zmove.possibleZMoves[battler] & (1u << gMoveSelectionCursor[battler])) != 0; if (!IsGimmickTriggerSpriteActive()) gBattleStruct->gimmick.triggerSpriteId = 0xFF; @@ -2114,6 +2147,7 @@ static void PlayerHandleChooseMove(u32 battler) void InitMoveSelectionsVarsAndStrings(u32 battler) { + LoadTypeIcons(battler); MoveSelectionDisplayMoveNames(battler); gMultiUsePlayerCursor = 0xFF; MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0); diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 2dffd4f702..47d71d87c6 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -121,7 +121,7 @@ void SetControllerToPlayerPartner(u32 battler) static void PlayerPartnerBufferRunCommand(u32 battler) { - if (gBattleControllerExecFlags & gBitTable[battler]) + if (gBattleControllerExecFlags & (1u << battler)) { if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sPlayerPartnerBufferCommands)) sPlayerPartnerBufferCommands[gBattleResources->bufferA[battler][0]](battler); @@ -274,7 +274,7 @@ static void PlayerPartnerBufferExecCompleted(u32 battler) } else { - gBattleControllerExecFlags &= ~gBitTable[battler]; + gBattleControllerExecFlags &= ~(1u << battler); } } @@ -365,7 +365,7 @@ static void PlayerPartnerHandleChooseMove(u32 battler) if (gMovesInfo[moveInfo->moves[chosenMoveId]].target & MOVE_TARGET_BOTH) { gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + if (gAbsentBattlerFlags & (1u << gBattlerTarget)) gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); } // If partner can and should use a gimmick (considering trainer data), do it diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index abadcc231c..bbeae7a9c0 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -124,7 +124,7 @@ void SetControllerToRecordedOpponent(u32 battler) static void RecordedOpponentBufferRunCommand(u32 battler) { - if (gBattleControllerExecFlags & gBitTable[battler]) + if (gBattleControllerExecFlags & (1u << battler)) { if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sRecordedOpponentBufferCommands)) sRecordedOpponentBufferCommands[gBattleResources->bufferA[battler][0]](battler); @@ -145,7 +145,7 @@ static void RecordedOpponentBufferExecCompleted(u32 battler) } else { - gBattleControllerExecFlags &= ~gBitTable[battler]; + gBattleControllerExecFlags &= ~(1u << battler); } } @@ -200,6 +200,19 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) } } +static void TrySetBattlerShadowSpriteCallback(u32 battler) +{ + + if (gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary].callback == SpriteCallbackDummy) + { + if (B_ENEMY_MON_SHADOW_STYLE <= GEN_3 + || gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary].callback == SpriteCallbackDummy) + { + SetBattlerShadowSpriteCallback(battler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES)); + } + } +} + static void Intro_TryShinyAnimShowHealthbox(u32 battler) { bool32 bgmRestored = FALSE; @@ -253,33 +266,34 @@ static void Intro_TryShinyAnimShowHealthbox(u32 battler) if (!IsDoubleBattle()) { - if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) + if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy) { - battlerAnimsDone = TRUE; + TrySetBattlerShadowSpriteCallback(battler); + if (gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) + battlerAnimsDone = TRUE; } } else { if (gSprites[gBattleControllerData[battler]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy - && gSprites[gBattleControllerData[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy - && gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy) + && gSprites[gBattleControllerData[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy) { - battlerAnimsDone = TRUE; + TrySetBattlerShadowSpriteCallback(battler); + TrySetBattlerShadowSpriteCallback(BATTLE_PARTNER(battler)); + if (gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy + && gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler)]].callback == SpriteCallbackDummy) + { + battlerAnimsDone = TRUE; + } } } if (bgmRestored && battlerAnimsDone) { if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) - { DestroySprite(&gSprites[gBattleControllerData[BATTLE_PARTNER(battler)]]); - SetBattlerShadowSpriteCallback(BATTLE_PARTNER(battler), GetMonData(&gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]], MON_DATA_SPECIES)); - } DestroySprite(&gSprites[gBattleControllerData[battler]]); - SetBattlerShadowSpriteCallback(battler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES)); gBattleSpritesDataPtr->animationData->introAnimActive = FALSE; gBattleSpritesDataPtr->healthBoxesData[battler].bgmRestored = FALSE; diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index 3a9ca1ec00..2bb64f3066 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -121,7 +121,7 @@ void SetControllerToRecordedPlayer(u32 battler) static void RecordedPlayerBufferRunCommand(u32 battler) { - if (gBattleControllerExecFlags & gBitTable[battler]) + if (gBattleControllerExecFlags & (1u << battler)) { if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sRecordedPlayerBufferCommands)) sRecordedPlayerBufferCommands[gBattleResources->bufferA[battler][0]](battler); @@ -351,7 +351,7 @@ static void RecordedPlayerBufferExecCompleted(u32 battler) } else { - gBattleControllerExecFlags &= ~gBitTable[battler]; + gBattleControllerExecFlags &= ~(1u << battler); } } diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index 39fbc63ab6..b85157f246 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -112,7 +112,7 @@ void SetControllerToSafari(u32 battler) static void SafariBufferRunCommand(u32 battler) { - if (gBattleControllerExecFlags & gBitTable[battler]) + if (gBattleControllerExecFlags & (1u << battler)) { if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sSafariBufferCommands)) sSafariBufferCommands[gBattleResources->bufferA[battler][0]](battler); @@ -240,7 +240,7 @@ static void SafariBufferExecCompleted(u32 battler) } else { - gBattleControllerExecFlags &= ~gBitTable[battler]; + gBattleControllerExecFlags &= ~(1u << battler); } } diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index 7b0bb6f154..66d3932694 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -129,7 +129,7 @@ void SetControllerToWally(u32 battler) static void WallyBufferRunCommand(u32 battler) { - if (gBattleControllerExecFlags & gBitTable[battler]) + if (gBattleControllerExecFlags & (1u << battler)) { if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sWallyBufferCommands)) sWallyBufferCommands[gBattleResources->bufferA[battler][0]](battler); @@ -288,7 +288,7 @@ static void WallyBufferExecCompleted(u32 battler) } else { - gBattleControllerExecFlags &= ~gBitTable[battler]; + gBattleControllerExecFlags &= ~(1u << battler); } } diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 230c3464dd..c5d6e3ebdd 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -75,7 +75,7 @@ void SetUpBattleVarsAndBirchZigzagoon(void) gBattleControllerExecFlags = 0; ClearBattleAnimationVars(); BattleAI_SetupItems(); - BattleAI_SetupFlags(); + BattleAI_SetupFlags(); if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) { @@ -175,7 +175,7 @@ static void InitSinglePlayerBtlControllers(void) gBattlerPartyIndexes[3] = 3; } } - else if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + else if (!IsDoubleBattle()) { gBattleMainFunc = BeginBattleIntro; @@ -417,7 +417,7 @@ static void InitLinkBtlControllers(void) s32 i; u8 multiplayerId; - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) { if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) { @@ -442,7 +442,7 @@ static void InitLinkBtlControllers(void) gBattlersCount = 2; } } - else if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && IsDoubleBattle()) { if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) { @@ -610,9 +610,10 @@ static void InitLinkBtlControllers(void) bool32 IsValidForBattle(struct Pokemon *mon) { u32 species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG); - return (species != SPECIES_NONE && species != SPECIES_EGG - && GetMonData(mon, MON_DATA_HP) != 0 - && GetMonData(mon, MON_DATA_IS_EGG) == FALSE); + return (species != SPECIES_NONE + && species != SPECIES_EGG + && GetMonData(mon, MON_DATA_HP) != 0 + && GetMonData(mon, MON_DATA_IS_EGG) == FALSE); } static void SetBattlePartyIds(void) @@ -850,7 +851,7 @@ void TryReceiveLinkBattleData(void) DestroyTask_RfuIdle(); for (i = 0; i < GetLinkPlayerCount(); i++) { - if (GetBlockReceivedStatus() & gBitTable[i]) + if (GetBlockReceivedStatus() & (1 << (i))) { ResetBlockReceivedFlag(i); recvBuffer = (u8 *)gBlockRecvBuffer[i]; @@ -897,7 +898,7 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId) switch (gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 0]) { case 0: - if (gBattleControllerExecFlags & gBitTable[battler]) + if (gBattleControllerExecFlags & (1u << battler)) return; memcpy(gBattleResources->bufferA[battler], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA], blockSize); @@ -916,7 +917,7 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId) break; case 2: var = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA]; - gBattleControllerExecFlags &= ~(gBitTable[battler] << (var * 4)); + gBattleControllerExecFlags &= ~(1u << (battler + var * 4)); break; } diff --git a/src/battle_debug.c b/src/battle_debug.c index 4aefb2b1ff..a5421a932b 100644 --- a/src/battle_debug.c +++ b/src/battle_debug.c @@ -1670,7 +1670,7 @@ static void PrintSecondaryEntries(struct BattleDebugMenu *data) case LIST_ITEM_TYPES: for (i = 0; i < 3; i++) { - u8 *types = &gBattleMons[data->battlerId].type1; + u8 *types = &gBattleMons[data->battlerId].types[0]; PadString(gTypesInfo[types[i]].name, text); printer.currentY = printer.y = (i * yMultiplier) + sSecondaryListTemplate.upText_Y; @@ -2070,9 +2070,9 @@ static void SetUpModifyArrows(struct BattleDebugMenu *data) data->modifyArrows.minValue = 0; data->modifyArrows.maxValue = NUMBER_OF_MON_TYPES - 1; data->modifyArrows.maxDigits = 2; - data->modifyArrows.modifiedValPtr = (u8 *)((&gBattleMons[data->battlerId].type1) + data->currentSecondaryListItemId); + data->modifyArrows.modifiedValPtr = (u8 *)((&gBattleMons[data->battlerId].types[0]) + data->currentSecondaryListItemId); data->modifyArrows.typeOfVal = VAL_U8; - data->modifyArrows.currValue = *(u8 *)((&gBattleMons[data->battlerId].type1) + data->currentSecondaryListItemId); + data->modifyArrows.currValue = *(u8 *)((&gBattleMons[data->battlerId].types[0]) + data->currentSecondaryListItemId); break; case LIST_ITEM_STATS: data->modifyArrows.minValue = 0; @@ -2269,14 +2269,9 @@ static void UpdateMonData(struct BattleDebugMenu *data) { if (data->battlerWasChanged[i]) { - struct Pokemon *mon; + struct Pokemon *mon = GetPartyBattlerData(i); struct BattlePokemon *battleMon = &gBattleMons[i]; - if (GetBattlerSide(i) == B_SIDE_PLAYER) - mon = &gPlayerParty[gBattlerPartyIndexes[i]]; - else - mon = &gEnemyParty[gBattlerPartyIndexes[i]]; - SetMonData(mon, MON_DATA_HELD_ITEM, &battleMon->item); SetMonData(mon, MON_DATA_STATUS, &battleMon->status1); SetMonData(mon, MON_DATA_HP, &battleMon->hp); diff --git a/src/battle_dome.c b/src/battle_dome.c index 67b9a1e293..1d79333290 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -2030,8 +2030,8 @@ static void InitDomeTrainers(void) rankingScores[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPDEF, NULL); rankingScores[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPEED, NULL); rankingScores[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_MAX_HP, NULL); - monTypesBits |= gBitTable[gSpeciesInfo[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].types[0]]; - monTypesBits |= gBitTable[gSpeciesInfo[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].types[1]]; + monTypesBits |= 1u << gSpeciesInfo[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].types[0]; + monTypesBits |= 1u << gSpeciesInfo[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].types[1]; } // Count the number of types in the players party, to factor into the ranking @@ -2062,8 +2062,8 @@ static void InitDomeTrainers(void) rankingScores[i] += statValues[STAT_SPDEF]; rankingScores[i] += statValues[STAT_SPEED]; rankingScores[i] += statValues[STAT_HP]; - monTypesBits |= gBitTable[gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[0]]; - monTypesBits |= gBitTable[gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[1]]; + monTypesBits |= 1u << gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[0]; + monTypesBits |= 1u << gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[1]; } for (monTypesCount = 0, j = 0; j < 32; j++) @@ -2136,7 +2136,7 @@ static void CalcDomeMonStats(const struct TrainerMon *fmon, int level, u8 ivs, i { int evs[NUM_STATS]; int i; - + for (i = 0; i < NUM_STATS; i++) { if (fmon->ev != NULL) @@ -2144,7 +2144,7 @@ static void CalcDomeMonStats(const struct TrainerMon *fmon, int level, u8 ivs, i else evs[i] = 0; } - + if (fmon->species == SPECIES_SHEDINJA) { stats[STAT_HP] = 1; @@ -2199,7 +2199,7 @@ static void CreateDomeOpponentMon(u8 monPartyId, u16 tournamentTrainerId, u8 tou u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Using the wrong ID. As a result, all Pokémon have ivs of 3. #endif u8 level = SetFacilityPtrsGetLevel(); - + CreateFacilityMon(&gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][tournamentMonId]], level, fixedIv, otId, 0, &gEnemyParty[monPartyId]); } @@ -2344,9 +2344,9 @@ static int SelectOpponentMonsFromParty(int *partyMovePoints, bool8 allowRandom) while (i != DOME_BATTLE_PARTY_SIZE) { u32 rand = Random() & FRONTIER_PARTY_SIZE; - if (rand != FRONTIER_PARTY_SIZE && !(selectedMonBits & gBitTable[rand])) + if (rand != FRONTIER_PARTY_SIZE && !(selectedMonBits & (1u << rand))) { - selectedMonBits |= gBitTable[rand]; + selectedMonBits |= 1u << rand; i++; } } @@ -2376,7 +2376,7 @@ static int SelectOpponentMonsFromParty(int *partyMovePoints, bool8 allowRandom) for (i = 0; i < DOME_BATTLE_PARTY_SIZE; i++) { - selectedMonBits |= gBitTable[partyPositions[i]]; + selectedMonBits |= 1u << partyPositions[i]; } } @@ -2593,6 +2593,7 @@ static void SetDomeOpponentGraphicsId(void) static void SaveDomeChallenge(void) { + ClearEnemyPartyAfterChallenge(); gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; @@ -4446,7 +4447,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId) else allocatedArray[j] = 0; } - + allocatedArray[NUM_STATS] += allocatedArray[STAT_HP]; for (j = 0; j < NUM_NATURE_STATS; j++) { @@ -5802,8 +5803,8 @@ static void InitRandomTourneyTreeResults(void) statSums[i] += statValues[STAT_SPDEF]; statSums[i] += statValues[STAT_SPEED]; statSums[i] += statValues[STAT_HP]; - monTypesBits |= gBitTable[gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[0]]; - monTypesBits |= gBitTable[gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[1]]; + monTypesBits |= 1u << gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[0]; + monTypesBits |= 1u << gSpeciesInfo[gFacilityTrainerMons[DOME_MONS[i][j]].species].types[1]; } // Because GF hates temporary vars, trainerId acts like monTypesCount here. diff --git a/src/battle_dynamax.c b/src/battle_dynamax.c index 06a26718a9..073e2c55bc 100644 --- a/src/battle_dynamax.c +++ b/src/battle_dynamax.c @@ -76,6 +76,10 @@ bool32 CanDynamax(u32 battler) u16 species = gBattleMons[battler].species; u16 holdEffect = GetBattlerHoldEffect(battler, FALSE); + // Prevents Zigzagoon from dynamaxing in vanilla. + if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE && GetBattlerSide(battler) == B_SIDE_OPPONENT) + return FALSE; + // Check if Player has a Dynamax Band. if (!TESTING && (GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT))) @@ -402,7 +406,6 @@ static u8 GetMaxPowerTier(u32 move) case EFFECT_NATURAL_GIFT: case EFFECT_MIRROR_COAT: case EFFECT_FINAL_GAMBIT: - //case EFFECT_DRAGON_DARTS: return MAX_POWER_TIER_2; case EFFECT_OHKO: case EFFECT_RETURN: diff --git a/src/battle_factory.c b/src/battle_factory.c index 7d7ec7b3af..8edd9a2ddf 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -268,6 +268,7 @@ static void SetBattleFactoryData(void) static void SaveFactoryChallenge(void) { + ClearEnemyPartyAfterChallenge(); gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; @@ -406,7 +407,7 @@ static void SetPlayerAndOpponentParties(void) u8 monLevel; u16 monId; u8 ivs; - + if (gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_TENT) { gFacilityTrainerMons = gSlateportBattleTentMons; @@ -428,11 +429,8 @@ static void SetPlayerAndOpponentParties(void) { monId = gSaveBlock2Ptr->frontier.rentalMons[i].monId; ivs = gSaveBlock2Ptr->frontier.rentalMons[i].ivs; - + CreateFacilityMon(&gFacilityTrainerMons[monId], monLevel, ivs, OT_ID_PLAYER_ID, FLAG_FRONTIER_MON_FACTORY, &gPlayerParty[i]); - SetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY, - &gSaveBlock2Ptr->frontier.rentalMons[i].personality); - CalculateMonStats(&gPlayerParty[i]); } } @@ -444,12 +442,7 @@ static void SetPlayerAndOpponentParties(void) { monId = gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].monId; ivs = gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].ivs; - CreateFacilityMon(&gFacilityTrainerMons[monId], - monLevel, ivs, OT_ID_PLAYER_ID, FLAG_FRONTIER_MON_FACTORY, - &gEnemyParty[i]); - SetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY, - &gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].personality); - CalculateMonStats(&gPlayerParty[i]); + CreateFacilityMon(&gFacilityTrainerMons[monId], monLevel, ivs, OT_ID_PLAYER_ID, FLAG_FRONTIER_MON_FACTORY, &gEnemyParty[i]); } break; } diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index 5aa019c29f..f76c6a2fc8 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -1761,7 +1761,7 @@ static void CreateFrontierFactorySelectableMons(u8 firstMonId) ivs = GetFactoryMonFixedIV(challengeNum + 1, FALSE); else ivs = GetFactoryMonFixedIV(challengeNum, FALSE); - + CreateFacilityMon(&gFacilityTrainerMons[monId], level, ivs, otId, FLAG_FRONTIER_MON_FACTORY, &sFactorySelectScreen->mons[i + firstMonId].monData); diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 728db40af2..ec5c1cfb33 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -27,10 +27,6 @@ #include "constants/battle_palace.h" #include "constants/battle_move_effects.h" - -extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow; -extern const struct SpriteTemplate gSpriteTemplate_EnemyShadow; - // this file's functions static u8 GetBattlePalaceMoveGroup(u8 battler, u16 move); static u16 GetBattlePalaceTarget(u32 battler); @@ -82,6 +78,46 @@ const struct SpritePalette sSpritePalettes_HealthBoxHealthBar[2] = {gBattleInterface_BallDisplayPal, TAG_HEALTHBAR_PAL} }; +const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow = +{ + .data = gEnemyMonShadow_Gfx, .size = 0x80, .tag = TAG_SHADOW_TILE +}; + +const struct CompressedSpriteSheet gSpriteSheet_EnemyShadowsSized = +{ + .data = gEnemyMonShadowsSized_Gfx, + .size = TILE_SIZE_4BPP * 8 * 4, // 8 tiles per sprite, 4 sprites total + .tag = TAG_SHADOW_TILE, +}; + +static const struct OamData sOamData_EnemyShadow = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(32x8), + .tileNum = 0, + .priority = 3, + .paletteNum = 0, + .affineParam = 0 +}; + +const struct SpriteTemplate gSpriteTemplate_EnemyShadow = +{ + .tileTag = TAG_SHADOW_TILE, + .paletteTag = TAG_SHADOW_PAL, + .oam = &sOamData_EnemyShadow, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + // code void AllocateBattleSpritesData(void) { @@ -126,7 +162,7 @@ u16 ChooseMoveAndTargetInBattlePalace(u32 battler) // If battler is < 50% HP and not asleep, use second set of move group likelihoods // otherwise use first set - i = (gBattleStruct->palaceFlags & gBitTable[battler]) ? 2 : 0; + i = (gBattleStruct->palaceFlags & (1u << battler)) ? 2 : 0; minGroupNum = i; maxGroupNum = i + 2; // + 2 because there are two percentages per set of likelihoods @@ -150,7 +186,7 @@ u16 ChooseMoveAndTargetInBattlePalace(u32 battler) if (moveInfo->moves[i] == MOVE_NONE) break; if (selectedGroup == GetBattlePalaceMoveGroup(battler, moveInfo->moves[i]) && moveInfo->currentPp[i] != 0) - selectedMoves |= gBitTable[i]; + selectedMoves |= 1u << i; } // Pass selected moves to AI, pick one @@ -178,11 +214,11 @@ u16 ChooseMoveAndTargetInBattlePalace(u32 battler) { // Count the number of usable moves the battler has in each move group. // The totals will be stored separately in 3 groups of 4 bits each in numMovesPerGroup. - if (GetBattlePalaceMoveGroup(battler, moveInfo->moves[i]) == PALACE_MOVE_GROUP_ATTACK && !(gBitTable[i] & unusableMovesBits)) + if (GetBattlePalaceMoveGroup(battler, moveInfo->moves[i]) == PALACE_MOVE_GROUP_ATTACK && !((1u << i) & unusableMovesBits)) numMovesPerGroup += (1 << 0); - if (GetBattlePalaceMoveGroup(battler, moveInfo->moves[i]) == PALACE_MOVE_GROUP_DEFENSE && !(gBitTable[i] & unusableMovesBits)) + if (GetBattlePalaceMoveGroup(battler, moveInfo->moves[i]) == PALACE_MOVE_GROUP_DEFENSE && !((1u << i) & unusableMovesBits)) numMovesPerGroup += (1 << 4); - if (GetBattlePalaceMoveGroup(battler, moveInfo->moves[i]) == PALACE_MOVE_GROUP_SUPPORT && !(gBitTable[i] & unusableMovesBits)) + if (GetBattlePalaceMoveGroup(battler, moveInfo->moves[i]) == PALACE_MOVE_GROUP_SUPPORT && !((1u << i) & unusableMovesBits)) numMovesPerGroup += (1 << 8); } @@ -215,7 +251,7 @@ u16 ChooseMoveAndTargetInBattlePalace(u32 battler) do { i = Random() % MAX_MON_MOVES; - if (!(gBitTable[i] & unusableMovesBits)) + if (!((1u << i) & unusableMovesBits)) chosenMoveId = i; } while (chosenMoveId == -1); } @@ -241,7 +277,7 @@ u16 ChooseMoveAndTargetInBattlePalace(u32 battler) do { i = Random() % MAX_MON_MOVES; - if (!(gBitTable[i] & unusableMovesBits) && randSelectGroup == GetBattlePalaceMoveGroup(battler, moveInfo->moves[i])) + if (!((1u << i) & unusableMovesBits) && randSelectGroup == GetBattlePalaceMoveGroup(battler, moveInfo->moves[i])) chosenMoveId = i; } while (chosenMoveId == -1); } @@ -309,7 +345,7 @@ static u8 GetBattlePalaceMoveGroup(u8 battler, u16 move) static u16 GetBattlePalaceTarget(u32 battler) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { u8 opposing1, opposing2; @@ -436,8 +472,6 @@ void InitAndLaunchChosenStatusAnimation(u32 battler, bool32 isStatus2, u32 statu LaunchStatusAnimation(battler, B_ANIM_STATUS_CURSED); else if (status & STATUS2_NIGHTMARE) LaunchStatusAnimation(battler, B_ANIM_STATUS_NIGHTMARE); - else if (status & STATUS2_WRAPPED) - LaunchStatusAnimation(battler, B_ANIM_STATUS_WRAPPED); // this animation doesn't actually exist else // no animation gBattleSpritesDataPtr->healthBoxesData[battler].statusAnimActive = 0; } @@ -1096,16 +1130,58 @@ void SetBattlerSpriteAffineMode(u8 affineMode) } } -#define tBattlerId data[0] +#define tBattlerId data[0] +#define tSpriteSide data[1] + +#define SPRITE_SIDE_LEFT 0 +#define SPRITE_SIDE_RIGHT 1 void CreateEnemyShadowSprite(u32 battler) { - gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, - GetBattlerSpriteCoord(battler, BATTLER_COORD_X), - GetBattlerSpriteCoord(battler, BATTLER_COORD_Y) + 29, - 0xC8); - if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId < MAX_SPRITES) - gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId].data[0] = battler; + if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4) + { + u16 species = SanitizeSpeciesId(gBattleMons[battler].species); + u8 size = gSpeciesInfo[species].enemyShadowSize; + + gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary = CreateSprite(&gSpriteTemplate_EnemyShadow, + GetBattlerSpriteCoord(battler, BATTLER_COORD_X), + GetBattlerSpriteCoord(battler, BATTLER_COORD_Y), + 0xC8); + if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary < MAX_SPRITES) + { + struct Sprite *sprite = &gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary]; + sprite->tBattlerId = battler; + sprite->tSpriteSide = SPRITE_SIDE_LEFT; + sprite->oam.tileNum += 8 * size; + sprite->invisible = TRUE; + } + + gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary = CreateSprite(&gSpriteTemplate_EnemyShadow, + GetBattlerSpriteCoord(battler, BATTLER_COORD_X), + GetBattlerSpriteCoord(battler, BATTLER_COORD_Y), + 0xC8); + if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary < MAX_SPRITES) + { + struct Sprite *sprite = &gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary]; + sprite->tBattlerId = battler; + sprite->tSpriteSide = SPRITE_SIDE_RIGHT; + sprite->oam.tileNum += (8 * size) + 4; + sprite->invisible = TRUE; + } + } + else + { + gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary = CreateSprite(&gSpriteTemplate_EnemyShadow, + GetBattlerSpriteCoord(battler, BATTLER_COORD_X), + GetBattlerSpriteCoord(battler, BATTLER_COORD_Y), + 0xC8); + if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary < MAX_SPRITES) + { + struct Sprite *sprite = &gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary]; + sprite->tBattlerId = battler; + sprite->invisible = TRUE; + } + } } void LoadAndCreateEnemyShadowSprites(void) @@ -1113,17 +1189,31 @@ void LoadAndCreateEnemyShadowSprites(void) u8 battler; u32 i; - LoadCompressedSpriteSheet(&gSpriteSheet_EnemyShadow); - - // initialize shadow sprite ids - for (i = 0; i < gBattlersCount; i++) + if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4) { - gBattleSpritesDataPtr->healthBoxesData[i].shadowSpriteId = MAX_SPRITES; + LoadCompressedSpriteSheet(&gSpriteSheet_EnemyShadowsSized); + + // initialize shadow sprite ids + for (i = 0; i < gBattlersCount; i++) + { + gBattleSpritesDataPtr->healthBoxesData[i].shadowSpriteIdPrimary = MAX_SPRITES; + gBattleSpritesDataPtr->healthBoxesData[i].shadowSpriteIdSecondary = MAX_SPRITES; + } + } + else + { + LoadCompressedSpriteSheet(&gSpriteSheet_EnemyShadow); + + // initialize shadow sprite ids + for (i = 0; i < gBattlersCount; i++) + { + gBattleSpritesDataPtr->healthBoxesData[i].shadowSpriteIdPrimary = MAX_SPRITES; + } } battler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); CreateEnemyShadowSprite(battler); - + if (IsDoubleBattle()) { battler = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); @@ -1143,16 +1233,36 @@ void SpriteCB_EnemyShadow(struct Sprite *shadowSprite) shadowSprite->callback = SpriteCB_SetInvisible; return; } + + s8 xOffset = 0, yOffset = 0; if (gAnimScriptActive || battlerSprite->invisible) invisible = TRUE; - else if (transformSpecies != SPECIES_NONE && gSpeciesInfo[transformSpecies].enemyMonElevation == 0) - invisible = TRUE; + else if (transformSpecies != SPECIES_NONE) + { + xOffset = gSpeciesInfo[transformSpecies].enemyShadowXOffset; + yOffset = gSpeciesInfo[transformSpecies].enemyShadowYOffset; + + invisible = B_ENEMY_MON_SHADOW_STYLE >= GEN_4 + ? gSpeciesInfo[transformSpecies].suppressEnemyShadow + : gSpeciesInfo[transformSpecies].enemyMonElevation == 0; + } + else if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4) + { + u16 species = SanitizeSpeciesId(gBattleMons[battler].species); + xOffset = gSpeciesInfo[species].enemyShadowXOffset + (shadowSprite->tSpriteSide == SPRITE_SIDE_LEFT ? -16 : 16); + yOffset = gSpeciesInfo[species].enemyShadowYOffset + 16; + } + else + { + yOffset = 29; + } if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) invisible = TRUE; - shadowSprite->x = battlerSprite->x; + shadowSprite->x = battlerSprite->x + xOffset; shadowSprite->x2 = battlerSprite->x2; + shadowSprite->y = battlerSprite->y + yOffset; shadowSprite->invisible = invisible; } @@ -1165,24 +1275,59 @@ void SpriteCB_SetInvisible(struct Sprite *sprite) void SetBattlerShadowSpriteCallback(u8 battler, u16 species) { - // The player's shadow is never seen. - if (GetBattlerSide(battler) == B_SIDE_PLAYER || gBattleScripting.monCaught) - return; - if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId >= MAX_SPRITES) - return; + if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4) + { + if (GetBattlerSide(battler) == B_SIDE_PLAYER || gBattleScripting.monCaught) + { + gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary].callback = SpriteCB_SetInvisible; + gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary].callback = SpriteCB_SetInvisible; + return; + } - if (gBattleSpritesDataPtr->battlerData[battler].transformSpecies != SPECIES_NONE) - species = gBattleSpritesDataPtr->battlerData[battler].transformSpecies; + if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary >= MAX_SPRITES + || gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary >= MAX_SPRITES) + return; - if (gSpeciesInfo[SanitizeSpeciesId(species)].enemyMonElevation != 0) - gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId].callback = SpriteCB_EnemyShadow; + if (gBattleSpritesDataPtr->battlerData[battler].transformSpecies != SPECIES_NONE) + species = gBattleSpritesDataPtr->battlerData[battler].transformSpecies; + + if (gSpeciesInfo[SanitizeSpeciesId(species)].suppressEnemyShadow == FALSE) + { + gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary].callback = SpriteCB_EnemyShadow; + gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary].callback = SpriteCB_EnemyShadow; + } + else + { + gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary].callback = SpriteCB_SetInvisible; + gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary].callback = SpriteCB_SetInvisible; + } + } else - gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId].callback = SpriteCB_SetInvisible; + { + if (GetBattlerSide(battler) == B_SIDE_PLAYER || gBattleScripting.monCaught) + { + gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary].callback = SpriteCB_SetInvisible; + return; + } + + if (gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary >= MAX_SPRITES) + return; + + if (gBattleSpritesDataPtr->battlerData[battler].transformSpecies != SPECIES_NONE) + species = gBattleSpritesDataPtr->battlerData[battler].transformSpecies; + + if (gSpeciesInfo[SanitizeSpeciesId(species)].enemyMonElevation != 0) + gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary].callback = SpriteCB_EnemyShadow; + else + gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary].callback = SpriteCB_SetInvisible; + } } void HideBattlerShadowSprite(u8 battler) { - gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId].callback = SpriteCB_SetInvisible; + gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdPrimary].callback = SpriteCB_SetInvisible; + if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4) + gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteIdSecondary].callback = SpriteCB_SetInvisible; } // Color the background tiles surrounding the action selection and move windows diff --git a/src/battle_gimmick.c b/src/battle_gimmick.c index c8ee932218..057619aec1 100644 --- a/src/battle_gimmick.c +++ b/src/battle_gimmick.c @@ -45,7 +45,7 @@ bool32 IsGimmickSelected(u32 battler, enum Gimmick gimmick) { // There's no player select in tests, but some gimmicks need to test choice before they are fully activated. if (TESTING) - return (gBattleStruct->gimmick.toActivate & gBitTable[battler]) && gBattleStruct->gimmick.usableGimmick[battler] == gimmick; + return (gBattleStruct->gimmick.toActivate & (1u << battler)) && gBattleStruct->gimmick.usableGimmick[battler] == gimmick; else return gBattleStruct->gimmick.usableGimmick[battler] == gimmick && gBattleStruct->gimmick.playerSelect; } @@ -96,10 +96,10 @@ bool32 ShouldTrainerBattlerUseGimmick(u32 battler, enum Gimmick gimmick) bool32 HasTrainerUsedGimmick(u32 battler, enum Gimmick gimmick) { // Check whether partner battler has used gimmick or plans to during turn. - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + if (IsDoubleBattle() && IsPartnerMonFromSameTrainer(battler) && (gBattleStruct->gimmick.activated[BATTLE_PARTNER(battler)][gimmick] - || ((gBattleStruct->gimmick.toActivate & gBitTable[BATTLE_PARTNER(battler)] + || ((gBattleStruct->gimmick.toActivate & (1u << BATTLE_PARTNER(battler)) && gBattleStruct->gimmick.usableGimmick[BATTLE_PARTNER(battler)] == gimmick)))) { return TRUE; @@ -115,7 +115,7 @@ bool32 HasTrainerUsedGimmick(u32 battler, enum Gimmick gimmick) void SetGimmickAsActivated(u32 battler, enum Gimmick gimmick) { gBattleStruct->gimmick.activated[battler][gimmick] = TRUE; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsPartnerMonFromSameTrainer(battler)) + if (IsDoubleBattle() && IsPartnerMonFromSameTrainer(battler)) gBattleStruct->gimmick.activated[BATTLE_PARTNER(battler)][gimmick] = TRUE; } @@ -144,7 +144,8 @@ void CreateGimmickTriggerSprite(u32 battler) // Exit if there shouldn't be a sprite produced. if (GetBattlerSide(battler) == B_SIDE_OPPONENT || gBattleStruct->gimmick.usableGimmick[battler] == GIMMICK_NONE - || gimmick->triggerSheet == NULL) + || gimmick->triggerSheet == NULL + || HasTrainerUsedGimmick(battler, gBattleStruct->gimmick.usableGimmick[battler])) { return; } @@ -155,7 +156,7 @@ void CreateGimmickTriggerSprite(u32 battler) if (gBattleStruct->gimmick.triggerSpriteId == 0xFF) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) gBattleStruct->gimmick.triggerSpriteId = CreateSprite(gimmick->triggerTemplate, gSprites[gHealthboxSpriteIds[battler]].x - DOUBLES_GIMMICK_TRIGGER_POS_X_SLIDE, gSprites[gHealthboxSpriteIds[battler]].y - DOUBLES_GIMMICK_TRIGGER_POS_Y_DIFF, 0); @@ -204,7 +205,7 @@ static void SpriteCb_GimmickTrigger(struct Sprite *sprite) s32 xSlide, xPriority, xOptimal; s32 yDiff; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { xSlide = DOUBLES_GIMMICK_TRIGGER_POS_X_SLIDE; xPriority = DOUBLES_GIMMICK_TRIGGER_POS_X_PRIORITY; diff --git a/src/battle_interface.c b/src/battle_interface.c index 8d50bf95c3..4c17322b53 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -1377,7 +1377,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, // fainted mon gSprites[ballIconSpritesIds[i]].oam.tileNum += 3; } - else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaLostPlayerMons & gBitTable[j]) + else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaLostPlayerMons & (1u << j)) { // fainted arena mon gSprites[ballIconSpritesIds[i]].oam.tileNum += 3; @@ -1433,7 +1433,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, // fainted mon gSprites[ballIconSpritesIds[PARTY_SIZE - 1 - var]].oam.tileNum += 3; } - else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaLostOpponentMons & gBitTable[j]) + else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaLostOpponentMons & (1u << j)) { // fainted arena mon gSprites[ballIconSpritesIds[PARTY_SIZE - 1 - var]].oam.tileNum += 3; @@ -2718,7 +2718,7 @@ void CreateAbilityPopUp(u8 battlerId, u32 ability, bool32 isDoubleBattle) LoadSpriteSheet(&sSpriteSheet_AbilityPopUp); LoadSpritePalette(&sSpritePalette_AbilityPopUp); } - gBattleStruct->activeAbilityPopUps |= gBitTable[battlerId]; + gBattleStruct->activeAbilityPopUps |= 1u << battlerId; battlerPosition = GetBattlerPosition(battlerId); if (isDoubleBattle) @@ -2809,7 +2809,7 @@ static void SpriteCb_AbilityPopUp(struct Sprite *sprite) ||(sprite->tRightToLeft && (sprite->x -= 4) <= sprite->tOriginalX - ABILITY_POP_UP_POS_X_SLIDE) ) { - gBattleStruct->activeAbilityPopUps &= ~(gBitTable[sprite->tBattlerId]); + gBattleStruct->activeAbilityPopUps &= ~(1u << sprite->tBattlerId); DestroySprite(sprite); } } @@ -2823,7 +2823,7 @@ static void SpriteCb_AbilityPopUp(struct Sprite *sprite) void DestroyAbilityPopUp(u8 battlerId) { - if (gBattleStruct->activeAbilityPopUps & gBitTable[battlerId]) + if (gBattleStruct->activeAbilityPopUps & (1u << battlerId)) { gSprites[gBattleStruct->abilityPopUpSpriteIds[battlerId][0]].tFrames = 0; gSprites[gBattleStruct->abilityPopUpSpriteIds[battlerId][1]].tFrames = 0; diff --git a/src/battle_main.c b/src/battle_main.c index 9df19b9566..c7f6eeafda 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -23,6 +23,7 @@ #include "dma3.h" #include "event_data.h" #include "evolution_scene.h" +#include "field_weather.h" #include "graphics.h" #include "gpu_regs.h" #include "international_string_util.h" @@ -67,6 +68,7 @@ #include "constants/rgb.h" #include "constants/songs.h" #include "constants/trainers.h" +#include "constants/weather.h" #include "cable_club.h" extern const struct BgTemplate gBattleBgTemplates[]; @@ -302,7 +304,7 @@ static const s8 sCenterToCornerVecXs[8] ={-32, -16, -16, -32, -32}; // extra args are money and ball #define TRAINER_CLASS(trainerClass, trainerName, ...) \ - [TRAINER_CLASS_##trainerClass] = \ + [trainerClass] = \ { \ .name = _(trainerName), \ .money = DEFAULT(5, __VA_ARGS__), \ @@ -311,72 +313,72 @@ static const s8 sCenterToCornerVecXs[8] ={-32, -16, -16, -32, -32}; const struct TrainerClass gTrainerClasses[TRAINER_CLASS_COUNT] = { - TRAINER_CLASS(PKMN_TRAINER_1, "{PKMN} TRAINER"), - TRAINER_CLASS(PKMN_TRAINER_2, "{PKMN} TRAINER"), - TRAINER_CLASS(HIKER, "HIKER", 10), - TRAINER_CLASS(TEAM_AQUA, "TEAM AQUA"), - TRAINER_CLASS(PKMN_BREEDER, "{PKMN} BREEDER", 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? ITEM_HEAL_BALL : ITEM_FRIEND_BALL), - TRAINER_CLASS(COOLTRAINER, "COOLTRAINER", 12, ITEM_ULTRA_BALL), - TRAINER_CLASS(BIRD_KEEPER, "BIRD KEEPER", 8), - TRAINER_CLASS(COLLECTOR, "COLLECTOR", 15, ITEM_PREMIER_BALL), - TRAINER_CLASS(SWIMMER_M, "SWIMMER♂", 2, ITEM_DIVE_BALL), - TRAINER_CLASS(TEAM_MAGMA, "TEAM MAGMA"), - TRAINER_CLASS(EXPERT, "EXPERT", 10), - TRAINER_CLASS(AQUA_ADMIN, "AQUA ADMIN", 10), - TRAINER_CLASS(BLACK_BELT, "BLACK BELT", 8, ITEM_ULTRA_BALL), - TRAINER_CLASS(AQUA_LEADER, "AQUA LEADER", 20, ITEM_MASTER_BALL), - TRAINER_CLASS(HEX_MANIAC, "HEX MANIAC", 6), - TRAINER_CLASS(AROMA_LADY, "AROMA LADY", 10), - TRAINER_CLASS(RUIN_MANIAC, "RUIN MANIAC", 15), - TRAINER_CLASS(INTERVIEWER, "INTERVIEWER", 12), - TRAINER_CLASS(TUBER_F, "TUBER", 1), - TRAINER_CLASS(TUBER_M, "TUBER", 1), - TRAINER_CLASS(LADY, "LADY", 50), - TRAINER_CLASS(BEAUTY, "BEAUTY", 20), - TRAINER_CLASS(RICH_BOY, "RICH BOY", 50), - TRAINER_CLASS(POKEMANIAC, "POKéMANIAC", 15), - TRAINER_CLASS(GUITARIST, "GUITARIST", 8), - TRAINER_CLASS(KINDLER, "KINDLER", 8), - TRAINER_CLASS(CAMPER, "CAMPER", 4), - TRAINER_CLASS(PICNICKER, "PICNICKER", 4), - TRAINER_CLASS(BUG_MANIAC, "BUG MANIAC", 15), - TRAINER_CLASS(PSYCHIC, "PSYCHIC", 6), - TRAINER_CLASS(GENTLEMAN, "GENTLEMAN", 20, ITEM_LUXURY_BALL), - TRAINER_CLASS(ELITE_FOUR, "ELITE FOUR", 25, ITEM_ULTRA_BALL), - TRAINER_CLASS(LEADER, "LEADER", 25), - TRAINER_CLASS(SCHOOL_KID, "SCHOOL KID"), - TRAINER_CLASS(SR_AND_JR, "SR. AND JR.", 4), - TRAINER_CLASS(WINSTRATE, "WINSTRATE", 10), - TRAINER_CLASS(POKEFAN, "POKéFAN", 20), - TRAINER_CLASS(YOUNGSTER, "YOUNGSTER", 4), - TRAINER_CLASS(CHAMPION, "CHAMPION", 50), - TRAINER_CLASS(FISHERMAN, "FISHERMAN", 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? ITEM_DIVE_BALL : ITEM_LURE_BALL), - TRAINER_CLASS(TRIATHLETE, "TRIATHLETE", 10), - TRAINER_CLASS(DRAGON_TAMER, "DRAGON TAMER", 12), - TRAINER_CLASS(NINJA_BOY, "NINJA BOY", 3), - TRAINER_CLASS(BATTLE_GIRL, "BATTLE GIRL", 6), - TRAINER_CLASS(PARASOL_LADY, "PARASOL LADY", 10), - TRAINER_CLASS(SWIMMER_F, "SWIMMER♀", 2, ITEM_DIVE_BALL), - TRAINER_CLASS(TWINS, "TWINS", 3), - TRAINER_CLASS(SAILOR, "SAILOR", 8), - TRAINER_CLASS(COOLTRAINER_2, "COOLTRAINER", 5, ITEM_ULTRA_BALL), - TRAINER_CLASS(MAGMA_ADMIN, "MAGMA ADMIN", 10), - TRAINER_CLASS(RIVAL, "{PKMN} TRAINER", 15), - TRAINER_CLASS(BUG_CATCHER, "BUG CATCHER", 4), - TRAINER_CLASS(PKMN_RANGER, "{PKMN} RANGER", 12), - TRAINER_CLASS(MAGMA_LEADER, "MAGMA LEADER", 20, ITEM_MASTER_BALL), - TRAINER_CLASS(LASS, "LASS", 4), - TRAINER_CLASS(YOUNG_COUPLE, "YOUNG COUPLE", 8), - TRAINER_CLASS(OLD_COUPLE, "OLD COUPLE", 10), - TRAINER_CLASS(SIS_AND_BRO, "SIS AND BRO", 3), - TRAINER_CLASS(SALON_MAIDEN, "SALON MAIDEN"), - TRAINER_CLASS(DOME_ACE, "DOME ACE"), - TRAINER_CLASS(PALACE_MAVEN, "PALACE MAVEN"), - TRAINER_CLASS(ARENA_TYCOON, "ARENA TYCOON"), - TRAINER_CLASS(FACTORY_HEAD, "FACTORY HEAD"), - TRAINER_CLASS(PIKE_QUEEN, "PIKE QUEEN"), - TRAINER_CLASS(PYRAMID_KING, "PYRAMID KING"), - TRAINER_CLASS(RS_PROTAG, "{PKMN} TRAINER"), + TRAINER_CLASS(TRAINER_CLASS_PKMN_TRAINER_1, "{PKMN} TRAINER"), + TRAINER_CLASS(TRAINER_CLASS_PKMN_TRAINER_2, "{PKMN} TRAINER"), + TRAINER_CLASS(TRAINER_CLASS_HIKER, "HIKER", 10), + TRAINER_CLASS(TRAINER_CLASS_TEAM_AQUA, "TEAM AQUA"), + TRAINER_CLASS(TRAINER_CLASS_PKMN_BREEDER, "{PKMN} BREEDER", 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? ITEM_HEAL_BALL : ITEM_FRIEND_BALL), + TRAINER_CLASS(TRAINER_CLASS_COOLTRAINER, "COOLTRAINER", 12, ITEM_ULTRA_BALL), + TRAINER_CLASS(TRAINER_CLASS_BIRD_KEEPER, "BIRD KEEPER", 8), + TRAINER_CLASS(TRAINER_CLASS_COLLECTOR, "COLLECTOR", 15, ITEM_PREMIER_BALL), + TRAINER_CLASS(TRAINER_CLASS_SWIMMER_M, "SWIMMER♂", 2, ITEM_DIVE_BALL), + TRAINER_CLASS(TRAINER_CLASS_TEAM_MAGMA, "TEAM MAGMA"), + TRAINER_CLASS(TRAINER_CLASS_EXPERT, "EXPERT", 10), + TRAINER_CLASS(TRAINER_CLASS_AQUA_ADMIN, "AQUA ADMIN", 10), + TRAINER_CLASS(TRAINER_CLASS_BLACK_BELT, "BLACK BELT", 8, ITEM_ULTRA_BALL), + TRAINER_CLASS(TRAINER_CLASS_AQUA_LEADER, "AQUA LEADER", 20, ITEM_MASTER_BALL), + TRAINER_CLASS(TRAINER_CLASS_HEX_MANIAC, "HEX MANIAC", 6), + TRAINER_CLASS(TRAINER_CLASS_AROMA_LADY, "AROMA LADY", 10), + TRAINER_CLASS(TRAINER_CLASS_RUIN_MANIAC, "RUIN MANIAC", 15), + TRAINER_CLASS(TRAINER_CLASS_INTERVIEWER, "INTERVIEWER", 12), + TRAINER_CLASS(TRAINER_CLASS_TUBER_F, "TUBER", 1), + TRAINER_CLASS(TRAINER_CLASS_TUBER_M, "TUBER", 1), + TRAINER_CLASS(TRAINER_CLASS_LADY, "LADY", 50), + TRAINER_CLASS(TRAINER_CLASS_BEAUTY, "BEAUTY", 20), + TRAINER_CLASS(TRAINER_CLASS_RICH_BOY, "RICH BOY", 50), + TRAINER_CLASS(TRAINER_CLASS_POKEMANIAC, "POKéMANIAC", 15), + TRAINER_CLASS(TRAINER_CLASS_GUITARIST, "GUITARIST", 8), + TRAINER_CLASS(TRAINER_CLASS_KINDLER, "KINDLER", 8), + TRAINER_CLASS(TRAINER_CLASS_CAMPER, "CAMPER", 4), + TRAINER_CLASS(TRAINER_CLASS_PICNICKER, "PICNICKER", 4), + TRAINER_CLASS(TRAINER_CLASS_BUG_MANIAC, "BUG MANIAC", 15), + TRAINER_CLASS(TRAINER_CLASS_PSYCHIC, "PSYCHIC", 6), + TRAINER_CLASS(TRAINER_CLASS_GENTLEMAN, "GENTLEMAN", 20, ITEM_LUXURY_BALL), + TRAINER_CLASS(TRAINER_CLASS_ELITE_FOUR, "ELITE FOUR", 25, ITEM_ULTRA_BALL), + TRAINER_CLASS(TRAINER_CLASS_LEADER, "LEADER", 25), + TRAINER_CLASS(TRAINER_CLASS_SCHOOL_KID, "SCHOOL KID"), + TRAINER_CLASS(TRAINER_CLASS_SR_AND_JR, "SR. AND JR.", 4), + TRAINER_CLASS(TRAINER_CLASS_WINSTRATE, "WINSTRATE", 10), + TRAINER_CLASS(TRAINER_CLASS_POKEFAN, "POKéFAN", 20), + TRAINER_CLASS(TRAINER_CLASS_YOUNGSTER, "YOUNGSTER", 4), + TRAINER_CLASS(TRAINER_CLASS_CHAMPION, "CHAMPION", 50), + TRAINER_CLASS(TRAINER_CLASS_FISHERMAN, "FISHERMAN", 10, B_TRAINER_CLASS_POKE_BALLS >= GEN_8 ? ITEM_DIVE_BALL : ITEM_LURE_BALL), + TRAINER_CLASS(TRAINER_CLASS_TRIATHLETE, "TRIATHLETE", 10), + TRAINER_CLASS(TRAINER_CLASS_DRAGON_TAMER, "DRAGON TAMER", 12), + TRAINER_CLASS(TRAINER_CLASS_NINJA_BOY, "NINJA BOY", 3), + TRAINER_CLASS(TRAINER_CLASS_BATTLE_GIRL, "BATTLE GIRL", 6), + TRAINER_CLASS(TRAINER_CLASS_PARASOL_LADY, "PARASOL LADY", 10), + TRAINER_CLASS(TRAINER_CLASS_SWIMMER_F, "SWIMMER♀", 2, ITEM_DIVE_BALL), + TRAINER_CLASS(TRAINER_CLASS_TWINS, "TWINS", 3), + TRAINER_CLASS(TRAINER_CLASS_SAILOR, "SAILOR", 8), + TRAINER_CLASS(TRAINER_CLASS_COOLTRAINER_2, "COOLTRAINER", 5, ITEM_ULTRA_BALL), + TRAINER_CLASS(TRAINER_CLASS_MAGMA_ADMIN, "MAGMA ADMIN", 10), + TRAINER_CLASS(TRAINER_CLASS_RIVAL, "{PKMN} TRAINER", 15), + TRAINER_CLASS(TRAINER_CLASS_BUG_CATCHER, "BUG CATCHER", 4), + TRAINER_CLASS(TRAINER_CLASS_PKMN_RANGER, "{PKMN} RANGER", 12), + TRAINER_CLASS(TRAINER_CLASS_MAGMA_LEADER, "MAGMA LEADER", 20, ITEM_MASTER_BALL), + TRAINER_CLASS(TRAINER_CLASS_LASS, "LASS", 4), + TRAINER_CLASS(TRAINER_CLASS_YOUNG_COUPLE, "YOUNG COUPLE", 8), + TRAINER_CLASS(TRAINER_CLASS_OLD_COUPLE, "OLD COUPLE", 10), + TRAINER_CLASS(TRAINER_CLASS_SIS_AND_BRO, "SIS AND BRO", 3), + TRAINER_CLASS(TRAINER_CLASS_SALON_MAIDEN, "SALON MAIDEN"), + TRAINER_CLASS(TRAINER_CLASS_DOME_ACE, "DOME ACE"), + TRAINER_CLASS(TRAINER_CLASS_PALACE_MAVEN, "PALACE MAVEN"), + TRAINER_CLASS(TRAINER_CLASS_ARENA_TYCOON, "ARENA TYCOON"), + TRAINER_CLASS(TRAINER_CLASS_FACTORY_HEAD, "FACTORY HEAD"), + TRAINER_CLASS(TRAINER_CLASS_PIKE_QUEEN, "PIKE QUEEN"), + TRAINER_CLASS(TRAINER_CLASS_PYRAMID_KING, "PYRAMID KING"), + TRAINER_CLASS(TRAINER_CLASS_RS_PROTAG, "{PKMN} TRAINER"), }; static void (* const sTurnActionsFuncsTable[])(void) = @@ -517,9 +519,7 @@ static void CB2_InitBattleInternal(void) gBattle_BG3_X = 0; gBattle_BG3_Y = 0; -#if DEBUG_OVERWORLD_MENU == TRUE - if (!gIsDebugBattle) -#endif + if (!DEBUG_OVERWORLD_MENU || (DEBUG_OVERWORLD_MENU && !gIsDebugBattle)) { gBattleTerrain = BattleSetup_GetTerrainId(); } @@ -552,9 +552,7 @@ static void CB2_InitBattleInternal(void) else SetMainCallback2(CB2_HandleStartBattle); -#if DEBUG_OVERWORLD_MENU == TRUE - if (!gIsDebugBattle) -#endif + if (!DEBUG_OVERWORLD_MENU || (DEBUG_OVERWORLD_MENU && !gIsDebugBattle)) { if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED))) { @@ -1692,15 +1690,9 @@ static void CB2_HandleStartMultiBattle(void) case 8: if (IsLinkTaskFinished()) { - #if HQ_RANDOM == TRUE struct BattleVideo *ptr = &gBattleStruct->multiBuffer.battleVideo; ptr->battleTypeFlags = gBattleTypeFlags; ptr->rngSeed = gRecordedBattleRngSeed; - #else - u32 *ptr = gBattleStruct->multiBuffer.battleVideo; - ptr[0] = gBattleTypeFlags; - ptr[1] = gRecordedBattleRngSeed; // UB: overwrites berry data - #endif SendBlock(BitmaskAllOtherLinkPlayers(), ptr, sizeof(gBattleStruct->multiBuffer.battleVideo)); gBattleCommunication[MULTIUSE_STATE]++; @@ -3114,8 +3106,6 @@ static void BattleStartClearSetData(void) gBattleStruct->itemLost[B_SIDE_PLAYER][i].originalItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); gBattleStruct->itemLost[B_SIDE_OPPONENT][i].originalItem = GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM); gPartyCriticalHits[i] = 0; - gBattleStruct->allowedToChangeFormInWeather[i][B_SIDE_PLAYER] = FALSE; - gBattleStruct->allowedToChangeFormInWeather[i][B_SIDE_OPPONENT] = FALSE; } gBattleStruct->swapDamageCategory = FALSE; // Photon Geyser, Shell Side Arm, Light That Burns the Sky @@ -3218,9 +3208,10 @@ void SwitchInClearSetData(u32 battler) gBattleStruct->lastTakenMoveFrom[battler][1] = 0; gBattleStruct->lastTakenMoveFrom[battler][2] = 0; gBattleStruct->lastTakenMoveFrom[battler][3] = 0; - gBattleStruct->lastMoveFailed &= ~(gBitTable[battler]); - gBattleStruct->palaceFlags &= ~(gBitTable[battler]); - gBattleStruct->boosterEnergyActivates &= ~(gBitTable[battler]); + gBattleStruct->lastMoveFailed &= ~(1u << battler); + gBattleStruct->palaceFlags &= ~(1u << battler); + gBattleStruct->boosterEnergyActivates &= ~(1u << battler); + gBattleStruct->canPickupItem &= ~(1u << battler); for (i = 0; i < ARRAY_COUNT(gSideTimers); i++) { @@ -3245,7 +3236,7 @@ void SwitchInClearSetData(u32 battler) // Reset damage to prevent things like red card activating if the switched-in mon is holding it gSpecialStatuses[battler].physicalDmg = 0; gSpecialStatuses[battler].specialDmg = 0; - gBattleStruct->enduredDamage &= ~gBitTable[battler]; + gBattleStruct->enduredDamage &= ~(1u << battler); // Reset G-Max Chi Strike boosts. gBattleStruct->bonusCritStages[battler] = 0; @@ -3348,8 +3339,8 @@ const u8* FaintClearSetData(u32 battler) gBattleStruct->lastTakenMoveFrom[battler][2] = 0; gBattleStruct->lastTakenMoveFrom[battler][3] = 0; - gBattleStruct->palaceFlags &= ~(gBitTable[battler]); - gBattleStruct->boosterEnergyActivates &= ~(gBitTable[battler]); + gBattleStruct->palaceFlags &= ~(1u << battler); + gBattleStruct->boosterEnergyActivates &= ~(1u << battler); for (i = 0; i < ARRAY_COUNT(gSideTimers); i++) { @@ -3368,9 +3359,9 @@ const u8* FaintClearSetData(u32 battler) gBattleResources->flags->flags[battler] = 0; - gBattleMons[battler].type1 = gSpeciesInfo[gBattleMons[battler].species].types[0]; - gBattleMons[battler].type2 = gSpeciesInfo[gBattleMons[battler].species].types[1]; - gBattleMons[battler].type3 = TYPE_MYSTERY; + gBattleMons[battler].types[0] = gSpeciesInfo[gBattleMons[battler].species].types[0]; + gBattleMons[battler].types[1] = gSpeciesInfo[gBattleMons[battler].species].types[1]; + gBattleMons[battler].types[2] = TYPE_MYSTERY; Ai_UpdateFaintData(battler); TryBattleFormChange(battler, FORM_CHANGE_FAINT); @@ -3426,26 +3417,25 @@ static void DoBattleIntro(void) { s32 i; u32 battler; - u8 *state = &gBattleStruct->introState; - switch (*state) + switch (gBattleStruct->introState) { - case 0: // Get Data of all battlers. + case BATTLE_INTRO_STATE_GET_MON_DATA: battler = gBattleCommunication[1]; BtlController_EmitGetMonData(battler, BUFFER_A, REQUEST_ALL_BATTLE, 0); MarkBattlerForControllerExec(battler); - (*state)++; + gBattleStruct->introState++; break; - case 1: // Loop through all battlers. + case BATTLE_INTRO_STATE_LOOP_BATTLER_DATA: if (!gBattleControllerExecFlags) { if (++gBattleCommunication[1] == gBattlersCount) - (*state)++; + gBattleStruct->introState++; else - *state = 0; + gBattleStruct->introState = BATTLE_INTRO_STATE_GET_MON_DATA; } break; - case 2: // Start graphical intro slide. + case BATTLE_INTRO_STATE_PREPARE_BG_SLIDE: if (!gBattleControllerExecFlags) { battler = GetBattlerAtPosition(0); @@ -3453,14 +3443,14 @@ static void DoBattleIntro(void) MarkBattlerForControllerExec(battler); gBattleCommunication[0] = 0; gBattleCommunication[1] = 0; - (*state)++; + gBattleStruct->introState++; } break; - case 3: // Wait for intro slide. + case BATTLE_INTRO_STATE_WAIT_FOR_BG_SLIDE: if (!gBattleControllerExecFlags) - (*state)++; + gBattleStruct->introState++; break; - case 4: // Copy battler data gotten in cases 0 and 1. Draw trainer/mon sprite. + case BATTLE_INTRO_STATE_DRAW_SPRITES: for (battler = 0; battler < gBattlersCount; battler++) { if ((gBattleTypeFlags & BATTLE_TYPE_SAFARI) && GetBattlerSide(battler) == B_SIDE_PLAYER) @@ -3470,9 +3460,9 @@ static void DoBattleIntro(void) else { memcpy(&gBattleMons[battler], &gBattleResources->bufferB[battler][4], sizeof(struct BattlePokemon)); - gBattleMons[battler].type1 = gSpeciesInfo[gBattleMons[battler].species].types[0]; - gBattleMons[battler].type2 = gSpeciesInfo[gBattleMons[battler].species].types[1]; - gBattleMons[battler].type3 = TYPE_MYSTERY; + gBattleMons[battler].types[0] = gSpeciesInfo[gBattleMons[battler].species].types[0]; + gBattleMons[battler].types[1] = gSpeciesInfo[gBattleMons[battler].species].types[1]; + gBattleMons[battler].types[2] = TYPE_MYSTERY; gBattleMons[battler].ability = GetAbilityBySpecies(gBattleMons[battler].species, gBattleMons[battler].abilityNum); gBattleStruct->hpOnSwitchout[GetBattlerSide(battler)] = gBattleMons[battler].hp; gBattleMons[battler].status2 = 0; @@ -3540,17 +3530,17 @@ static void DoBattleIntro(void) if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { - (*state)++; + gBattleStruct->introState++; } 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. + gBattleStruct->introState = BATTLE_INTRO_STATE_INTRO_TEXT; // Don't wait for sprite, print message at the same time. else - *state = 6; // Wait for sprite to load. + gBattleStruct->introState++; // Wait for sprite to load. } break; - case 5: // draw party summary in trainer battles + case BATTLE_INTRO_STATE_DRAW_PARTY_SUMMARY: if (!gBattleControllerExecFlags) { struct HpAndStatus hpStatus[PARTY_SIZE]; @@ -3593,48 +3583,48 @@ static void DoBattleIntro(void) BtlController_EmitDrawPartyStatusSummary(battler, BUFFER_A, hpStatus, PARTY_SUMM_SKIP_DRAW_DELAY); MarkBattlerForControllerExec(battler); - (*state)++; + gBattleStruct->introState++; } break; - case 6: // wait for previous action to complete + case BATTLE_INTRO_STATE_WAIT_FOR_PARTY_SUMMARY: if (!gBattleControllerExecFlags) - (*state)++; + gBattleStruct->introState++; break; - case 7: // print battle intro message + case BATTLE_INTRO_STATE_INTRO_TEXT: if (!IsBattlerMarkedForControllerExec(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT))) { PrepareStringBattle(STRINGID_INTROMSG, GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)); - (*state)++; + gBattleStruct->introState++; } break; - case 8: // wait for intro message to be printed + case BATTLE_INTRO_STATE_WAIT_FOR_INTRO_TEXT: if (!IsBattlerMarkedForControllerExec(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT))) { if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) { - (*state)++; + gBattleStruct->introState++; } else { if (B_FAST_INTRO == TRUE) - *state = 15; // Wait for text to be printed. + gBattleStruct->introState = BATTLE_INTRO_STATE_WAIT_FOR_WILD_BATTLE_TEXT; else - *state = 14; // Wait for text and sprite. + gBattleStruct->introState = BATTLE_INTRO_STATE_WAIT_FOR_TRAINER_2_SEND_OUT_ANIM; } } break; - case 9: // print opponent sends out + case BATTLE_INTRO_STATE_TRAINER_SEND_OUT_TEXT: if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)) PrepareStringBattle(STRINGID_INTROSENDOUT, GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)); else PrepareStringBattle(STRINGID_INTROSENDOUT, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)); - (*state)++; + gBattleStruct->introState++; break; - case 10: // wait for opponent sends out text + case BATTLE_INTRO_STATE_WAIT_FOR_TRAINER_SEND_OUT_TEXT: if (!gBattleControllerExecFlags) - (*state)++; + gBattleStruct->introState++; break; - case 11: // first opponent's mon send out animation + case BATTLE_INTRO_STATE_TRAINER_1_SEND_OUT_ANIM: if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)) battler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); else @@ -3642,11 +3632,9 @@ static void DoBattleIntro(void) BtlController_EmitIntroTrainerBallThrow(battler, BUFFER_A); MarkBattlerForControllerExec(battler); - (*state)++; + gBattleStruct->introState++; break; - case 12: // nothing - (*state)++; - case 13: // second opponent's mon send out + case BATTLE_INTRO_STATE_TRAINER_2_SEND_OUT_ANIM: if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS) && !BATTLE_TWO_VS_ONE_OPPONENT) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)) @@ -3659,19 +3647,19 @@ static void DoBattleIntro(void) } 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. + gBattleStruct->introState = BATTLE_INTRO_STATE_WAIT_FOR_WILD_BATTLE_TEXT; // Print at the same time as trainer sends out second mon. else - (*state)++; + gBattleStruct->introState++; break; - case 14: // wait for opponent 2 send out + case BATTLE_INTRO_STATE_WAIT_FOR_TRAINER_2_SEND_OUT_ANIM: if (!gBattleControllerExecFlags) - (*state)++; + gBattleStruct->introState++; break; - case 15: // wait for wild battle message + case BATTLE_INTRO_STATE_WAIT_FOR_WILD_BATTLE_TEXT: if (!IsBattlerMarkedForControllerExec(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT))) - (*state)++; + gBattleStruct->introState++; break; - case 16: // print player sends out + case BATTLE_INTRO_STATE_PRINT_PLAYER_SEND_OUT_TEXT: if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)) @@ -3690,9 +3678,9 @@ static void DoBattleIntro(void) PrepareStringBattle(STRINGID_INTROSENDOUT, battler); } - (*state)++; + gBattleStruct->introState++; break; - case 17: // wait for player send out message + case BATTLE_INTRO_STATE_WAIT_FOR_PLAYER_SEND_OUT_TEXT: if (!(gBattleTypeFlags & BATTLE_TYPE_LINK && gBattleControllerExecFlags)) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)) @@ -3701,10 +3689,10 @@ static void DoBattleIntro(void) battler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); if (!IsBattlerMarkedForControllerExec(battler)) - (*state)++; + gBattleStruct->introState++; } break; - case 18: // player 1 send out + case BATTLE_INTRO_STATE_PRINT_PLAYER_1_SEND_OUT_TEXT: if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)) battler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); else @@ -3712,9 +3700,9 @@ static void DoBattleIntro(void) BtlController_EmitIntroTrainerBallThrow(battler, BUFFER_A); MarkBattlerForControllerExec(battler); - (*state)++; + gBattleStruct->introState++; break; - case 19: // player 2 send out + case BATTLE_INTRO_STATE_PRINT_PLAYER_2_SEND_OUT_TEXT: if (gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER)) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK && !(gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)) @@ -3725,9 +3713,9 @@ static void DoBattleIntro(void) BtlController_EmitIntroTrainerBallThrow(battler, BUFFER_A); MarkBattlerForControllerExec(battler); } - (*state)++; + gBattleStruct->introState++; break; - case 20: // set dex and battle vars + case BATTLE_INTRO_STATE_SET_DEX_AND_BATTLE_VARS: if (!gBattleControllerExecFlags) { for (battler = 0; battler < gBattlersCount; battler++) @@ -3756,7 +3744,7 @@ static void DoBattleIntro(void) gBattleStruct->startingStatus = GetTrainerStartingStatusFromId(gTrainerBattleOpponent_B); gBattleStruct->startingStatusTimer = 0; // infinite } - else if (GetTrainerStartingStatusFromId(gTrainerBattleOpponent_A)) + else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && GetTrainerStartingStatusFromId(gTrainerBattleOpponent_A)) { gBattleStruct->startingStatus = GetTrainerStartingStatusFromId(gTrainerBattleOpponent_A); gBattleStruct->startingStatusTimer = 0; // infinite @@ -3790,7 +3778,7 @@ static void TryDoEventsBeforeFirstTurn(void) struct Pokemon *party = GetBattlerParty(i); struct Pokemon *mon = &party[gBattlerPartyIndexes[i]]; if (!IsBattlerAlive(i) || gBattleMons[i].species == SPECIES_NONE || GetMonData(mon, MON_DATA_IS_EGG)) - gAbsentBattlerFlags |= gBitTable[i]; + gAbsentBattlerFlags |= 1u << i; } } @@ -3923,7 +3911,7 @@ static void TryDoEventsBeforeFirstTurn(void) gBattleMons[i].status2 &= ~STATUS2_FLINCHED; // Record party slots of player's mons that appeared in battle if (!BattlerHasAi(i)) - gBattleStruct->appearedInBattle |= gBitTable[gBattlerPartyIndexes[i]]; + gBattleStruct->appearedInBattle |= 1u << gBattlerPartyIndexes[i]; } *(&gBattleStruct->turnEffectsTracker) = 0; @@ -4039,6 +4027,11 @@ void BattleTurnPassed(void) SetAiLogicDataForTurn(AI_DATA); // get assumed abilities, hold effects, etc of all battlers gBattleMainFunc = HandleTurnActionSelectionState; + if (gSideTimers[B_SIDE_PLAYER].retaliateTimer > 0) + gSideTimers[B_SIDE_PLAYER].retaliateTimer--; + if (gSideTimers[B_SIDE_OPPONENT].retaliateTimer > 0) + gSideTimers[B_SIDE_OPPONENT].retaliateTimer--; + if (gBattleTypeFlags & BATTLE_TYPE_PALACE) BattleScriptExecute(BattleScript_PalacePrintFlavorText); else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->arenaTurnCounter == 0) @@ -4136,7 +4129,7 @@ void SwitchPartyOrder(u32 battler) partyId2 = GetPartyIdFromBattlePartyId(*(gBattleStruct->monToSwitchIntoId + battler)); SwitchPartyMonSlots(partyId1, partyId2); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++) { @@ -4195,10 +4188,10 @@ static void HandleTurnActionSelectionState(void) *(gBattleStruct->monToSwitchIntoId + battler) = PARTY_SIZE; if (gBattleTypeFlags & BATTLE_TYPE_MULTI || (position & BIT_FLANK) == B_FLANK_LEFT - || gBattleStruct->absentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(position))] + || gBattleStruct->absentBattlerFlags & (1u << GetBattlerAtPosition(BATTLE_PARTNER(position))) || gBattleCommunication[GetBattlerAtPosition(BATTLE_PARTNER(position))] == STATE_WAIT_ACTION_CONFIRMED) { - if (gBattleStruct->absentBattlerFlags & gBitTable[battler]) + if (gBattleStruct->absentBattlerFlags & (1u << battler)) { gChosenActionByBattler[battler] = B_ACTION_NOTHING_FAINTED; if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) @@ -4234,7 +4227,7 @@ static void HandleTurnActionSelectionState(void) } break; case STATE_WAIT_ACTION_CHOSEN: // Try to perform an action. - if (!(gBattleControllerExecFlags & ((gBitTable[battler]) | (0xF << 28) | (gBitTable[battler] << 4) | (gBitTable[battler] << 8) | (gBitTable[battler] << 12)))) + if (!(gBattleControllerExecFlags & (((1u << battler)) | (0xF << 28) | ((1u << battler) << 4) | ((1u << battler) << 8) | ((1u << battler) << 12)))) { RecordedBattle_SetBattlerAction(battler, gBattleResources->bufferB[battler][1]); gChosenActionByBattler[battler] = gBattleResources->bufferB[battler][1]; @@ -4263,9 +4256,9 @@ static void HandleTurnActionSelectionState(void) moveInfo.zmove = gBattleStruct->zmove; moveInfo.species = gBattleMons[battler].species; - moveInfo.monType1 = gBattleMons[battler].type1; - moveInfo.monType2 = gBattleMons[battler].type2; - moveInfo.monType3 = gBattleMons[battler].type3; + moveInfo.monTypes[0] = gBattleMons[battler].types[0]; + moveInfo.monTypes[1] = gBattleMons[battler].types[1]; + moveInfo.monTypes[2] = gBattleMons[battler].types[2]; for (i = 0; i < MAX_MON_MOVES; i++) { @@ -4277,7 +4270,7 @@ static void HandleTurnActionSelectionState(void) i); } - BtlController_EmitChooseMove(battler, BUFFER_A, (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) != 0, FALSE, &moveInfo); + BtlController_EmitChooseMove(battler, BUFFER_A, IsDoubleBattle() != 0, FALSE, &moveInfo); MarkBattlerForControllerExec(battler); } break; @@ -4386,7 +4379,7 @@ static void HandleTurnActionSelectionState(void) RecordedBattle_ClearBattlerAction(GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))), 3); } - gBattleStruct->gimmick.toActivate &= ~(gBitTable[BATTLE_PARTNER(GetBattlerPosition(battler))]); + gBattleStruct->gimmick.toActivate &= ~((1u << BATTLE_PARTNER(GetBattlerPosition(battler)))); BtlController_EmitEndBounceEffect(battler, BUFFER_A); MarkBattlerForControllerExec(battler); return; @@ -4429,7 +4422,7 @@ static void HandleTurnActionSelectionState(void) } break; case STATE_WAIT_ACTION_CASE_CHOSEN: - if (!(gBattleControllerExecFlags & ((gBitTable[battler]) | (0xF << 28) | (gBitTable[battler] << 4) | (gBitTable[battler] << 8) | (gBitTable[battler] << 12)))) + if (!(gBattleControllerExecFlags & (((1u << battler)) | (0xF << 28) | ((1u << battler) << 4) | ((1u << battler) << 8) | ((1u << battler) << 12)))) { switch (gChosenActionByBattler[battler]) { @@ -4480,7 +4473,7 @@ static void HandleTurnActionSelectionState(void) // Check to see if any gimmicks need to be prepared. if (gBattleResources->bufferB[battler][2] & RET_GIMMICK) - gBattleStruct->gimmick.toActivate |= gBitTable[battler]; + gBattleStruct->gimmick.toActivate |= 1u << battler; // Max Move check if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX || IsGimmickSelected(battler, GIMMICK_DYNAMAX)) @@ -4559,20 +4552,20 @@ static void HandleTurnActionSelectionState(void) } break; case STATE_WAIT_ACTION_CONFIRMED_STANDBY: - if (!(gBattleControllerExecFlags & ((gBitTable[battler]) + if (!(gBattleControllerExecFlags & ((1u << battler) | (0xF << 28) - | (gBitTable[battler] << 4) - | (gBitTable[battler] << 8) - | (gBitTable[battler] << 12)))) + | (1u << (battler + 4)) + | (1u << (battler + 8)) + | (1u << (battler + 12))))) { if (AllAtActionConfirmed()) i = TRUE; else i = FALSE; - if (((gBattleTypeFlags & BATTLE_TYPE_MULTI) || !(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (((gBattleTypeFlags & BATTLE_TYPE_MULTI) || !IsDoubleBattle()) || (position & BIT_FLANK) != B_FLANK_LEFT - || (*(&gBattleStruct->absentBattlerFlags) & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(position))])) + || (*(&gBattleStruct->absentBattlerFlags) & (1u << GetBattlerAtPosition(BATTLE_PARTNER(position))))) { BtlController_EmitLinkStandbyMsg(battler, BUFFER_A, LINK_STANDBY_MSG_STOP_BOUNCE, i); } @@ -4585,7 +4578,7 @@ static void HandleTurnActionSelectionState(void) } break; case STATE_WAIT_ACTION_CONFIRMED: - if (!(gBattleControllerExecFlags & ((gBitTable[battler]) | (0xF << 28) | (gBitTable[battler] << 4) | (gBitTable[battler] << 8) | (gBitTable[battler] << 12)))) + if (!(gBattleControllerExecFlags & ((1u << battler) | (0xF << 28) | (1u << (battler + 4)) | (1u << (battler + 8)) | (1u << (battler + 12))))) { gBattleCommunication[ACTIONS_CONFIRMED_COUNT]++; } @@ -4599,7 +4592,7 @@ static void HandleTurnActionSelectionState(void) { gBattlerAttacker = battler; gBattlescriptCurrInstr = gSelectionBattleScripts[battler]; - if (!(gBattleControllerExecFlags & ((gBitTable[battler]) | (0xF << 28) | (gBitTable[battler] << 4) | (gBitTable[battler] << 8) | (gBitTable[battler] << 12)))) + if (!(gBattleControllerExecFlags & ((1u << battler) | (0xF << 28) | (1u << (battler + 4)) | (1u << (battler + 8)) | (1u << (battler + 12))))) { gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); } @@ -4607,7 +4600,7 @@ static void HandleTurnActionSelectionState(void) } break; case STATE_WAIT_SET_BEFORE_ACTION: - if (!(gBattleControllerExecFlags & ((gBitTable[battler]) | (0xF << 28) | (gBitTable[battler] << 4) | (gBitTable[battler] << 8) | (gBitTable[battler] << 12)))) + if (!(gBattleControllerExecFlags & ((1u << battler) | (0xF << 28) | (1u << (battler + 4)) | (1u << (battler + 8)) | (1u << (battler + 12))))) { gBattleCommunication[battler] = STATE_BEFORE_ACTION_CHOSEN; } @@ -4631,7 +4624,7 @@ static void HandleTurnActionSelectionState(void) { gBattlerAttacker = battler; gBattlescriptCurrInstr = gSelectionBattleScripts[battler]; - if (!(gBattleControllerExecFlags & ((gBitTable[battler]) | (0xF << 28) | (gBitTable[battler] << 4) | (gBitTable[battler] << 8) | (gBitTable[battler] << 12)))) + if (!(gBattleControllerExecFlags & ((1u << battler) | (0xF << 28) | (1u << (battler + 4)) | (1u << (battler + 8)) | (1u << (battler + 12))))) { gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); } @@ -4717,7 +4710,6 @@ void SwapTurnOrder(u8 id1, u8 id2) u32 GetBattlerTotalSpeedStatArgs(u32 battler, u32 ability, u32 holdEffect) { u32 speed = gBattleMons[battler].speed; - u32 highestStat = GetHighestStatId(battler); // weather abilities if (WEATHER_HAS_EFFECT) @@ -4739,10 +4731,10 @@ u32 GetBattlerTotalSpeedStatArgs(u32 battler, u32 ability, u32 holdEffect) speed *= 2; else if (ability == ABILITY_SLOW_START && gDisableStructs[battler].slowStartTimer != 0) speed /= 2; - else if (ability == ABILITY_PROTOSYNTHESIS && gBattleWeather & B_WEATHER_SUN && highestStat == STAT_SPEED) - speed = (speed * 150) / 100; - else if (ability == ABILITY_QUARK_DRIVE && gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN && highestStat == STAT_SPEED) - speed = (speed * 150) / 100; + else if (ability == ABILITY_PROTOSYNTHESIS && (gBattleWeather & B_WEATHER_SUN || gBattleStruct->boosterEnergyActivates & (1u << battler))) + speed = (GetHighestStatId(battler) == STAT_SPEED) ? (speed * 150) / 100 : speed; + else if (ability == ABILITY_QUARK_DRIVE && (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gBattleStruct->boosterEnergyActivates & (1u << battler))) + speed = (GetHighestStatId(battler) == STAT_SPEED) ? (speed * 150) / 100 : speed; // stat stages speed *= gStatStageRatios[gBattleMons[battler].statStages[STAT_SPEED]][0]; @@ -5115,6 +5107,7 @@ static void TurnValuesCleanUp(bool8 var0) if (gDisableStructs[i].rechargeTimer == 0) gBattleMons[i].status2 &= ~STATUS2_RECHARGE; } + gBattleStruct->canPickupItem &= ~(1u << i); } if (gDisableStructs[i].substituteHP == 0) @@ -5155,10 +5148,10 @@ static bool32 TryDoGimmicksBeforeMoves(void) for (i = 0; i < gBattlersCount; i++) { // Search through each battler and activate their gimmick if they have one prepared. - if ((gBattleStruct->gimmick.toActivate & gBitTable[order[i]]) && !(gProtectStructs[order[i]].noValidMoves)) + if ((gBattleStruct->gimmick.toActivate & (1u << order[i])) && !(gProtectStructs[order[i]].noValidMoves)) { battler = gBattlerAttacker = gBattleScripting.battler = order[i]; - gBattleStruct->gimmick.toActivate &= ~(gBitTable[battler]); + gBattleStruct->gimmick.toActivate &= ~(1u << battler); if (gGimmicksInfo[gBattleStruct->gimmick.usableGimmick[battler]].ActivateGimmick != NULL) { gGimmicksInfo[gBattleStruct->gimmick.usableGimmick[battler]].ActivateGimmick(battler); @@ -5184,12 +5177,12 @@ static bool32 TryDoMoveEffectsBeforeMoves(void) SortBattlersBySpeed(battlers, FALSE); for (i = 0; i < gBattlersCount; i++) { - if (!(gBattleStruct->focusPunchBattlers & gBitTable[battlers[i]]) + if (!(gBattleStruct->focusPunchBattlers & (1u << battlers[i])) && !(gBattleMons[battlers[i]].status1 & STATUS1_SLEEP) && !(gDisableStructs[battlers[i]].truantCounter) && !(gProtectStructs[battlers[i]].noValidMoves)) { - gBattleStruct->focusPunchBattlers |= gBitTable[battlers[i]]; + gBattleStruct->focusPunchBattlers |= 1u << battlers[i]; gBattlerAttacker = battlers[i]; switch (gChosenMoveByBattler[gBattlerAttacker]) { @@ -5561,7 +5554,7 @@ static void HandleEndTurn_FinishBattle(void) bool8 changedForm = FALSE; // Appeared in battle and didn't faint - if ((gBattleStruct->appearedInBattle & gBitTable[i]) && GetMonData(&gPlayerParty[i], MON_DATA_HP, NULL) != 0) + if ((gBattleStruct->appearedInBattle & (1u << i)) && GetMonData(&gPlayerParty[i], MON_DATA_HP, NULL) != 0) changedForm = TryFormChange(i, B_SIDE_PLAYER, FORM_CHANGE_END_BATTLE_TERRAIN); if (!changedForm) @@ -5620,9 +5613,14 @@ static void FreeResetData_ReturnToOvOrDoEvolutions(void) } FreeAllWindowBuffers(); - if (gBattleStruct != NULL && !(gBattleTypeFlags & BATTLE_TYPE_LINK)) + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) { - ZeroEnemyPartyMons(); + // To account for Battle Factory and Slateport Battle Tent, enemy parties are zeroed out in the facilitites respective src/xxx.c files + // The ZeroEnemyPartyMons() call happens in SaveXXXChallenge function (eg. SaveFactoryChallenge) + if (!(gBattleTypeFlags & BATTLE_TYPE_FRONTIER)) + { + ZeroEnemyPartyMons(); + } ResetDynamicAiFunc(); FreeMonSpritesGfx(); FreeBattleResources(); @@ -5636,15 +5634,15 @@ static void TryEvolvePokemon(void) for (i = 0; i < PARTY_SIZE; i++) { - if (!(sTriedEvolving & gBitTable[i])) + if (!(sTriedEvolving & (1u << i))) { u16 species = GetEvolutionTargetSpecies(&gPlayerParty[i], EVO_MODE_BATTLE_SPECIAL, i, NULL); bool32 evoModeNormal = TRUE; - sTriedEvolving |= gBitTable[i]; + sTriedEvolving |= 1u << i; - if (species == SPECIES_NONE && (gLeveledUpInBattle & gBitTable[i])) + if (species == SPECIES_NONE && (gLeveledUpInBattle & (1u << i))) { - gLeveledUpInBattle &= ~(gBitTable[i]); + gLeveledUpInBattle &= ~(1u << i); species = GetEvolutionTargetSpecies(&gPlayerParty[i], EVO_MODE_BATTLE_ONLY, gLeveledUpInBattle, NULL); } @@ -5742,8 +5740,10 @@ bool32 TrySetAteType(u32 move, u32 battlerAtk, u32 attackerAbility) break; case EFFECT_HIDDEN_POWER: case EFFECT_WEATHER_BALL: - case EFFECT_CHANGE_TYPE_ON_ITEM: case EFFECT_NATURAL_GIFT: + case EFFECT_CHANGE_TYPE_ON_ITEM: + case EFFECT_REVELATION_DANCE: + case EFFECT_TERRAIN_PULSE: return FALSE; } @@ -5776,147 +5776,244 @@ bool32 TrySetAteType(u32 move, u32 battlerAtk, u32 attackerAbility) return FALSE; } -void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk) +// Returns TYPE_NONE if type doesn't change. +// NULL can be passed to ateBoost to avoid applying ate-ability boosts when opening the summary screen in-battle. +u32 GetDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler, u8 *ateBoost) { - u32 moveType, attackerAbility; - u16 holdEffect = GetBattlerHoldEffect(battlerAtk, TRUE); + u32 moveType = gMovesInfo[move].type; + u32 moveEffect = gMovesInfo[move].effect; + u32 species, heldItem, holdEffect, ability, type1, type2, type3; if (move == MOVE_STRUGGLE) - return; + return TYPE_NORMAL; - gBattleStruct->dynamicMoveType = 0; - gBattleStruct->ateBoost[battlerAtk] = 0; - gSpecialStatuses[battlerAtk].gemBoost = FALSE; - - if (gMovesInfo[move].effect == EFFECT_WEATHER_BALL) + if (gMain.inBattle) { - if (WEATHER_HAS_EFFECT) + species = gBattleMons[battler].species; + heldItem = gBattleMons[battler].item; + holdEffect = GetBattlerHoldEffect(battler, TRUE); + ability = GetBattlerAbility(battler); + type1 = gBattleMons[battler].types[0]; + type2 = gBattleMons[battler].types[1]; + type3 = gBattleMons[battler].types[2]; + } + else + { + species = GetMonData(mon, MON_DATA_SPECIES); + heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); + holdEffect = ItemId_GetHoldEffect(heldItem); + ability = GetMonAbility(mon); + type1 = gSpeciesInfo[species].types[0]; + type2 = gSpeciesInfo[species].types[1]; + type3 = TYPE_MYSTERY; + } + + if (moveEffect == EFFECT_WEATHER_BALL) + { + if (gMain.inBattle && WEATHER_HAS_EFFECT) { if (gBattleWeather & B_WEATHER_RAIN && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA) - gBattleStruct->dynamicMoveType = TYPE_WATER | F_DYNAMIC_TYPE_SET; + return TYPE_WATER; else if (gBattleWeather & B_WEATHER_SANDSTORM) - gBattleStruct->dynamicMoveType = TYPE_ROCK | F_DYNAMIC_TYPE_SET; + return TYPE_ROCK; else if (gBattleWeather & B_WEATHER_SUN && holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA) - gBattleStruct->dynamicMoveType = TYPE_FIRE | F_DYNAMIC_TYPE_SET; - else if (gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW)) - gBattleStruct->dynamicMoveType = TYPE_ICE | F_DYNAMIC_TYPE_SET; + return TYPE_FIRE; + else if (gBattleWeather & (B_WEATHER_SNOW | B_WEATHER_HAIL)) + return TYPE_ICE; else - gBattleStruct->dynamicMoveType = TYPE_NORMAL | F_DYNAMIC_TYPE_SET; + return moveType; + } + else + { + switch (gWeatherPtr->currWeather) + { + case WEATHER_DROUGHT: + if (holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA) + return TYPE_FIRE; + break; + case WEATHER_RAIN: + case WEATHER_RAIN_THUNDERSTORM: + if (holdEffect != HOLD_EFFECT_UTILITY_UMBRELLA) + return TYPE_WATER; + break; + case WEATHER_SNOW: + return TYPE_ICE; + case WEATHER_SANDSTORM: + return TYPE_ROCK; + } + return moveType; } } - else if (gMovesInfo[move].effect == EFFECT_HIDDEN_POWER) + else if (moveEffect == EFFECT_HIDDEN_POWER) { - u8 typeBits = ((gBattleMons[battlerAtk].hpIV & 1) << 0) - | ((gBattleMons[battlerAtk].attackIV & 1) << 1) - | ((gBattleMons[battlerAtk].defenseIV & 1) << 2) - | ((gBattleMons[battlerAtk].speedIV & 1) << 3) - | ((gBattleMons[battlerAtk].spAttackIV & 1) << 4) - | ((gBattleMons[battlerAtk].spDefenseIV & 1) << 5); + u8 typeBits; + if (gMain.inBattle) + { + typeBits = ((gBattleMons[battler].hpIV & 1) << 0) + | ((gBattleMons[battler].attackIV & 1) << 1) + | ((gBattleMons[battler].defenseIV & 1) << 2) + | ((gBattleMons[battler].speedIV & 1) << 3) + | ((gBattleMons[battler].spAttackIV & 1) << 4) + | ((gBattleMons[battler].spDefenseIV & 1) << 5); + } + else + { + typeBits = ((GetMonData(mon, MON_DATA_HP_IV) & 1) << 0) + | ((GetMonData(mon, MON_DATA_ATK_IV) & 1) << 1) + | ((GetMonData(mon, MON_DATA_DEF_IV) & 1) << 2) + | ((GetMonData(mon, MON_DATA_SPEED_IV) & 1) << 3) + | ((GetMonData(mon, MON_DATA_SPATK_IV) & 1) << 4) + | ((GetMonData(mon, MON_DATA_SPDEF_IV) & 1) << 5); + } // Subtract 6 instead of 1 below because 5 types are excluded (TYPE_NONE, TYPE_NORMAL, TYPE_MYSTERY, TYPE_FAIRY and TYPE_STELLAR) // The final + 2 skips past TYPE_NONE and Normal. - gBattleStruct->dynamicMoveType = ((NUMBER_OF_MON_TYPES - 6) * typeBits) / 63 + 2; - if (gBattleStruct->dynamicMoveType >= TYPE_MYSTERY) - gBattleStruct->dynamicMoveType++; - gBattleStruct->dynamicMoveType |= F_DYNAMIC_TYPE_IGNORE_PHYSICALITY | F_DYNAMIC_TYPE_SET; + moveType = ((NUMBER_OF_MON_TYPES - 6) * typeBits) / 63 + 2; + if (moveType >= TYPE_MYSTERY) + moveType++; + return (moveType | F_DYNAMIC_TYPE_IGNORE_PHYSICALITY); } - else if (gMovesInfo[move].effect == EFFECT_CHANGE_TYPE_ON_ITEM && holdEffect == gMovesInfo[move].argument) + else if (moveEffect == EFFECT_CHANGE_TYPE_ON_ITEM && holdEffect == gMovesInfo[move].argument) { - gBattleStruct->dynamicMoveType = ItemId_GetSecondaryId(gBattleMons[battlerAtk].item) | F_DYNAMIC_TYPE_SET; + return ItemId_GetSecondaryId(heldItem); } - else if (gMovesInfo[move].effect == EFFECT_REVELATION_DANCE) + else if (moveEffect == EFFECT_REVELATION_DANCE && GetActiveGimmick(battler) != GIMMICK_Z_MOVE) { - if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA && GetBattlerTeraType(battlerAtk) != TYPE_STELLAR) - gBattleStruct->dynamicMoveType = GetBattlerTeraType(battlerAtk); - else if (gBattleMons[battlerAtk].type1 != TYPE_MYSTERY) - gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].type1 | F_DYNAMIC_TYPE_SET; - else if (gBattleMons[battlerAtk].type2 != TYPE_MYSTERY) - gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].type2 | F_DYNAMIC_TYPE_SET; - else if (gBattleMons[battlerAtk].type3 != TYPE_MYSTERY) - gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].type3 | F_DYNAMIC_TYPE_SET; + u8 teraType; + if (GetActiveGimmick(battler) == GIMMICK_TERA && ((teraType = GetMonData(mon, MON_DATA_TERA_TYPE)) != TYPE_STELLAR)) + return teraType; + else if (type1 != TYPE_MYSTERY && !(gBattleResources->flags->flags[battler] & RESOURCE_FLAG_ROOST && type1 == TYPE_FLYING)) + return type1; + else if (type2 != TYPE_MYSTERY && !(gBattleResources->flags->flags[battler] & RESOURCE_FLAG_ROOST && type2 == TYPE_FLYING)) + return type2; + else if (gBattleResources->flags->flags[battler] & RESOURCE_FLAG_ROOST) + return (B_ROOST_PURE_FLYING >= GEN_5 ? TYPE_NORMAL : TYPE_MYSTERY); + else if (type3 != TYPE_MYSTERY) + return type3; + else + return TYPE_MYSTERY; } - else if (gMovesInfo[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)) + else if (moveEffect == EFFECT_RAGING_BULL + && (species == SPECIES_TAUROS_PALDEAN_COMBAT_BREED + || species == SPECIES_TAUROS_PALDEAN_BLAZE_BREED + || species == SPECIES_TAUROS_PALDEAN_AQUA_BREED)) { - gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].type2 | F_DYNAMIC_TYPE_SET; + return type2; } - else if (gMovesInfo[move].effect == EFFECT_IVY_CUDGEL - && (gBattleMons[battlerAtk].species == SPECIES_OGERPON_WELLSPRING_MASK || gBattleMons[battlerAtk].species == SPECIES_OGERPON_WELLSPRING_MASK_TERA - || gBattleMons[battlerAtk].species == SPECIES_OGERPON_HEARTHFLAME_MASK || gBattleMons[battlerAtk].species == SPECIES_OGERPON_HEARTHFLAME_MASK_TERA - || gBattleMons[battlerAtk].species == SPECIES_OGERPON_CORNERSTONE_MASK || gBattleMons[battlerAtk].species == SPECIES_OGERPON_CORNERSTONE_MASK_TERA )) + else if (moveEffect == EFFECT_IVY_CUDGEL + && (species == SPECIES_OGERPON_WELLSPRING_MASK || species == SPECIES_OGERPON_WELLSPRING_MASK_TERA + || species == SPECIES_OGERPON_HEARTHFLAME_MASK || species == SPECIES_OGERPON_HEARTHFLAME_MASK_TERA + || species == SPECIES_OGERPON_CORNERSTONE_MASK || species == SPECIES_OGERPON_CORNERSTONE_MASK_TERA)) { - gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].type2 | F_DYNAMIC_TYPE_SET; + return type2; } - else if (gMovesInfo[move].effect == EFFECT_NATURAL_GIFT) + else if (moveEffect == EFFECT_NATURAL_GIFT) { - if (ItemId_GetPocket(gBattleMons[battlerAtk].item) == POCKET_BERRIES) - gBattleStruct->dynamicMoveType = gNaturalGiftTable[ITEM_TO_BERRY(gBattleMons[battlerAtk].item)].type; + if (ItemId_GetPocket(heldItem) == POCKET_BERRIES) + return gNaturalGiftTable[ITEM_TO_BERRY(heldItem)].type; + else + return moveType; } - else if (gMovesInfo[move].effect == EFFECT_TERRAIN_PULSE) + else if (moveEffect == EFFECT_TERRAIN_PULSE) { - if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_TERRAIN_ANY)) + if (gMain.inBattle) { - if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) - gBattleStruct->dynamicMoveType = TYPE_ELECTRIC | F_DYNAMIC_TYPE_SET; - else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN) - gBattleStruct->dynamicMoveType = TYPE_GRASS | F_DYNAMIC_TYPE_SET; - else if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN) - gBattleStruct->dynamicMoveType = TYPE_FAIRY | F_DYNAMIC_TYPE_SET; - else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN) - gBattleStruct->dynamicMoveType = TYPE_PSYCHIC | F_DYNAMIC_TYPE_SET; - else //failsafe - gBattleStruct->dynamicMoveType = TYPE_NORMAL | F_DYNAMIC_TYPE_SET; + if (IsBattlerTerrainAffected(battler, STATUS_FIELD_TERRAIN_ANY)) + { + if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN) + return TYPE_ELECTRIC; + else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN) + return TYPE_GRASS; + else if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN) + return TYPE_FAIRY; + else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN) + return TYPE_PSYCHIC; + else //failsafe + return moveType; + } + } + else + { + switch (gWeatherPtr->currWeather) + { + case WEATHER_RAIN_THUNDERSTORM: + if (B_THUNDERSTORM_TERRAIN) + return TYPE_ELECTRIC; + break; + case WEATHER_FOG_HORIZONTAL: + case WEATHER_FOG_DIAGONAL: + if (B_OVERWORLD_FOG >= GEN_8) + return TYPE_FAIRY; + break; + } + return moveType; } } - else if (gMovesInfo[move].effect == EFFECT_TERA_BLAST && GetActiveGimmick(battlerAtk) == GIMMICK_TERA) + else if (moveEffect == EFFECT_TERA_BLAST && GetActiveGimmick(battler) == GIMMICK_TERA) { - gBattleStruct->dynamicMoveType = GetBattlerTeraType(battlerAtk) | F_DYNAMIC_TYPE_SET; + return GetMonData(mon, MON_DATA_TERA_TYPE); } - else if (gMovesInfo[move].effect == EFFECT_TERA_STARSTORM && gBattleMons[battlerAtk].species == SPECIES_TERAPAGOS_STELLAR) + else if (moveEffect == EFFECT_TERA_STARSTORM && species == SPECIES_TERAPAGOS_STELLAR) { - gBattleStruct->dynamicMoveType = TYPE_STELLAR | F_DYNAMIC_TYPE_SET; + return TYPE_STELLAR; } - attackerAbility = GetBattlerAbility(battlerAtk); - if (gMovesInfo[move].type == TYPE_NORMAL - && TrySetAteType(move, battlerAtk, attackerAbility) - && GetActiveGimmick(battlerAtk) != GIMMICK_DYNAMAX) + if (moveType == TYPE_NORMAL + && ((!gMain.inBattle || TrySetAteType(move, battler, ability)) + && GetActiveGimmick(battler) != GIMMICK_DYNAMAX)) { - gBattleStruct->ateBoost[battlerAtk] = 1; + if (gMain.inBattle && ateBoost != NULL) + *ateBoost = TRUE; } - else if (gMovesInfo[move].type != TYPE_NORMAL - && gMovesInfo[move].effect != EFFECT_HIDDEN_POWER - && gMovesInfo[move].effect != EFFECT_WEATHER_BALL - && attackerAbility == ABILITY_NORMALIZE - && GetActiveGimmick(battlerAtk) != GIMMICK_Z_MOVE) + else if (moveType != TYPE_NORMAL + && moveEffect != EFFECT_HIDDEN_POWER + && moveEffect != EFFECT_WEATHER_BALL + && ability == ABILITY_NORMALIZE + && GetActiveGimmick(battler) != GIMMICK_Z_MOVE) { - gBattleStruct->dynamicMoveType = TYPE_NORMAL | F_DYNAMIC_TYPE_SET; - if (GetActiveGimmick(battlerAtk) != GIMMICK_DYNAMAX) - gBattleStruct->ateBoost[battlerAtk] = 1; + if (gMain.inBattle && ateBoost != NULL && GetActiveGimmick(battler) != GIMMICK_DYNAMAX) + *ateBoost = TRUE; + return TYPE_NORMAL; } - else if (gMovesInfo[move].soundMove && attackerAbility == ABILITY_LIQUID_VOICE) + else if (gMovesInfo[move].soundMove && ability == ABILITY_LIQUID_VOICE) { - gBattleStruct->dynamicMoveType = TYPE_WATER | F_DYNAMIC_TYPE_SET; + return TYPE_WATER; } - else if (gMovesInfo[move].effect == EFFECT_AURA_WHEEL && gBattleMons[battlerAtk].species == SPECIES_MORPEKO_HANGRY) + else if (moveEffect == EFFECT_AURA_WHEEL && species == SPECIES_MORPEKO_HANGRY) { - gBattleStruct->dynamicMoveType = TYPE_DARK | F_DYNAMIC_TYPE_SET; + return TYPE_DARK; } - GET_MOVE_TYPE(move, moveType); + return TYPE_NONE; +} + +void SetTypeBeforeUsingMove(u32 move, u32 battler) +{ + u32 moveType; + u32 heldItem = gBattleMons[battler].item; + u32 holdEffect = GetBattlerHoldEffect(battler, TRUE); + + gBattleStruct->dynamicMoveType = 0; + gBattleStruct->ateBoost[battler] = FALSE; + gSpecialStatuses[battler].gemBoost = FALSE; + + moveType = GetDynamicMoveType(&GetBattlerParty(battler)[gBattlerPartyIndexes[battler]], + move, + battler, + &gBattleStruct->ateBoost[battler]); + if (moveType != TYPE_NONE) + gBattleStruct->dynamicMoveType = moveType | F_DYNAMIC_TYPE_SET; + + moveType = GetMoveType(move); if ((gFieldStatuses & STATUS_FIELD_ION_DELUGE && moveType == TYPE_NORMAL) - || gStatuses4[battlerAtk] & STATUS4_ELECTRIFIED) + || gStatuses4[battler] & STATUS4_ELECTRIFIED) gBattleStruct->dynamicMoveType = TYPE_ELECTRIC | F_DYNAMIC_TYPE_SET; // Check if a gem should activate. - GET_MOVE_TYPE(move, moveType); - if (holdEffect == HOLD_EFFECT_GEMS - && moveType == ItemId_GetSecondaryId(gBattleMons[battlerAtk].item)) + if (holdEffect == HOLD_EFFECT_GEMS && GetMoveType(move) == ItemId_GetSecondaryId(heldItem)) { - gSpecialStatuses[battlerAtk].gemParam = GetBattlerHoldEffectParam(battlerAtk); - gSpecialStatuses[battlerAtk].gemBoost = TRUE; + gSpecialStatuses[battler].gemParam = GetBattlerHoldEffectParam(battler); + gSpecialStatuses[battler].gemBoost = TRUE; } } diff --git a/src/battle_message.c b/src/battle_message.c index 87ac5326fb..727091cec6 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -547,7 +547,7 @@ static const u8 sText_TargetIdentified[] = _("{B_DEF_NAME_WITH_PREFIX} was\niden static const u8 sText_TargetWokeUp[] = _("{B_DEF_NAME_WITH_PREFIX} woke up!"); static const u8 sText_PkmnStoleAndAteItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole and\nate {B_DEF_NAME_WITH_PREFIX}'s {B_LAST_ITEM}!"); static const u8 sText_TailWindBlew[] = _("The tailwind blew from\nbehind {B_ATK_TEAM2} team!"); -static const u8 sText_PkmnWentBack[] = _("{B_ATK_NAME_WITH_PREFIX} went back\nto {B_ATK_TRAINER_CLASS} {B_ATK_TRAINER_NAME}"); +static const u8 sText_PkmnWentBack[] = _("{B_ATK_NAME_WITH_PREFIX} went back\nto {B_ATK_TRAINER_NAME}!"); static const u8 sText_PkmnCantUseItemsAnymore[] = _("{B_DEF_NAME_WITH_PREFIX} can't use\nitems anymore!"); static const u8 sText_PkmnFlung[] = _("{B_ATK_NAME_WITH_PREFIX} flung its\n{B_LAST_ITEM}!"); static const u8 sText_PkmnPreventedFromHealing[] = _("{B_DEF_NAME_WITH_PREFIX} was prevented\nfrom healing!"); @@ -606,7 +606,6 @@ static const u8 sText_TargetAbilityRaisedStat[] = _("{B_DEF_NAME_WITH_PREFIX}'s static const u8 sText_TargetAbilityLoweredStat[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nlowered its {B_BUFF1}!"); static const u8 sText_AttackerAbilityRaisedStat[] = _("{B_ATK_NAME_WITH_PREFIX}'s {B_ATK_ABILITY}\nraised its {B_BUFF1}!"); static const u8 sText_ScriptingAbilityRaisedStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nraised its {B_BUFF1}!"); -static const u8 sText_AuroraVeilEnds[] = _("{B_DEF_NAME_WITH_PREFIX}'s {B_DEF_ABILITY}\nwore off!"); static const u8 sText_ElectricTerrainEnds[] = _("The electricity disappeared\nfrom the battlefield."); static const u8 sText_MistyTerrainEnds[] = _("The mist disappeared\nfrom the battlefield."); static const u8 sText_PsychicTerrainEnds[] = _("The weirdness disappeared\nfrom the battlefield."); @@ -849,9 +848,11 @@ static const u8 sText_ShedItsTail[] = _("{B_ATK_NAME_WITH_PREFIX} shed its tail\ static const u8 sText_PkmnTerastallizedInto[] = _("{B_ATK_NAME_WITH_PREFIX} terastallized\ninto the {B_BUFF1} type!"); static const u8 sText_SupersweetAromaWafts[] = _("A supersweet aroma is wafting from\nthe syrup covering {B_ATK_NAME_WITH_PREFIX}!"); static const u8 sText_TidyingUpComplete[] = _("Tidying up complete!"); +static const u8 sText_FickleBeamDoubled[] = _("{B_ATK_NAME_WITH_PREFIX} is going all\nout for this attack!"); const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = { + [STRINGID_FICKLEBEAMDOUBLED - BATTLESTRINGS_TABLE_START] = sText_FickleBeamDoubled, [STRINGID_PKMNTERASTALLIZEDINTO - BATTLESTRINGS_TABLE_START] = sText_PkmnTerastallizedInto, [STRINGID_TIDYINGUPCOMPLETE - BATTLESTRINGS_TABLE_START] = sText_TidyingUpComplete, [STRINGID_SUPERSWEETAROMAWAFTS - BATTLESTRINGS_TABLE_START] = sText_SupersweetAromaWafts, @@ -1440,7 +1441,6 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_WATERSPORTENDS - BATTLESTRINGS_TABLE_START] = sText_WaterSportEnds, [STRINGID_GRAVITYENDS - BATTLESTRINGS_TABLE_START] = sText_GravityEnds, [STRINGID_AQUARINGHEAL - BATTLESTRINGS_TABLE_START] = sText_AquaRingHeal, - [STRINGID_AURORAVEILENDS - BATTLESTRINGS_TABLE_START] = sText_AuroraVeilEnds, [STRINGID_ELECTRICTERRAINENDS - BATTLESTRINGS_TABLE_START] = sText_ElectricTerrainEnds, [STRINGID_MISTYTERRAINENDS - BATTLESTRINGS_TABLE_START] = sText_MistyTerrainEnds, [STRINGID_PSYCHICTERRAINENDS - BATTLESTRINGS_TABLE_START] = sText_PsychicTerrainEnds, @@ -2826,7 +2826,7 @@ void BufferStringBattle(u16 stringID, u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY) stringPtr = sText_LegendaryPkmnAppeared; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)]])) + else if (IsDoubleBattle() && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)]])) stringPtr = sText_TwoWildPkmnAppeared; else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) stringPtr = sText_WildPkmnAppearedPause; @@ -2837,7 +2837,7 @@ void BufferStringBattle(u16 stringID, u32 battler) case STRINGID_INTROSENDOUT: // poke first send-out if (GetBattlerSide(battler) == B_SIDE_PLAYER) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsValidForBattle(&gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]])) + if (IsDoubleBattle() && IsValidForBattle(&gPlayerParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]])) { if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) stringPtr = sText_InGamePartnerSentOutZGoN; @@ -2855,7 +2855,7 @@ void BufferStringBattle(u16 stringID, u32 battler) } else { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]])) + if (IsDoubleBattle() && IsValidForBattle(&gEnemyParty[gBattlerPartyIndexes[BATTLE_PARTNER(battler)]])) { if (BATTLE_TWO_VS_ONE_OPPONENT) stringPtr = sText_Trainer1SentOutTwoPkmn; @@ -2886,7 +2886,7 @@ void BufferStringBattle(u16 stringID, u32 battler) { if (*(&gBattleStruct->hpScale) == 0) stringPtr = sText_PkmnThatsEnough; - else if (*(&gBattleStruct->hpScale) == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (*(&gBattleStruct->hpScale) == 1 || IsDoubleBattle()) stringPtr = sText_PkmnComeBack; else if (*(&gBattleStruct->hpScale) == 2) stringPtr = sText_PkmnOkComeBack; @@ -2911,7 +2911,7 @@ void BufferStringBattle(u16 stringID, u32 battler) case STRINGID_SWITCHINMON: // switch-in msg if (GetBattlerSide(gBattleScripting.battler) == B_SIDE_PLAYER) { - if (*(&gBattleStruct->hpScale) == 0 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (*(&gBattleStruct->hpScale) == 0 || IsDoubleBattle()) stringPtr = sText_GoPkmn2; else if (*(&gBattleStruct->hpScale) == 1) stringPtr = sText_DoItPkmn; @@ -3091,14 +3091,9 @@ static const u8 *TryGetStatusString(u8 *src) static void GetBattlerNick(u32 battler, u8 *dst) { - struct Pokemon *mon, *illusionMon; + struct Pokemon *illusionMon = GetIllusionMonPtr(battler); + struct Pokemon *mon = GetPartyBattlerData(battler); - if (GetBattlerSide(battler) == B_SIDE_PLAYER) - mon = &gPlayerParty[gBattlerPartyIndexes[battler]]; - else - mon = &gEnemyParty[gBattlerPartyIndexes[battler]]; - - illusionMon = GetIllusionMonPtr(battler); if (illusionMon != NULL) mon = illusionMon; GetMonData(mon, MON_DATA_NICKNAME, dst); diff --git a/src/battle_palace.c b/src/battle_palace.c index a521acea2b..fdcb8d3903 100644 --- a/src/battle_palace.c +++ b/src/battle_palace.c @@ -180,6 +180,7 @@ static void IncrementPalaceStreak(void) static void SavePalaceChallenge(void) { + ClearEnemyPartyAfterChallenge(); gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; diff --git a/src/battle_pike.c b/src/battle_pike.c index 3869531d20..3ce3cd443a 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -707,6 +707,7 @@ static void ClearInWildMonRoom(void) static void SavePikeChallenge(void) { + ClearEnemyPartyAfterChallenge(); gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index ce7a0526f2..a184c9160f 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -2,6 +2,7 @@ #include "battle_pyramid.h" #include "battle_pyramid_bag.h" #include "event_data.h" +#include "frontier_util.h" #include "battle.h" #include "battle_setup.h" #include "battle_tower.h" @@ -936,6 +937,7 @@ static void SetBattlePyramidData(void) static void SavePyramidChallenge(void) { + ClearEnemyPartyAfterChallenge(); gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; @@ -1081,7 +1083,7 @@ static void ShowPostBattleHintText(void) textIndex = sPyramidFloorTemplates[id].numTrainers; for (i = 0; i < MAX_PYRAMID_TRAINERS; i++) { - if (gBitTable[i] & gSaveBlock2Ptr->frontier.pyramidTrainerFlags) + if ((1u << i) & gSaveBlock2Ptr->frontier.pyramidTrainerFlags) textIndex--; } i = 1; @@ -1317,7 +1319,7 @@ u16 LocalIdToPyramidTrainerId(u8 localId) bool8 GetBattlePyramidTrainerFlag(u8 eventId) { - return gSaveBlock2Ptr->frontier.pyramidTrainerFlags & gBitTable[gObjectEvents[eventId].localId - 1]; + return gSaveBlock2Ptr->frontier.pyramidTrainerFlags & ((1u << gObjectEvents[eventId].localId) - 1); } void MarkApproachingPyramidTrainersAsBattled(void) @@ -1337,7 +1339,7 @@ static void MarkPyramidTrainerAsBattled(u16 trainerId) for (i = 0; i < MAX_PYRAMID_TRAINERS; i++) { if (gSaveBlock2Ptr->frontier.trainerIds[i] == trainerId) - gSaveBlock2Ptr->frontier.pyramidTrainerFlags |= gBitTable[i]; + gSaveBlock2Ptr->frontier.pyramidTrainerFlags |= 1u << i; } gObjectEvents[gSelectedObjectEvent].movementType = MOVEMENT_TYPE_WANDER_AROUND; @@ -1893,12 +1895,12 @@ static void SetPyramidObjectPositionsUniformly(u8 objType) { if (bits & 1) { - if (!(gBitTable[squareId] & gSaveBlock2Ptr->frontier.pyramidRandoms[3])) + if (!((1u << squareId) & gSaveBlock2Ptr->frontier.pyramidRandoms[3])) bits |= 2; } else { - if (gBitTable[squareId] & gSaveBlock2Ptr->frontier.pyramidRandoms[3]) + if ((1u << squareId) & gSaveBlock2Ptr->frontier.pyramidRandoms[3]) bits |= 2; } if (++squareId >= NUM_PYRAMID_FLOOR_SQUARES) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index f25cef9cf5..283f42a23b 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1160,8 +1160,8 @@ bool32 ProteanTryChangeType(u32 battler, u32 ability, u32 move, u32 moveType) { if ((ability == ABILITY_PROTEAN || ability == ABILITY_LIBERO) && !gDisableStructs[gBattlerAttacker].usedProteanLibero - && (gBattleMons[battler].type1 != moveType || gBattleMons[battler].type2 != moveType - || (gBattleMons[battler].type3 != moveType && gBattleMons[battler].type3 != TYPE_MYSTERY)) + && (gBattleMons[battler].types[0] != moveType || gBattleMons[battler].types[1] != moveType + || (gBattleMons[battler].types[2] != moveType && gBattleMons[battler].types[2] != TYPE_MYSTERY)) && move != MOVE_STRUGGLE && GetActiveGimmick(battler) != GIMMICK_TERA) { @@ -1173,7 +1173,7 @@ bool32 ProteanTryChangeType(u32 battler, u32 ability, u32 move, u32 moveType) bool32 ShouldTeraShellDistortTypeMatchups(u32 move, u32 battlerDef) { - if (!(gBattleStruct->distortedTypeMatchups & gBitTable[battlerDef]) + if (!(gBattleStruct->distortedTypeMatchups & (1u << battlerDef)) && GetBattlerAbility(battlerDef) == ABILITY_TERA_SHELL && gBattleMons[battlerDef].species == SPECIES_TERAPAGOS_TERASTAL && !IS_MOVE_STATUS(move) @@ -1193,9 +1193,9 @@ static void Cmd_attackcanceler(void) { CMD_ARGS(); - s32 i, moveType; + s32 i; u16 attackerAbility = GetBattlerAbility(gBattlerAttacker); - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); // Weight-based moves are blocked by Dynamax. if ((GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX) && IsMoveBlockedByDynamax(gCurrentMove)) @@ -1240,10 +1240,10 @@ static void Cmd_attackcanceler(void) } if (gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_OFF - && GetBattlerAbility(gBattlerAttacker) == ABILITY_PARENTAL_BOND - && IsMoveAffectedByParentalBond(gCurrentMove, gBattlerAttacker) - && !(gAbsentBattlerFlags & gBitTable[gBattlerTarget]) - && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE) + && GetBattlerAbility(gBattlerAttacker) == ABILITY_PARENTAL_BOND + && IsMoveAffectedByParentalBond(gCurrentMove, gBattlerAttacker) + && !(gAbsentBattlerFlags & (1u << gBattlerTarget)) + && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE) { gSpecialStatuses[gBattlerAttacker].parentalBondState = PARENTAL_BOND_1ST_HIT; gMultiHitCounter = 2; @@ -1284,16 +1284,40 @@ static void Cmd_attackcanceler(void) if (!(gHitMarker & HITMARKER_OBEYS) && !(gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)) { - switch (IsMonDisobedient()) + switch (gBattleStruct->obedienceResult) { - case 0: + case OBEYS: break; - case 2: + case DISOBEYS_LOAFS: + // Randomly select, then print a disobedient string + // B_MSG_LOAFING, B_MSG_WONT_OBEY, B_MSG_TURNED_AWAY, or B_MSG_PRETEND_NOT_NOTICE + gBattleCommunication[MULTISTRING_CHOOSER] = MOD(Random(), NUM_LOAF_STRINGS); + gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround; + gMoveResultFlags |= MOVE_RESULT_MISSED; + return; + case DISOBEYS_HITS_SELF: + gBattlerTarget = gBattlerAttacker; + gBattleMoveDamage = CalculateMoveDamage(MOVE_NONE, gBattlerAttacker, gBattlerAttacker, TYPE_MYSTERY, 40, FALSE, FALSE, TRUE); + gBattlescriptCurrInstr = BattleScript_IgnoresAndHitsItself; + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; gHitMarker |= HITMARKER_OBEYS; return; - default: + case DISOBEYS_FALL_ASLEEP: + gBattlescriptCurrInstr = BattleScript_IgnoresAndFallsAsleep; gMoveResultFlags |= MOVE_RESULT_MISSED; return; + case DISOBEYS_WHILE_ASLEEP: + gBattlescriptCurrInstr = BattleScript_IgnoresWhileAsleep; + gMoveResultFlags |= MOVE_RESULT_MISSED; + return; + case DISOBEYS_RANDOM_MOVE: + gCalledMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; + SetAtkCancellerForCalledMove(); + gBattlescriptCurrInstr = BattleScript_IgnoresAndUsesRandomMove; + gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); + gHitMarker |= HITMARKER_DISOBEDIENT_MOVE; + gHitMarker |= HITMARKER_OBEYS; + return; } } @@ -1364,9 +1388,8 @@ static void Cmd_attackcanceler(void) } // Z-moves and Max Moves bypass protection, but deal reduced damage (factored in AccumulateOtherModifiers) - if ((IsZMove(gCurrentMove) - || IsMaxMove(gCurrentMove)) - && IS_BATTLER_PROTECTED(gBattlerTarget)) + if ((IsZMove(gCurrentMove) || IsMaxMove(gCurrentMove)) + && IS_BATTLER_PROTECTED(gBattlerTarget)) { BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_CouldntFullyProtect; @@ -1492,14 +1515,14 @@ static bool32 AccuracyCalcHelper(u16 move) return TRUE; } // 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)) + else if (GetBattlerAbility(gBattlerAttacker) == ABILITY_NO_GUARD && (gMovesInfo[move].effect != EFFECT_SKY_DROP || gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF)) { if (!JumpIfMoveFailed(7, move)) RecordAbilityBattle(gBattlerAttacker, ABILITY_NO_GUARD); return TRUE; } // If the target has the ability No Guard and they aren't involved in a Sky Drop or the current move isn't Sky Drop, move hits. - else if (GetBattlerAbility(gBattlerTarget) == ABILITY_NO_GUARD && (move != MOVE_SKY_DROP || gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF)) + else if (GetBattlerAbility(gBattlerTarget) == ABILITY_NO_GUARD && (gMovesInfo[move].effect != EFFECT_SKY_DROP || gBattleStruct->skyDropTargets[gBattlerTarget] == 0xFF)) { if (!JumpIfMoveFailed(7, move)) RecordAbilityBattle(gBattlerTarget, ABILITY_NO_GUARD); @@ -1689,7 +1712,6 @@ u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u8 *failInstr, u16 move) { - u32 type; u32 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, move); u32 abilityAtk = GetBattlerAbility(gBattlerAttacker); u32 abilityDef = GetBattlerAbility(gBattlerTarget); @@ -1706,6 +1728,13 @@ static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u gBattlescriptCurrInstr = failInstr; else if (!JumpIfMoveAffectedByProtect(gCurrentMove)) gBattlescriptCurrInstr = nextInstr; + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX) + { + if (gProtectStructs[gBattlerTarget].maxGuarded) + gBattlescriptCurrInstr = nextInstr; + else + AbilityBattleEffects(ABILITYEFFECT_ABSORBING, gBattlerTarget, 0, 0, gCurrentMove); + } } else if (gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_2ND_HIT || (gSpecialStatuses[gBattlerAttacker].multiHitOn @@ -1718,8 +1747,8 @@ static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u else { u32 accuracy; + u32 type = GetMoveType(move); - GET_MOVE_TYPE(move, type); if (JumpIfMoveAffectedByProtect(move)) return; if (AccuracyCalcHelper(move)) @@ -1753,7 +1782,7 @@ static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u return; } - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && + if (IsDoubleBattle() && (moveTarget == MOVE_TARGET_BOTH || moveTarget == MOVE_TARGET_FOES_AND_ALLY)) gBattleCommunication[MISS_TYPE] = B_MSG_AVOIDED_ATK; else @@ -1849,7 +1878,7 @@ static void Cmd_ppreduce(void) if (ShouldTeraShellDistortTypeMatchups(gCurrentMove, gBattlerTarget)) { - gBattleStruct->distortedTypeMatchups |= gBitTable[gBattlerTarget]; + gBattleStruct->distortedTypeMatchups |= 1u << gBattlerTarget; gBattlerAbility = gBattlerTarget; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_TeraShellDistortingTypeMatchups; @@ -1959,9 +1988,7 @@ static void Cmd_damagecalc(void) { CMD_ARGS(); - u8 moveType; - - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); if (gMovesInfo[gCurrentMove].effect == EFFECT_SHELL_SIDE_ARM) gBattleStruct->swapDamageCategory = (gBattleStruct->shellSideArmCategory[gBattlerAttacker][gBattlerTarget] != gMovesInfo[gCurrentMove].category); gBattleMoveDamage = CalculateMoveDamage(gCurrentMove, gBattlerAttacker, gBattlerTarget, moveType, 0, gIsCriticalHit, TRUE, TRUE); @@ -1972,9 +1999,7 @@ static void Cmd_typecalc(void) { CMD_ARGS(); - u8 moveType; - - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); CalcTypeEffectivenessMultiplier(gCurrentMove, moveType, gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerTarget), TRUE); gBattlescriptCurrInstr = cmd->nextInstr; @@ -1985,17 +2010,15 @@ static void Cmd_adjustdamage(void) CMD_ARGS(); u8 holdEffect, param; - u32 moveType; u32 affectionScore = GetBattlerAffectionHearts(gBattlerTarget); u32 rand = Random() % 100; - - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); if (DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove)) goto END; if (DoesDisguiseBlockMove(gBattlerTarget, gCurrentMove)) { - gBattleStruct->enduredDamage |= gBitTable[gBattlerTarget]; + gBattleStruct->enduredDamage |= 1u << gBattlerTarget; goto END; } if (GetBattlerAbility(gBattlerTarget) == ABILITY_ICE_FACE && IS_MOVE_PHYSICAL(gCurrentMove) && gBattleMons[gBattlerTarget].species == SPECIES_EISCUE) @@ -2049,7 +2072,7 @@ static void Cmd_adjustdamage(void) // Handle reducing the dmg to 1 hp. gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1; - gBattleStruct->enduredDamage |= gBitTable[gBattlerTarget]; + gBattleStruct->enduredDamage |= 1u << gBattlerTarget; if (gProtectStructs[gBattlerTarget].endured) { @@ -2077,7 +2100,7 @@ END: gBattlescriptCurrInstr = cmd->nextInstr; if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && gBattleMoveDamage >= 1) - gSpecialStatuses[gBattlerAttacker].damagedMons |= gBitTable[gBattlerTarget]; + gSpecialStatuses[gBattlerAttacker].damagedMons |= (1 << (gBattlerTarget)); // Check gems and damage reducing berries. if (gSpecialStatuses[gBattlerTarget].berryReduced @@ -2152,7 +2175,7 @@ static void Cmd_multihitresultmessage(void) if (gSpecialStatuses[gBattlerTarget].berryReduced && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) { - gBattleStruct->ateBerry[gBattlerTarget & BIT_SIDE] |= gBitTable[gBattlerPartyIndexes[gBattlerTarget]]; + gBattleStruct->ateBerry[gBattlerTarget & BIT_SIDE] |= 1u << gBattlerPartyIndexes[gBattlerTarget]; gSpecialStatuses[gBattlerTarget].berryReduced = FALSE; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_PrintBerryReduceString; @@ -2173,7 +2196,7 @@ static void Cmd_attackanimation(void) && gCurrentMove != MOVE_SUBSTITUTE && gCurrentMove != MOVE_ALLY_SWITCH // In a wild double battle gotta use the teleport animation if two wild pokemon are alive. - && !(gCurrentMove == MOVE_TELEPORT && WILD_DOUBLE_BATTLE && GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT && IsBattlerAlive(BATTLE_PARTNER(gBattlerAttacker)))) + && !(gMovesInfo[gCurrentMove].effect == EFFECT_TELEPORT && WILD_DOUBLE_BATTLE && GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT && IsBattlerAlive(BATTLE_PARTNER(gBattlerAttacker)))) { BattleScriptPush(cmd->nextInstr); gBattlescriptCurrInstr = BattleScript_Pausex20; @@ -2505,7 +2528,7 @@ static void Cmd_resultmessage(void) if (gMoveResultFlags & MOVE_RESULT_MISSED && (!(gMoveResultFlags & MOVE_RESULT_DOESNT_AFFECT_FOE) || gBattleCommunication[MISS_TYPE] > B_MSG_AVOIDED_ATK)) { if (gBattleCommunication[MISS_TYPE] > B_MSG_AVOIDED_ATK) // Wonder Guard or Levitate - show the ability pop-up - CreateAbilityPopUp(gBattlerTarget, gBattleMons[gBattlerTarget].ability, (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) != 0); + CreateAbilityPopUp(gBattlerTarget, gBattleMons[gBattlerTarget].ability, (IsDoubleBattle()) != 0); stringId = gMissStringIds[gBattleCommunication[MISS_TYPE]]; gBattleCommunication[MSG_DISPLAY] = 1; } @@ -2613,7 +2636,7 @@ static void Cmd_resultmessage(void) if (gSpecialStatuses[gBattlerTarget].berryReduced && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) { - gBattleStruct->ateBerry[gBattlerTarget & BIT_SIDE] |= gBitTable[gBattlerPartyIndexes[gBattlerTarget]]; + gBattleStruct->ateBerry[gBattlerTarget & BIT_SIDE] |= 1u << gBattlerPartyIndexes[gBattlerTarget]; gSpecialStatuses[gBattlerTarget].berryReduced = FALSE; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_PrintBerryReduceString; @@ -2937,8 +2960,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) if (B_STATUS_TYPE_IMMUNITY == GEN_1) { - u8 moveType = 0; - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); if (primary == FALSE && certain == FALSE && IS_BATTLER_OF_TYPE(gEffectBattler, moveType)) break; } @@ -2951,8 +2973,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) case STATUS1_FREEZE: if (B_STATUS_TYPE_IMMUNITY == GEN_1) { - u8 moveType = 0; - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); if (primary == FALSE && certain == FALSE && IS_BATTLER_OF_TYPE(gEffectBattler, moveType)) break; } @@ -2991,8 +3012,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) } if (B_STATUS_TYPE_IMMUNITY == GEN_1) { - u8 moveType = 0; - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); if (primary == FALSE && certain == FALSE && IS_BATTLER_OF_TYPE(gEffectBattler, moveType)) break; } @@ -3062,8 +3082,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) case STATUS1_FROSTBITE: if (B_STATUS_TYPE_IMMUNITY == GEN_1) { - u8 moveType = 0; - GET_MOVE_TYPE(gCurrentMove, moveType); + u32 moveType = GetMoveType(gCurrentMove); if (primary == FALSE && certain == FALSE && IS_BATTLER_OF_TYPE(gEffectBattler, moveType)) break; } @@ -3503,7 +3522,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) && GetBattlerAbility(BATTLE_PARTNER(gBattlerTarget)) != ABILITY_MAGIC_GUARD) { gBattleScripting.savedBattler = BATTLE_PARTNER(gBattlerTarget); - gBattleMoveDamage = gBattleMons[BATTLE_PARTNER(gBattlerTarget)].hp / 16; + gBattleMoveDamage = gBattleMons[BATTLE_PARTNER(gBattlerTarget)].maxHP / 16; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; gBattlescriptCurrInstr = BattleScript_MoveEffectFlameBurst; @@ -3542,7 +3561,7 @@ void SetMoveEffect(bool32 primary, bool32 certain) { bool32 byTwo = FALSE; - gBattleStruct->stolenStats[0] |= gBitTable[i]; + gBattleStruct->stolenStats[0] |= (1 << (i)); // Store by how many stages to raise the stat. gBattleStruct->stolenStats[i] = gBattleMons[gBattlerTarget].statStages[i] - DEFAULT_STAT_STAGE; while (gBattleMons[gBattlerAttacker].statStages[i] + gBattleStruct->stolenStats[i] > MAX_STAT_STAGE) @@ -3957,7 +3976,7 @@ static void Cmd_tryfaintmon(void) destinyBondBattler = gBattlerAttacker; faintScript = BattleScript_FaintTarget; } - if (!(gAbsentBattlerFlags & gBitTable[battler]) + if (!(gAbsentBattlerFlags & (1u << battler)) && !IsBattlerAlive(battler)) { gHitMarker |= HITMARKER_FAINTED(battler); @@ -4255,7 +4274,7 @@ static void Cmd_getexp(void) else { gBattleScripting.getexpState++; - gBattleStruct->givenExpMons |= gBitTable[gBattlerPartyIndexes[gBattlerFainted]]; + gBattleStruct->givenExpMons |= (1u << gBattlerPartyIndexes[gBattlerFainted]); } break; case 1: // calculate experience points to redistribute @@ -4272,25 +4291,25 @@ static void Cmd_getexp(void) { if (!IsValidForBattle(&gPlayerParty[i])) continue; - if (gBitTable[i] & sentInBits) + if ((1u << i) & sentInBits) viaSentIn++; holdEffect = GetMonHoldEffect(&gPlayerParty[i]); if (holdEffect == HOLD_EFFECT_EXP_SHARE || IsGen6ExpShareEnabled()) { - expShareBits |= gBitTable[i]; + expShareBits |= 1u << i; viaExpShare++; } } // Get order of mons getting exp: 1. all mons via sent in, 2. all mons via exp share for (i = 0; i < PARTY_SIZE; i++) { - if (gBitTable[i] & sentInBits) + if ((1u << i) & sentInBits) gBattleStruct->expGettersOrder[orderId++] = i; } for (i = 0; i < PARTY_SIZE; i++) { - if (!(gBitTable[i] & sentInBits) && gBitTable[i] & expShareBits) + if (!((1u << i) & sentInBits) && (1u << i) & expShareBits) gBattleStruct->expGettersOrder[orderId++] = i; } if (orderId < PARTY_SIZE) @@ -4342,7 +4361,7 @@ static void Cmd_getexp(void) case 2: // set exp value to the poke in expgetter_id and print message if (gBattleControllerExecFlags == 0) { - bool32 wasSentOut = ((gBattleStruct->expSentInMons & gBitTable[*expMonId]) != 0); + bool32 wasSentOut = (gBattleStruct->expSentInMons & (1u << *expMonId)) != 0; holdEffect = GetMonHoldEffect(&gPlayerParty[*expMonId]); if ((holdEffect != HOLD_EFFECT_EXP_SHARE && !wasSentOut && !IsGen6ExpShareEnabled()) @@ -4363,7 +4382,7 @@ static void Cmd_getexp(void) { // Music change in a wild battle after fainting opposing pokemon. if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) - && (gBattleMons[0].hp || (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattleMons[2].hp)) + && (gBattleMons[0].hp || (IsDoubleBattle() && gBattleMons[2].hp)) && !IsBattlerAlive(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) && !IsBattlerAlive(GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)) && !gBattleStruct->wildVictorySong) @@ -4414,13 +4433,13 @@ static void Cmd_getexp(void) } // get exp getter battler - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { - if (gBattlerPartyIndexes[2] == *expMonId && !(gAbsentBattlerFlags & gBitTable[2])) + if (gBattlerPartyIndexes[2] == *expMonId && !(gAbsentBattlerFlags & 4)) gBattleStruct->expGetterBattlerId = 2; else { - if (!(gAbsentBattlerFlags & gBitTable[0])) + if (!(gAbsentBattlerFlags & 1)) gBattleStruct->expGetterBattlerId = 0; else gBattleStruct->expGetterBattlerId = 2; @@ -4486,7 +4505,7 @@ static void Cmd_getexp(void) PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 3, GetMonData(&gPlayerParty[*expMonId], MON_DATA_LEVEL)); BattleScriptPushCursor(); - gLeveledUpInBattle |= gBitTable[*expMonId]; + gLeveledUpInBattle |= 1 << *expMonId; gBattlescriptCurrInstr = BattleScript_LevelUp; gBattleMoveDamage = T1_READ_32(&gBattleResources->bufferB[expBattler][2]); AdjustFriendship(&gPlayerParty[*expMonId], FRIENDSHIP_EVENT_GROW_LEVEL); @@ -4494,7 +4513,7 @@ static void Cmd_getexp(void) // update battle mon structure after level up if (gBattlerPartyIndexes[0] == *expMonId && gBattleMons[0].hp) battler = 0; - else if (gBattlerPartyIndexes[2] == *expMonId && gBattleMons[2].hp && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + else if (gBattlerPartyIndexes[2] == *expMonId && gBattleMons[2].hp && (IsDoubleBattle())) battler = 2; if (battler != 0xFF) @@ -4559,7 +4578,7 @@ bool32 NoAliveMonsForPlayer(void) for (i = 0; i < maxI; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) - && (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->arenaLostPlayerMons & gBitTable[i]))) + && (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->arenaLostPlayerMons & (1u << i)))) { HP_count += GetMonData(&gPlayerParty[i], MON_DATA_HP); } @@ -4577,7 +4596,7 @@ static bool32 NoAliveMonsForOpponent(void) for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES) && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG) - && (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->arenaLostOpponentMons & gBitTable[i]))) + && (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !(gBattleStruct->arenaLostOpponentMons & (1u << i)))) { HP_count += GetMonData(&gEnemyParty[i], MON_DATA_HP); } @@ -5067,8 +5086,8 @@ static void Cmd_setroost(void) CMD_ARGS(); gBattleResources->flags->flags[gBattlerAttacker] |= RESOURCE_FLAG_ROOST; - gBattleStruct->roostTypes[gBattlerAttacker][0] = gBattleMons[gBattlerAttacker].type1; - gBattleStruct->roostTypes[gBattlerAttacker][1] = gBattleMons[gBattlerAttacker].type2; + gBattleStruct->roostTypes[gBattlerAttacker][0] = gBattleMons[gBattlerAttacker].types[0]; + gBattleStruct->roostTypes[gBattlerAttacker][1] = gBattleMons[gBattlerAttacker].types[1]; gBattlescriptCurrInstr = cmd->nextInstr; } @@ -5350,7 +5369,7 @@ static bool32 TryKnockOffBattleScript(u32 battlerDef) } else { - gWishFutureKnock.knockedOffMons[side] |= gBitTable[gBattlerPartyIndexes[battlerDef]]; + gWishFutureKnock.knockedOffMons[side] |= 1u << gBattlerPartyIndexes[battlerDef]; } BattleScriptPushCursor(); @@ -5378,7 +5397,7 @@ static u32 GetNextTarget(u32 moveTarget, bool32 excludeCurrent) if (i != gBattlerAttacker && !(excludeCurrent && i == gBattlerTarget) && IsBattlerAlive(i) - && !(gBattleStruct->targetsDone[gBattlerAttacker] & gBitTable[i]) + && !(gBattleStruct->targetsDone[gBattlerAttacker] & (1u << i)) && (GetBattlerSide(i) != GetBattlerSide(gBattlerAttacker) || moveTarget == MOVE_TARGET_FOES_AND_ALLY)) break; } @@ -5405,7 +5424,7 @@ static void Cmd_moveend(void) endState = cmd->endState; holdEffectAtk = GetBattlerHoldEffect(gBattlerAttacker, TRUE); - GET_MOVE_TYPE(gCurrentMove, moveType); + moveType = GetMoveType(gCurrentMove); do { @@ -5825,10 +5844,12 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; case MOVEEND_UPDATE_LAST_MOVES: - if (gMoveResultFlags & (MOVE_RESULT_FAILED | MOVE_RESULT_DOESNT_AFFECT_FOE)) - gBattleStruct->lastMoveFailed |= gBitTable[gBattlerAttacker]; + if ((gMoveResultFlags & (MOVE_RESULT_FAILED | MOVE_RESULT_DOESNT_AFFECT_FOE)) + || (gBattleMons[gBattlerAttacker].status2 & (STATUS2_FLINCHED)) + || gProtectStructs[gBattlerAttacker].prlzImmobility) + gBattleStruct->lastMoveFailed |= 1u << gBattlerAttacker; else - gBattleStruct->lastMoveFailed &= ~(gBitTable[gBattlerAttacker]); + gBattleStruct->lastMoveFailed &= ~(1u << gBattlerAttacker); // Set ShellTrap to activate after the attacker's turn if target was hit by a physical move. if (gMovesInfo[gChosenMoveByBattler[gBattlerTarget]].effect == EFFECT_SHELL_TRAP @@ -5854,7 +5875,7 @@ static void Cmd_moveend(void) } if (!gSpecialStatuses[gBattlerAttacker].dancerUsedMove) { - gDisableStructs[gBattlerAttacker].usedMoves |= gBitTable[gCurrMovePos]; + gDisableStructs[gBattlerAttacker].usedMoves |= 1u << gCurrMovePos; gBattleStruct->lastMoveTarget[gBattlerAttacker] = gBattlerTarget; if (gHitMarker & HITMARKER_ATTACKSTRING_PRINTED) { @@ -5864,8 +5885,8 @@ static void Cmd_moveend(void) gBattleStruct->dynamax.lastUsedBaseMove = gBattleStruct->dynamax.baseMoves[gBattlerAttacker]; } } - if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker]) - && !(gBattleStruct->absentBattlerFlags & gBitTable[gBattlerAttacker]) + if (!(gAbsentBattlerFlags & (1u << gBattlerAttacker)) + && !(gBattleStruct->absentBattlerFlags & (1u << gBattlerAttacker)) && gMovesInfo[originallyUsedMove].effect != EFFECT_BATON_PASS && gMovesInfo[originallyUsedMove].effect != EFFECT_HEALING_WISH) { @@ -5896,7 +5917,7 @@ static void Cmd_moveend(void) else { gLastLandedMoves[gBattlerTarget] = gCurrentMove; - GET_MOVE_TYPE(gCurrentMove, gLastHitByType[gBattlerTarget]); + gLastHitByType[gBattlerTarget] = GetMoveType(gCurrentMove); } } else @@ -5907,8 +5928,8 @@ static void Cmd_moveend(void) gBattleScripting.moveendState++; break; case MOVEEND_MIRROR_MOVE: // mirror move - if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker]) - && !(gBattleStruct->absentBattlerFlags & gBitTable[gBattlerAttacker]) + if (!(gAbsentBattlerFlags & (1u << gBattlerAttacker)) + && !(gBattleStruct->absentBattlerFlags & (1u << gBattlerAttacker)) && !gMovesInfo[originallyUsedMove].mirrorMoveBanned && gHitMarker & HITMARKER_OBEYS && gBattlerAttacker != gBattlerTarget @@ -5928,9 +5949,9 @@ static void Cmd_moveend(void) && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) gProtectStructs[gBattlerAttacker].targetAffected = TRUE; - gBattleStruct->targetsDone[gBattlerAttacker] |= gBitTable[gBattlerTarget]; + gBattleStruct->targetsDone[gBattlerAttacker] |= 1u << gBattlerTarget; if (!(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) - && gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && IsDoubleBattle() && !gProtectStructs[gBattlerAttacker].chargingTurn && (moveTarget == MOVE_TARGET_BOTH || moveTarget == MOVE_TARGET_FOES_AND_ALLY) @@ -5959,7 +5980,7 @@ static void Cmd_moveend(void) u8 originalBounceTarget = gBattlerAttacker; gBattleStruct->bouncedMoveIsUsed = FALSE; gBattlerAttacker = gBattleStruct->attackerBeforeBounce; - gBattleStruct->targetsDone[gBattlerAttacker] |= gBitTable[originalBounceTarget]; + gBattleStruct->targetsDone[gBattlerAttacker] |= 1u << originalBounceTarget; gBattleStruct->targetsDone[originalBounceTarget] = 0; nextTarget = GetNextTarget(moveTarget, FALSE); @@ -5991,15 +6012,18 @@ static void Cmd_moveend(void) && gMultiHitCounter && !(gMovesInfo[gCurrentMove].effect == EFFECT_PRESENT && gBattleStruct->presentBasePower == 0)) // Silly edge case { + gMultiHitCounter--; + if (!IsBattlerAlive(gBattlerTarget) && gMovesInfo[gCurrentMove].effect != EFFECT_DRAGON_DARTS) + gMultiHitCounter = 0; + gBattleScripting.multihitString[4]++; - if (--gMultiHitCounter == 0) + if (gMultiHitCounter == 0) { if (gMovesInfo[gCurrentMove].argument == MOVE_EFFECT_SCALE_SHOT && !NoAliveMonsForEitherParty()) { BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_DefDownSpeedUp; } - BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_MultiHitPrintStrings; effect = TRUE; @@ -6013,9 +6037,9 @@ static void Cmd_moveend(void) gBattlerTarget = BATTLE_PARTNER(gBattlerTarget); // Target the partner in doubles for second hit. if (gBattleMons[gBattlerAttacker].hp - && gBattleMons[gBattlerTarget].hp - && (gChosenMove == MOVE_SLEEP_TALK || !(gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP)) - && !(gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE)) + && gBattleMons[gBattlerTarget].hp + && (gChosenMove == MOVE_SLEEP_TALK || (gChosenMove == MOVE_SNORE) || !(gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP)) + && !(gBattleMons[gBattlerAttacker].status1 & STATUS1_FREEZE)) { if (gSpecialStatuses[gBattlerAttacker].parentalBondState) gSpecialStatuses[gBattlerAttacker].parentalBondState--; @@ -6062,7 +6086,7 @@ static void Cmd_moveend(void) && TARGET_TURN_DAMAGED && CanStealItem(gBattlerAttacker, gBattlerTarget, gBattleMons[gBattlerTarget].item) && !gSpecialStatuses[gBattlerAttacker].gemBoost // In base game, gems are consumed after magician would activate. - && !(gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerTarget)] & gBitTable[gBattlerPartyIndexes[gBattlerTarget]]) + && !(gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerTarget)] & (1u << gBattlerPartyIndexes[gBattlerTarget])) && !DoesSubstituteBlockMove(gBattlerAttacker, gBattlerTarget, gCurrentMove) && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT) && (GetBattlerAbility(gBattlerTarget) != ABILITY_STICKY_HOLD || !IsBattlerAlive(gBattlerTarget))) @@ -6086,9 +6110,9 @@ static void Cmd_moveend(void) u32 holdEffect; holdEffect = GetBattlerHoldEffect(i, TRUE); if (holdEffect == HOLD_EFFECT_EJECT_BUTTON) - ejectButtonBattlers |= gBitTable[i]; + ejectButtonBattlers |= 1u << i; else if (holdEffect == HOLD_EFFECT_EJECT_PACK) - ejectPackBattlers |= gBitTable[i]; + ejectPackBattlers |= 1u << i; } if (ejectButtonBattlers || ejectPackBattlers) { @@ -6099,7 +6123,7 @@ static void Cmd_moveend(void) { u32 battler = battlers[i]; - if (battler != gBattlerAttacker && ejectButtonBattlers & gBitTable[battler]) + if (battler != gBattlerAttacker && ejectButtonBattlers & (1u << battler)) { if (TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove)) // Apparently Sheer Force blocks Eject Button, but not Eject Pack continue; @@ -6108,7 +6132,7 @@ static void Cmd_moveend(void) if (!BATTLER_TURN_DAMAGED(battler)) continue; } - else if (ejectPackBattlers & gBitTable[battler]) + else if (ejectPackBattlers & (1u << battler)) { if (!gProtectStructs[battler].statFell || gProtectStructs[battler].disableEjectPack) continue; @@ -6130,7 +6154,7 @@ static void Cmd_moveend(void) gBattlescriptCurrInstr = BattleScript_MoveEnd; // Prevent user switch-in selection effect = TRUE; BattleScriptPushCursor(); - if (ejectButtonBattlers & gBitTable[battler]) + if (ejectButtonBattlers & (1u << battler)) { gBattlescriptCurrInstr = BattleScript_EjectButtonActivates; } @@ -6169,7 +6193,7 @@ static void Cmd_moveend(void) if (i == gBattlerAttacker) continue; if (GetBattlerHoldEffect(i, TRUE) == HOLD_EFFECT_RED_CARD) - redCardBattlers |= gBitTable[i]; + redCardBattlers |= (1u << i); } if (redCardBattlers && (gMovesInfo[gCurrentMove].effect != EFFECT_HIT_SWITCH_TARGET || gBattleStruct->hitSwitchTargetFailed) @@ -6186,7 +6210,7 @@ static void Cmd_moveend(void) u32 battler = battlers[i]; // Search for fastest hit pokemon with a red card // Attacker is the one to be switched out, battler is one with red card - if (redCardBattlers & gBitTable[battler] + if (redCardBattlers & (1u << battler) && IsBattlerAlive(battler) && !DoesSubstituteBlockMove(gBattlerAttacker, battler, gCurrentMove) && BATTLER_TURN_DAMAGED(battler) @@ -6217,7 +6241,7 @@ static void Cmd_moveend(void) case MOVEEND_PICKPOCKET: if (IsBattlerAlive(gBattlerAttacker) && gBattleMons[gBattlerAttacker].item != ITEM_NONE // Attacker must be holding an item - && !(gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerAttacker)] & gBitTable[gBattlerPartyIndexes[gBattlerAttacker]]) // But not knocked off + && !(gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerAttacker)] & (1u << gBattlerPartyIndexes[gBattlerAttacker])) // But not knocked off && !(TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove)) // Pickpocket doesn't activate for sheer force && IsMoveMakingContact(gCurrentMove, gBattlerAttacker) // Pickpocket requires contact && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) // Obviously attack needs to have worked @@ -6257,7 +6281,7 @@ static void Cmd_moveend(void) u32 battler, nextDancer = 0; bool32 turnOnHitmarker = FALSE; - for (battler = 0; battler < MAX_BATTLERS_COUNT; battler++) + for (battler = 0; battler < gBattlersCount; battler++) { if (gSpecialStatuses[battler].dancerUsedMove) { @@ -6267,9 +6291,8 @@ static void Cmd_moveend(void) } } - if (!(gBattleStruct->lastMoveFailed & gBitTable[gBattlerAttacker] - || (!gSpecialStatuses[gBattlerAttacker].dancerUsedMove - && gBattleStruct->bouncedMoveIsUsed))) + if (!(gMoveResultFlags & (MOVE_RESULT_FAILED | MOVE_RESULT_DOESNT_AFFECT_FOE) + || (!gSpecialStatuses[gBattlerAttacker].dancerUsedMove && gBattleStruct->bouncedMoveIsUsed))) { // Dance move succeeds // Set target for other Dancer mons; set bit so that mon cannot activate Dancer off of its own move if (!gSpecialStatuses[gBattlerAttacker].dancerUsedMove) @@ -6278,7 +6301,7 @@ static void Cmd_moveend(void) gBattleScripting.savedBattler |= (gBattlerAttacker << 4); gSpecialStatuses[gBattlerAttacker].dancerUsedMove = TRUE; } - for (battler = 0; battler < MAX_BATTLERS_COUNT; battler++) + for (battler = 0; battler < gBattlersCount; battler++) { if (GetBattlerAbility(battler) == ABILITY_DANCER && !gSpecialStatuses[battler].dancerUsedMove) { @@ -6387,7 +6410,7 @@ static void Cmd_moveend(void) gBattleStruct->targetsDone[gBattlerAttacker] = 0; gProtectStructs[gBattlerAttacker].targetAffected = FALSE; gProtectStructs[gBattlerAttacker].shellTrap = FALSE; - gBattleStruct->ateBoost[gBattlerAttacker] = 0; + gBattleStruct->ateBoost[gBattlerAttacker] = FALSE; gStatuses3[gBattlerAttacker] &= ~STATUS3_ME_FIRST; gSpecialStatuses[gBattlerAttacker].gemBoost = FALSE; gSpecialStatuses[gBattlerAttacker].damagedMons = 0; @@ -6402,9 +6425,14 @@ static void Cmd_moveend(void) gBattleStruct->enduredDamage = 0; gBattleStruct->additionalEffectsCounter = 0; gBattleStruct->poisonPuppeteerConfusion = FALSE; + gBattleStruct->fickleBeamBoosted = FALSE; + gBattleStruct->distortedTypeMatchups = 0; + if (gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) + gBattleStruct->pledgeMove = FALSE; if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE) SetActiveGimmick(gBattlerAttacker, GIMMICK_NONE); - gBattleStruct->distortedTypeMatchups = 0; + if (B_CHARGE <= GEN_8 || moveType == TYPE_ELECTRIC) + gStatuses3[gBattlerAttacker] &= ~(STATUS3_CHARGED_UP); memset(gQueuedStatBoosts, 0, sizeof(gQueuedStatBoosts)); gBattleScripting.moveendState++; break; @@ -6461,7 +6489,7 @@ static void Cmd_getswitchedmondata(void) gBattlerPartyIndexes[battler] = gBattleStruct->monToSwitchIntoId[battler]; - BtlController_EmitGetMonData(battler, BUFFER_A, REQUEST_ALL_BATTLE, gBitTable[gBattlerPartyIndexes[battler]]); + BtlController_EmitGetMonData(battler, BUFFER_A, REQUEST_ALL_BATTLE, 1u << gBattlerPartyIndexes[battler]); MarkBattlerForControllerExec(battler); gBattlescriptCurrInstr = cmd->nextInstr; @@ -6507,16 +6535,16 @@ static void Cmd_switchindataupdate(void) if (i != PARTY_SIZE) { gBattlerPartyIndexes[battler] = gBattleStruct->monToSwitchIntoId[battler] = i; - BtlController_EmitGetMonData(battler, BUFFER_A, REQUEST_ALL_BATTLE, gBitTable[gBattlerPartyIndexes[battler]]); + BtlController_EmitGetMonData(battler, BUFFER_A, REQUEST_ALL_BATTLE, 1u << gBattlerPartyIndexes[battler]); MarkBattlerForControllerExec(battler); return; } } } - gBattleMons[battler].type1 = gSpeciesInfo[gBattleMons[battler].species].types[0]; - gBattleMons[battler].type2 = gSpeciesInfo[gBattleMons[battler].species].types[1]; - gBattleMons[battler].type3 = TYPE_MYSTERY; + gBattleMons[battler].types[0] = gSpeciesInfo[gBattleMons[battler].species].types[0]; + gBattleMons[battler].types[1] = gSpeciesInfo[gBattleMons[battler].species].types[1]; + gBattleMons[battler].types[2] = TYPE_MYSTERY; gBattleMons[battler].ability = GetAbilityBySpecies(gBattleMons[battler].species, gBattleMons[battler].abilityNum); #if TESTING if (gTestRunnerEnabled) @@ -6530,7 +6558,7 @@ static void Cmd_switchindataupdate(void) // check knocked off item i = GetBattlerSide(battler); - if (gWishFutureKnock.knockedOffMons[i] & gBitTable[gBattlerPartyIndexes[battler]]) + if (gWishFutureKnock.knockedOffMons[i] & (1u << gBattlerPartyIndexes[battler])) { gBattleMons[battler].item = ITEM_NONE; } @@ -6551,7 +6579,7 @@ static void Cmd_switchindataupdate(void) && IsBattlerAlive(battler) && !(gBattleMons[battler].status1 & STATUS1_SLEEP)) { - gBattleStruct->palaceFlags |= gBitTable[battler]; + gBattleStruct->palaceFlags |= 1u << battler; } gBattleScripting.battler = battler; @@ -6580,7 +6608,7 @@ static void Cmd_switchinanim(void) | BATTLE_TYPE_FRONTIER))) HandleSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[battler].species), FLAG_SET_SEEN, gBattleMons[battler].personality); - gAbsentBattlerFlags &= ~(gBitTable[battler]); + gAbsentBattlerFlags &= ~(1u << battler); BtlController_EmitSwitchInAnim(battler, BUFFER_A, gBattlerPartyIndexes[battler], cmd->dontClearSubstitute); MarkBattlerForControllerExec(battler); @@ -6700,7 +6728,7 @@ bool32 CanBattlerSwitch(u32 battler) { battlerIn1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) battlerIn2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); else battlerIn2 = battlerIn1; @@ -6712,7 +6740,7 @@ bool32 CanBattlerSwitch(u32 battler) // Check if attacker side has mon to switch into battlerIn1 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) battlerIn2 = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); else battlerIn2 = battlerIn1; @@ -6759,7 +6787,7 @@ static void ChooseMonToSendOut(u32 battler, u8 slotId) { gBattleStruct->battlerPartyIndexes[battler] = gBattlerPartyIndexes[battler]; gBattleStruct->monToSwitchIntoId[battler] = PARTY_SIZE; - gBattleStruct->field_93 &= ~(gBitTable[battler]); + gBattleStruct->field_93 &= ~(1u << battler); BtlController_EmitChoosePokemon(battler, BUFFER_A, PARTY_ACTION_SEND_OUT, slotId, ABILITY_NONE, gBattleStruct->battlerPartyOrders[battler]); MarkBattlerForControllerExec(battler); @@ -6776,7 +6804,7 @@ static void Cmd_openpartyscreen(void) if (cmd->battler == BS_FAINTED_MULTIPLE_1) { - if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) || !(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) || !(IsDoubleBattle())) { for (battler = 0; battler < gBattlersCount; battler++) { @@ -6784,7 +6812,7 @@ static void Cmd_openpartyscreen(void) { if (HasNoMonsToSwitch(battler, PARTY_SIZE, PARTY_SIZE)) { - gAbsentBattlerFlags |= gBitTable[battler]; + gAbsentBattlerFlags |= 1u << battler; gHitMarker &= ~HITMARKER_FAINTED(battler); BtlController_EmitLinkStandbyMsg(battler, BUFFER_A, LINK_STANDBY_MSG_ONLY, FALSE); MarkBattlerForControllerExec(battler); @@ -6802,18 +6830,18 @@ static void Cmd_openpartyscreen(void) } } } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (IsDoubleBattle()) { bool8 hasReplacement_0, hasReplacement_1, hasReplacement_2, hasReplacement_3; hitmarkerFaintBits = gHitMarker >> 28; - if (gBitTable[0] & hitmarkerFaintBits) + if (1u & hitmarkerFaintBits) { battler = 0; if (HasNoMonsToSwitch(battler, PARTY_SIZE, PARTY_SIZE)) { - gAbsentBattlerFlags |= gBitTable[battler]; + gAbsentBattlerFlags |= 1u << battler; gHitMarker &= ~HITMARKER_FAINTED(battler); BtlController_EmitCantSwitch(battler, BUFFER_A); MarkBattlerForControllerExec(battler); @@ -6830,12 +6858,12 @@ static void Cmd_openpartyscreen(void) flags |= 1; } } - if (gBitTable[2] & hitmarkerFaintBits && !(gBitTable[0] & hitmarkerFaintBits)) + if (4u & hitmarkerFaintBits && !(1u & hitmarkerFaintBits)) { battler = 2; if (HasNoMonsToSwitch(battler, PARTY_SIZE, PARTY_SIZE)) { - gAbsentBattlerFlags |= gBitTable[battler]; + gAbsentBattlerFlags |= 1u << battler; gHitMarker &= ~HITMARKER_FAINTED(battler); BtlController_EmitCantSwitch(battler, BUFFER_A); MarkBattlerForControllerExec(battler); @@ -6851,12 +6879,12 @@ static void Cmd_openpartyscreen(void) MarkBattlerForControllerExec(battler); } } - if (gBitTable[1] & hitmarkerFaintBits) + if (2 & hitmarkerFaintBits) { battler = 1; if (HasNoMonsToSwitch(battler, PARTY_SIZE, PARTY_SIZE)) { - gAbsentBattlerFlags |= gBitTable[battler]; + gAbsentBattlerFlags |= 1u << battler; gHitMarker &= ~HITMARKER_FAINTED(battler); BtlController_EmitCantSwitch(battler, BUFFER_A); MarkBattlerForControllerExec(battler); @@ -6873,12 +6901,12 @@ static void Cmd_openpartyscreen(void) flags |= 2; } } - if (gBitTable[3] & hitmarkerFaintBits && !(gBitTable[1] & hitmarkerFaintBits)) + if (8 & hitmarkerFaintBits && !(2 & hitmarkerFaintBits)) { battler = 3; if (HasNoMonsToSwitch(battler, PARTY_SIZE, PARTY_SIZE)) { - gAbsentBattlerFlags |= gBitTable[battler]; + gAbsentBattlerFlags |= 1u << battler; gHitMarker &= ~HITMARKER_FAINTED(battler); BtlController_EmitCantSwitch(battler, BUFFER_A); MarkBattlerForControllerExec(battler); @@ -6901,7 +6929,7 @@ static void Cmd_openpartyscreen(void) hasReplacement_2 = gSpecialStatuses[2].faintedHasReplacement; if (!hasReplacement_2 && hitmarkerFaintBits != 0) { - if (gAbsentBattlerFlags & gBitTable[0]) + if (gAbsentBattlerFlags & 1) battler = 2; else battler = 0; @@ -6917,7 +6945,7 @@ static void Cmd_openpartyscreen(void) hasReplacement_3 = gSpecialStatuses[3].faintedHasReplacement; if (!hasReplacement_3 && hitmarkerFaintBits != 0) { - if (gAbsentBattlerFlags & gBitTable[1]) + if (gAbsentBattlerFlags & 2) battler = 3; else battler = 1; @@ -6933,15 +6961,15 @@ static void Cmd_openpartyscreen(void) { if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { hitmarkerFaintBits = gHitMarker >> 28; - if (gBitTable[2] & hitmarkerFaintBits && gBitTable[0] & hitmarkerFaintBits) + if (4 & hitmarkerFaintBits && 1 & hitmarkerFaintBits) { battler = 2; if (HasNoMonsToSwitch(battler, gBattleResources->bufferB[0][1], PARTY_SIZE)) { - gAbsentBattlerFlags |= gBitTable[battler]; + gAbsentBattlerFlags |= 1u << battler; gHitMarker &= ~HITMARKER_FAINTED(battler); BtlController_EmitCantSwitch(battler, BUFFER_A); MarkBattlerForControllerExec(battler); @@ -6952,12 +6980,12 @@ static void Cmd_openpartyscreen(void) gSpecialStatuses[battler].faintedHasReplacement = TRUE; } } - if (gBitTable[3] & hitmarkerFaintBits && hitmarkerFaintBits & gBitTable[1]) + if (8u & hitmarkerFaintBits && hitmarkerFaintBits & 2u) { battler = 3; if (HasNoMonsToSwitch(battler, gBattleResources->bufferB[1][1], PARTY_SIZE)) { - gAbsentBattlerFlags |= gBitTable[battler]; + gAbsentBattlerFlags |= 1u << battler; gHitMarker &= ~HITMARKER_FAINTED(battler); BtlController_EmitCantSwitch(battler, BUFFER_A); MarkBattlerForControllerExec(battler); @@ -6985,7 +7013,7 @@ static void Cmd_openpartyscreen(void) hitmarkerFaintBits = gHitMarker >> 28; gBattlerFainted = 0; - while (!(gBitTable[gBattlerFainted] & hitmarkerFaintBits) + while (!((1u << gBattlerFainted) & hitmarkerFaintBits) && gBattlerFainted < gBattlersCount) gBattlerFainted++; @@ -7006,7 +7034,7 @@ static void Cmd_openpartyscreen(void) } else if (HasNoMonsToSwitch(battler, PARTY_SIZE, PARTY_SIZE)) { - gAbsentBattlerFlags |= gBitTable[battler]; + gAbsentBattlerFlags |= 1u << battler; gHitMarker &= ~HITMARKER_FAINTED(battler); gBattlescriptCurrInstr = failInstr; } @@ -7014,7 +7042,7 @@ static void Cmd_openpartyscreen(void) { *(gBattleStruct->battlerPartyIndexes + battler) = gBattlerPartyIndexes[battler]; *(gBattleStruct->monToSwitchIntoId + battler) = PARTY_SIZE; - gBattleStruct->field_93 &= ~(gBitTable[battler]); + gBattleStruct->field_93 &= ~(1u << battler); BtlController_EmitChoosePokemon(battler, BUFFER_A, hitmarkerFaintBits, *(gBattleStruct->monToSwitchIntoId + BATTLE_PARTNER(battler)), ABILITY_NONE, gBattleStruct->battlerPartyOrders[battler]); MarkBattlerForControllerExec(battler); @@ -7038,7 +7066,7 @@ static void Cmd_openpartyscreen(void) else { u32 battlerOpposite = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler))); - if (gAbsentBattlerFlags & gBitTable[battlerOpposite]) + if (gAbsentBattlerFlags & (1u << battlerOpposite)) battlerOpposite ^= BIT_FLANK; // Make sure we're checking a valid battler. In edge case scenarios - battler could be absent and battlerOpposite would become a non-existent one softlocking the game. @@ -7070,10 +7098,10 @@ static void Cmd_switchhandleorder(void) if (gBattleResources->bufferB[i][0] == CONTROLLER_CHOSENMONRETURNVALUE) { *(gBattleStruct->monToSwitchIntoId + i) = gBattleResources->bufferB[i][1]; - if (!(gBattleStruct->field_93 & gBitTable[i])) + if (!(gBattleStruct->field_93 & (1u << i))) { RecordedBattle_SetBattlerAction(i, gBattleResources->bufferB[i][1]); - gBattleStruct->field_93 |= gBitTable[i]; + gBattleStruct->field_93 |= 1u << i; } } } @@ -7083,10 +7111,10 @@ static void Cmd_switchhandleorder(void) SwitchPartyOrder(battler); break; case 2: - if (!(gBattleStruct->field_93 & gBitTable[battler])) + if (!(gBattleStruct->field_93 & (1u << battler))) { RecordedBattle_SetBattlerAction(battler, gBattleResources->bufferB[battler][1]); - gBattleStruct->field_93 |= gBitTable[battler]; + gBattleStruct->field_93 |= 1u << battler; } // fall through case 3: @@ -7154,12 +7182,12 @@ static void UpdateSentMonFlags(u32 battler) gSpecialStatuses[battler].faintedHasReplacement = FALSE; if (!BattlerHasAi(battler)) - gBattleStruct->appearedInBattle |= gBitTable[gBattlerPartyIndexes[battler]]; + gBattleStruct->appearedInBattle |= 1u << gBattlerPartyIndexes[battler]; } static bool32 DoSwitchInEffectsForBattler(u32 battler) { - u32 i; + u32 i = 0; // Neutralizing Gas announces itself before hazards if (gBattleMons[battler].ability == ABILITY_NEUTRALIZING_GAS && gSpecialStatuses[battler].announceNeutralizingGas == 0) { @@ -7171,20 +7199,20 @@ static bool32 DoSwitchInEffectsForBattler(u32 battler) } // Healing Wish activates before hazards. // Starting from Gen8 - it heals only pokemon which can be healed. In gens 5,6,7 the effect activates anyways. - else if (((gBattleStruct->storedHealingWish & gBitTable[battler]) || (gBattleStruct->storedLunarDance & gBitTable[battler])) + else if (((gBattleStruct->storedHealingWish & (1u << battler)) || (gBattleStruct->storedLunarDance & (1u << battler))) && (gBattleMons[battler].hp != gBattleMons[battler].maxHP || gBattleMons[battler].status1 != 0 || B_HEALING_WISH_SWITCH < GEN_8)) { - if (gBattleStruct->storedHealingWish & gBitTable[battler]) + if (gBattleStruct->storedHealingWish & (1u << battler)) { BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_HealingWishActivates; - gBattleStruct->storedHealingWish &= ~(gBitTable[battler]); + gBattleStruct->storedHealingWish &= ~(1u << battler); } else // Lunar Dance { BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_LunarDanceActivates; - gBattleStruct->storedLunarDance &= ~(gBitTable[battler]); + gBattleStruct->storedLunarDance &= ~(1u << battler); } } else if (!(gDisableStructs[battler].spikesDone) @@ -7227,9 +7255,11 @@ static bool32 DoSwitchInEffectsForBattler(u32 battler) } else if (IsBattlerAffectedByHazards(battler, TRUE)) { + i = GetBattlerAbility(battler); if (!(gBattleMons[battler].status1 & STATUS1_ANY) && !IS_BATTLER_OF_TYPE(battler, TYPE_STEEL) - && GetBattlerAbility(battler) != ABILITY_IMMUNITY + && i != ABILITY_IMMUNITY + && i != ABILITY_PURIFYING_SALT && !IsAbilityOnSide(battler, ABILITY_PASTEL_VEIL) && !(gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SAFEGUARD) && !(gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN)) @@ -7291,19 +7321,32 @@ static bool32 DoSwitchInEffectsForBattler(u32 battler) gDisableStructs[battler].truantSwitchInHack = 0; - for (i = 0; i < gBattlersCount; i++) - { - if (i != battler - && GetBattlerAbility(i) == ABILITY_TRACE - && AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, i, 0, 0, 0)) - return TRUE; - } - if (DoSwitchInAbilities(battler) || ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, battler, FALSE)) return TRUE; else if (AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, battler, 0, 0, 0)) return TRUE; + for (i = 0; i < gBattlersCount; i++) + { + if (i == battler) + continue; + + switch (GetBattlerAbility(i)) + { + case ABILITY_TRACE: + if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, i, 0, 0, 0)) + return TRUE; + break; + case ABILITY_FORECAST: + case ABILITY_FLOWER_GIFT: + case ABILITY_ICE_FACE: + case ABILITY_PROTOSYNTHESIS: + if (AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, i, 0, 0, 0)) + return TRUE; + break; + } + } + gDisableStructs[battler].stickyWebDone = FALSE; gDisableStructs[battler].spikesDone = FALSE; gDisableStructs[battler].toxicSpikesDone = FALSE; @@ -7318,7 +7361,7 @@ static bool32 DoSwitchInEffectsForBattler(u32 battler) gBattleStruct->hpOnSwitchout[GetBattlerSide(i)] = gBattleMons[i].hp; } - gBattleStruct->forcedSwitch &= ~(gBitTable[battler]); + gBattleStruct->forcedSwitch &= ~(1u << battler); return FALSE; } @@ -7334,7 +7377,7 @@ static void Cmd_switchineffects(void) { // Multiple mons fainted and are being switched-in. Their abilities/hazards will play according to speed ties. case BS_FAINTED_MULTIPLE_1: // Saves the battlers. - gBattleStruct->multipleSwitchInBattlers |= gBitTable[battler]; + gBattleStruct->multipleSwitchInBattlers |= 1 << battler; UpdateSentMonFlags(battler); // Increment fainted battler. @@ -7343,7 +7386,7 @@ static void Cmd_switchineffects(void) gBattlerFainted++; if (gBattlerFainted >= gBattlersCount) break; - if (gHitMarker & HITMARKER_FAINTED(gBattlerFainted) && !(gAbsentBattlerFlags & gBitTable[gBattlerFainted])) + if (gHitMarker & HITMARKER_FAINTED(gBattlerFainted) && !(gAbsentBattlerFlags & (1u << gBattlerFainted))) break; } while (1); @@ -7363,7 +7406,7 @@ static void Cmd_switchineffects(void) for (; gBattleStruct->multipleSwitchInCursor < gBattlersCount; gBattleStruct->multipleSwitchInCursor++) { gBattlerFainted = gBattleStruct->multipleSwitchInSortedBattlers[gBattleStruct->multipleSwitchInCursor]; - if (gBattleStruct->multipleSwitchInBattlers & gBitTable[gBattlerFainted]) + if (gBattleStruct->multipleSwitchInBattlers & (1 << (gBattlerFainted))) { if (DoSwitchInEffectsForBattler(gBattlerFainted)) return; @@ -7385,9 +7428,9 @@ static void Cmd_switchineffects(void) static void Cmd_trainerslidein(void) { - CMD_ARGS(u8 battler); + CMD_ARGS(u8 position); - u32 battler = GetBattlerAtPosition(cmd->battler); + u32 battler = GetBattlerForBattleScript(cmd->position); BtlController_EmitTrainerSlide(battler, BUFFER_A); MarkBattlerForControllerExec(battler); @@ -7477,7 +7520,7 @@ static void Cmd_handlelearnnewmove(void) { GiveMoveToBattleMon(&gBattleMons[battler], learnMove); } - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { battler = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); if (gBattlerPartyIndexes[battler] == monId @@ -7583,7 +7626,7 @@ static void Cmd_yesnoboxlearnmove(void) RemoveBattleMonPPBonus(&gBattleMons[0], movePosition); SetBattleMonMoveSlot(&gBattleMons[0], gMoveToLearn, movePosition); } - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + if (IsDoubleBattle() && gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId && MOVE_IS_PERMANENT(2, movePosition)) { @@ -7697,7 +7740,7 @@ static u32 GetTrainerMoneyToGive(u16 trainerId) if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * trainerMoney; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (IsDoubleBattle()) moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * 2 * trainerMoney; else moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * trainerMoney; @@ -7992,7 +8035,7 @@ static bool32 TryCheekPouch(u32 battler, u32 itemId) if (ItemId_GetPocket(itemId) == POCKET_BERRIES && GetBattlerAbility(battler) == ABILITY_CHEEK_POUCH && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK) - && gBattleStruct->ateBerry[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]] + && gBattleStruct->ateBerry[GetBattlerSide(battler)] & (1u << gBattlerPartyIndexes[battler]) && !BATTLER_MAX_HP(battler)) { gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 3; @@ -8070,6 +8113,7 @@ static void Cmd_removeitem(void) gBattleStruct->usedHeldItems[gBattlerPartyIndexes[battler]][GetBattlerSide(battler)] = itemId; // Remember if switched out gBattleMons[battler].item = ITEM_NONE; + gBattleStruct->canPickupItem |= (1u << battler); CheckSetUnburden(battler); BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[battler].item), &gBattleMons[battler].item); @@ -8363,7 +8407,7 @@ static bool32 IsMonGettingExpSentOut(void) { if (gBattlerPartyIndexes[0] == gBattleStruct->expGetterMonId) return TRUE; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId) + if (IsDoubleBattle() && gBattlerPartyIndexes[2] == gBattleStruct->expGetterMonId) return TRUE; return FALSE; @@ -8436,7 +8480,7 @@ static void Cmd_hpthresholds(void) { CMD_ARGS(u8 battler); - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!(IsDoubleBattle())) { u32 battler = GetBattlerForBattleScript(cmd->battler); u32 opposingBattler = BATTLE_OPPOSITE(battler); @@ -8462,7 +8506,7 @@ static void Cmd_hpthresholds2(void) { CMD_ARGS(u8 battler); - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!(IsDoubleBattle())) { u32 battler = GetBattlerForBattleScript(cmd->battler); u32 opposingBattler = BATTLE_OPPOSITE(battler); @@ -8525,7 +8569,7 @@ bool32 CanUseLastResort(u8 battler) { if (gBattleMons[battler].moves[i] != MOVE_NONE) knownMovesCount++; - if (i != gCurrMovePos && gDisableStructs[battler].usedMoves & gBitTable[i]) // Increment used move count for all moves except current Last Resort. + if (i != gCurrMovePos && gDisableStructs[battler].usedMoves & (1u << i)) // Increment used move count for all moves except current Last Resort. usedMovesCount++; } @@ -8593,6 +8637,10 @@ static void RemoveAllTerrains(void) BattleScriptPushCursor(); \ gBattlescriptCurrInstr = battlescript; \ } \ + else \ + { \ + gBattlerAttacker = saveBattler; \ + } \ return TRUE; \ } \ } @@ -8607,20 +8655,24 @@ static bool32 TryDefogClear(u32 battlerAtk, bool32 clear) struct SideTimer *sideTimer = &gSideTimers[i]; u32 *sideStatuses = &gSideStatuses[i]; - gBattlerAttacker = i; // For correct battle string. Ally's / Foe's if (GetBattlerSide(battlerAtk) != i) { + gBattlerAttacker = i; // For correct battle string. Ally's / Foe's DEFOG_CLEAR(SIDE_STATUS_REFLECT, reflectTimer, BattleScript_SideStatusWoreOffReturn, MOVE_REFLECT); DEFOG_CLEAR(SIDE_STATUS_LIGHTSCREEN, lightscreenTimer, BattleScript_SideStatusWoreOffReturn, MOVE_LIGHT_SCREEN); DEFOG_CLEAR(SIDE_STATUS_MIST, mistTimer, BattleScript_SideStatusWoreOffReturn, MOVE_MIST); DEFOG_CLEAR(SIDE_STATUS_AURORA_VEIL, auroraVeilTimer, BattleScript_SideStatusWoreOffReturn, MOVE_AURORA_VEIL); DEFOG_CLEAR(SIDE_STATUS_SAFEGUARD, safeguardTimer, BattleScript_SideStatusWoreOffReturn, MOVE_SAFEGUARD); } - DEFOG_CLEAR(SIDE_STATUS_SPIKES, spikesAmount, BattleScript_SpikesDefog, 0); - 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); - DEFOG_CLEAR(SIDE_STATUS_STEELSURGE, steelsurgeAmount, BattleScript_SteelsurgeDefog, 0); + if (B_DEFOG_EFFECT_CLEARING >= GEN_6) + { + gBattlerAttacker = i; // For correct battle string. Ally's / Foe's + DEFOG_CLEAR(SIDE_STATUS_SPIKES, spikesAmount, BattleScript_SpikesDefog, 0); + 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); + DEFOG_CLEAR(SIDE_STATUS_STEELSURGE, steelsurgeAmount, BattleScript_SteelsurgeDefog, 0); + } if (gBattleWeather & B_WEATHER_FOG) { gBattleWeather &= ~B_WEATHER_FOG; @@ -8628,7 +8680,7 @@ static bool32 TryDefogClear(u32 battlerAtk, bool32 clear) gBattlescriptCurrInstr = BattleScript_FogEnded_Ret; return TRUE; } - if (B_DEFOG_CLEARS_TERRAIN >= GEN_8 && (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)) + if (B_DEFOG_EFFECT_CLEARING >= GEN_8 && (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY)) { RemoveAllTerrains(); BattleScriptPushCursor(); @@ -8854,7 +8906,7 @@ static void HandleScriptMegaPrimalBurst(u32 caseId, u32 battler, u32 type) 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); + BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_SPECIES_BATTLE, 1u << gBattlerPartyIndexes[battler], sizeof(gBattleMons[battler].species), &gBattleMons[battler].species); MarkBattlerForControllerExec(battler); } // Update healthbox and elevation and play cry. @@ -9172,9 +9224,9 @@ static void Cmd_various(void) // Raise stats for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) { - if (gBattleStruct->stolenStats[0] & gBitTable[i]) + if (gBattleStruct->stolenStats[0] & (1u << i)) { - gBattleStruct->stolenStats[0] &= ~(gBitTable[i]); + gBattleStruct->stolenStats[0] &= ~(1u << i); SET_STATCHANGER(i, gBattleStruct->stolenStats[i], FALSE); if (ChangeStatBuffs(GET_STAT_BUFF_VALUE_WITH_SIGN(gBattleScripting.statChanger), i, MOVE_EFFECT_CERTAIN | MOVE_EFFECT_AFFECTS_USER, NULL) == STAT_CHANGE_WORKED) { @@ -9199,7 +9251,7 @@ static void Cmd_various(void) for (i = STAT_ATK; i < NUM_BATTLE_STATS; i++) { if (CompareStat(battler, i, MAX_STAT_STAGE, CMP_LESS_THAN)) - bits |= gBitTable[i]; + bits |= 1u << i; } if (bits) { @@ -9207,7 +9259,7 @@ static void Cmd_various(void) do { statId = (Random() % (NUM_BATTLE_STATS - 1)) + 1; - } while (!(bits & gBitTable[statId])); + } while (!(bits & (1u << statId))); SET_STATCHANGER(statId, 2, FALSE); gBattlescriptCurrInstr = cmd->nextInstr; @@ -9307,12 +9359,12 @@ static void Cmd_various(void) // Try and print end-of-turn Battle Palace flavor text (e.g. "A glint appears in mon's eyes") gBattleCommunication[0] = FALSE; // whether or not msg should be printed gBattleScripting.battler = battler = gBattleCommunication[1]; - if (!(gBattleStruct->palaceFlags & gBitTable[battler]) + if (!(gBattleStruct->palaceFlags & (1u << battler)) && gBattleMons[battler].maxHP / 2 >= gBattleMons[battler].hp && IsBattlerAlive(battler) && !(gBattleMons[battler].status1 & STATUS1_SLEEP)) { - gBattleStruct->palaceFlags |= gBitTable[battler]; + gBattleStruct->palaceFlags |= 1u << battler; gBattleCommunication[0] = TRUE; gBattleCommunication[MULTISTRING_CHOOSER] = gNaturesInfo[GetNatureFromPersonality(gBattleMons[battler].personality)].battlePalaceFlavorText; } @@ -9337,7 +9389,7 @@ static void Cmd_various(void) VARIOUS_ARGS(); gBattleMons[1].hp = 0; gHitMarker |= HITMARKER_FAINTED(1); - gBattleStruct->arenaLostOpponentMons |= gBitTable[gBattlerPartyIndexes[1]]; + gBattleStruct->arenaLostOpponentMons |= 1u << gBattlerPartyIndexes[1]; gDisableStructs[1].truantSwitchInHack = 1; break; } @@ -9347,7 +9399,7 @@ static void Cmd_various(void) gBattleMons[0].hp = 0; gHitMarker |= HITMARKER_FAINTED(0); gHitMarker |= HITMARKER_PLAYER_FAINTED; - gBattleStruct->arenaLostPlayerMons |= gBitTable[gBattlerPartyIndexes[0]]; + gBattleStruct->arenaLostPlayerMons |= 1u << gBattlerPartyIndexes[0]; gDisableStructs[0].truantSwitchInHack = 1; break; } @@ -9359,8 +9411,8 @@ static void Cmd_various(void) gHitMarker |= HITMARKER_FAINTED(0); gHitMarker |= HITMARKER_FAINTED(1); gHitMarker |= HITMARKER_PLAYER_FAINTED; - gBattleStruct->arenaLostPlayerMons |= gBitTable[gBattlerPartyIndexes[0]]; - gBattleStruct->arenaLostOpponentMons |= gBitTable[gBattlerPartyIndexes[1]]; + gBattleStruct->arenaLostPlayerMons |= 1u << gBattlerPartyIndexes[0]; + gBattleStruct->arenaLostOpponentMons |= 1u << gBattlerPartyIndexes[1]; gDisableStructs[0].truantSwitchInHack = 1; gDisableStructs[1].truantSwitchInHack = 1; break; @@ -9445,7 +9497,7 @@ static void Cmd_various(void) case VARIOUS_SET_ALREADY_STATUS_MOVE_ATTEMPT: { VARIOUS_ARGS(); - gBattleStruct->alreadyStatusedMoveAttempt |= gBitTable[battler]; + gBattleStruct->alreadyStatusedMoveAttempt |= 1u << battler; break; } case VARIOUS_PALACE_TRY_ESCAPE_STATUS: @@ -9462,7 +9514,7 @@ static void Cmd_various(void) // and its partner is still alive. if (GetBattlerSide(battler) == B_SIDE_OPPONENT && IsBattlerAlive(BATTLE_PARTNER(battler))) { - gAbsentBattlerFlags |= gBitTable[battler]; + gAbsentBattlerFlags |= 1u << battler; gHitMarker |= HITMARKER_FAINTED(battler); gBattleMons[battler].hp = 0; SetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_HP, &gBattleMons[battler].hp); @@ -9825,10 +9877,7 @@ static void Cmd_various(void) case VARIOUS_HANDLE_FORM_CHANGE: { VARIOUS_ARGS(u8 case_); - if (GetBattlerSide(battler) == B_SIDE_OPPONENT) - mon = &gEnemyParty[gBattlerPartyIndexes[battler]]; - else - mon = &gPlayerParty[gBattlerPartyIndexes[battler]]; + mon = GetPartyBattlerData(battler); // Change species. if (cmd->case_ == 0) @@ -9837,7 +9886,7 @@ static void Cmd_various(void) 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); + BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_SPECIES_BATTLE, 1u << gBattlerPartyIndexes[battler], sizeof(gBattleMons[battler].species), &gBattleMons[battler].species); MarkBattlerForControllerExec(battler); } // Change stats. @@ -9916,23 +9965,23 @@ static void Cmd_various(void) else { gSpecialStatuses[gBattlerTarget].instructedChosenTarget = *(gBattleStruct->moveTarget + gBattlerTarget) | 0x4; - gBattlerAttacker = gBattlerTarget; gCalledMove = move; for (i = 0; i < MAX_MON_MOVES; i++) { - if (gBattleMons[gBattlerAttacker].moves[i] == gCalledMove) + if (gBattleMons[gBattlerTarget].moves[i] == gCalledMove) { gCurrMovePos = i; i = 4; break; } } - if (i != 4 || gBattleMons[gBattlerAttacker].pp[gCurrMovePos] == 0) + if (i != 4 || gBattleMons[gBattlerTarget].pp[gCurrMovePos] == 0) gBattlescriptCurrInstr = cmd->failInstr; else { - gBattlerTarget = gBattleStruct->lastMoveTarget[gBattlerAttacker]; + gEffectBattler = gBattleStruct->lastMoveTarget[gBattlerTarget]; gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED; + gBattleStruct->atkCancellerTracker = 0; PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, battler, gBattlerPartyIndexes[battler]); gBattlescriptCurrInstr = cmd->nextInstr; } @@ -9942,7 +9991,7 @@ static void Cmd_various(void) case VARIOUS_ABILITY_POPUP: { VARIOUS_ARGS(); - CreateAbilityPopUp(battler, gBattleMons[battler].ability, (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) != 0); + CreateAbilityPopUp(battler, gBattleMons[battler].ability, (IsDoubleBattle()) != 0); break; } case VARIOUS_UPDATE_ABILITY_POPUP: @@ -10041,7 +10090,7 @@ static void Cmd_various(void) || gBattleMons[gBattlerTarget].item != ITEM_NONE || !CanBattlerGetOrLoseItem(gBattlerAttacker, gBattleMons[gBattlerAttacker].item) || !CanBattlerGetOrLoseItem(gBattlerTarget, gBattleMons[gBattlerAttacker].item) - || gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerTarget)] & gBitTable[gBattlerPartyIndexes[gBattlerTarget]]) + || gWishFutureKnock.knockedOffMons[GetBattlerSide(gBattlerTarget)] & (1u << gBattlerPartyIndexes[gBattlerTarget])) { gBattlescriptCurrInstr = cmd->failInstr; } @@ -10068,7 +10117,6 @@ static void Cmd_various(void) { // Save sprite IDs, because trainer slide in will overwrite gBattlerSpriteIds variable. gBattleScripting.savedDmg = (gBattlerSpriteIds[battler] & 0xFF) | (gBattlerSpriteIds[BATTLE_PARTNER(battler)] << 8); - HideBattlerShadowSprite(battler); } else if (cmd->case_ == 1) { @@ -10136,7 +10184,7 @@ static void Cmd_various(void) gSideTimers[GetBattlerSide(battler)].auroraVeilTimer = 5; gSideTimers[GetBattlerSide(battler)].auroraVeilBattlerId = battler; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) + if (IsDoubleBattle() && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) gBattleCommunication[MULTISTRING_CHOOSER] = 5; else gBattleCommunication[MULTISTRING_CHOOSER] = 5; @@ -10152,7 +10200,7 @@ static void Cmd_various(void) } else { - gBattleMons[battler].type3 = gMovesInfo[gCurrentMove].argument; + gBattleMons[battler].types[2] = gMovesInfo[gCurrentMove].argument; PREPARE_TYPE_BUFFER(gBattleTextBuff1, gMovesInfo[gCurrentMove].argument); gBattlescriptCurrInstr = cmd->nextInstr; } @@ -10286,7 +10334,7 @@ static void Cmd_various(void) ConvertIntToDecimalStringN(gBattleTextBuff2, ppToDeduct, STR_CONV_MODE_LEFT_ALIGN, 1); PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 1, ppToDeduct) gBattleMons[battler].pp[i] -= ppToDeduct; - if (!(gDisableStructs[battler].mimickedMoves & gBitTable[i]) + if (!(gDisableStructs[battler].mimickedMoves & (1u << i)) && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)) { BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_PPMOVE1_BATTLE + i, 0, sizeof(gBattleMons[battler].pp[i]), &gBattleMons[battler].pp[i]); @@ -10312,7 +10360,7 @@ static void Cmd_various(void) case VARIOUS_JUMP_IF_TEAM_HEALTHY: { VARIOUS_ARGS(const u8 *jumpInstr); - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsBattlerAlive(BATTLE_PARTNER(battler))) + if ((IsDoubleBattle()) && IsBattlerAlive(BATTLE_PARTNER(battler))) { u8 partner = BATTLE_PARTNER(battler); if ((gBattleMons[battler].hp == gBattleMons[battler].maxHP && !(gBattleMons[battler].status1 & STATUS1_ANY)) @@ -10525,9 +10573,9 @@ static void Cmd_various(void) if (gBattleMons[gBattlerAttacker].species == SPECIES_GRENINJA_BATTLE_BOND && HasAttackerFaintedTarget() && CalculateBattlerPartyCount(gBattlerTarget) > 1 - && !(gBattleStruct->battleBondTransformed[GetBattlerSide(gBattlerAttacker)] & gBitTable[gBattlerPartyIndexes[gBattlerAttacker]])) + && !(gBattleStruct->battleBondTransformed[GetBattlerSide(gBattlerAttacker)] & (1u << gBattlerPartyIndexes[gBattlerAttacker]))) { - gBattleStruct->battleBondTransformed[GetBattlerSide(gBattlerAttacker)] |= gBitTable[gBattlerPartyIndexes[gBattlerAttacker]]; + gBattleStruct->battleBondTransformed[GetBattlerSide(gBattlerAttacker)] |= 1u << gBattlerPartyIndexes[gBattlerAttacker]; PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerAttacker].species); gBattleStruct->changedSpecies[GetBattlerSide(gBattlerAttacker)][gBattlerPartyIndexes[gBattlerAttacker]] = gBattleMons[gBattlerAttacker].species; gBattleMons[gBattlerAttacker].species = SPECIES_GRENINJA_ASH; @@ -10549,7 +10597,7 @@ static void Cmd_various(void) if (cmd->fromBattler) gLastUsedItem = gBattleMons[battler].item; - gBattleStruct->ateBerry[battler & BIT_SIDE] |= gBitTable[gBattlerPartyIndexes[battler]]; + gBattleStruct->ateBerry[battler & BIT_SIDE] |= 1u << gBattlerPartyIndexes[battler]; gBattleScripting.battler = gEffectBattler = gBattlerTarget = battler; // Cover all berry effect battler cases. e.g. ChangeStatBuffs uses target ID if (ItemBattleEffects(ITEMEFFECT_USE_LAST_ITEM, battler, FALSE)) return; @@ -10667,20 +10715,6 @@ static void Cmd_various(void) } return; } - case VARIOUS_TRY_TAR_SHOT: - { - VARIOUS_ARGS(const u8 *failInstr); - if (gDisableStructs[battler].tarShot) - { - gBattlescriptCurrInstr = cmd->failInstr; - } - else - { - gDisableStructs[battler].tarShot = TRUE; - gBattlescriptCurrInstr = cmd->nextInstr; - } - return; - } case VARIOUS_CAN_TAR_SHOT_WORK: { VARIOUS_ARGS(const u8 *failInstr); @@ -10828,123 +10862,6 @@ static void Cmd_various(void) gBattlescriptCurrInstr = cmd->nextInstr; return; } - case VARIOUS_TEATIME_TARGETS: - { - VARIOUS_ARGS(const u8 *jumpInstr); - u32 count = 0; - - for (i = 0; i < gBattlersCount; i++) - { - if (IsTeatimeAffected(i)) - count++; - } - if (count == 0) - gBattlescriptCurrInstr = cmd->jumpInstr; // Teatime fails - else - gBattlescriptCurrInstr = cmd->nextInstr; - return; - } - case VARIOUS_TEATIME_INVUL: - { - VARIOUS_ARGS(const u8 *jumpInstr); - if (ItemId_GetPocket(gBattleMons[battler].item) == POCKET_BERRIES && !(gStatuses3[gBattlerTarget] & (STATUS3_SEMI_INVULNERABLE))) - gBattlescriptCurrInstr = cmd->nextInstr; - else - gBattlescriptCurrInstr = cmd->jumpInstr; - return; - } - case VARIOUS_TRY_WIND_RIDER_POWER: - { - VARIOUS_ARGS(const u8 *failInstr); - u16 ability = GetBattlerAbility(battler); - if (GetBattlerSide(battler) == GetBattlerSide(gBattlerAttacker) - && (ability == ABILITY_WIND_RIDER || ability == ABILITY_WIND_POWER)) - { - gLastUsedAbility = ability; - RecordAbilityBattle(battler, gLastUsedAbility); - gBattlerAbility = gBattleScripting.battler = battler; - gBattlescriptCurrInstr = cmd->nextInstr; - } - else - { - gBattlescriptCurrInstr = cmd->failInstr; - } - return; - } - case VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES: - { - VARIOUS_ARGS(); - gBattlescriptCurrInstr = cmd->nextInstr; - AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, battler, 0, 0, 0); - return; - } - case VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES: - { - VARIOUS_ARGS(); - gBattlescriptCurrInstr = cmd->nextInstr; - AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, battler, 0, 0, 0); - return; - } - case VARIOUS_STORE_HEALING_WISH: - { - VARIOUS_ARGS(); - if (gCurrentMove == MOVE_LUNAR_DANCE) - gBattleStruct->storedLunarDance |= gBitTable[battler]; - else - gBattleStruct->storedHealingWish |= gBitTable[battler]; - break; - } - case VARIOUS_HIT_SWITCH_TARGET_FAILED: - { - VARIOUS_ARGS(); - gBattleStruct->hitSwitchTargetFailed = TRUE; - gBattlescriptCurrInstr = cmd->nextInstr; - return; - } - case VARIOUS_TRY_REVIVAL_BLESSING: - { - VARIOUS_ARGS(const u8 *failInstr); - u32 side = GetBattlerSide(gBattlerAttacker); - u8 index = GetFirstFaintedPartyIndex(gBattlerAttacker); - - // Move fails if there are no battlers to revive. - if (index == PARTY_SIZE) - { - gBattlescriptCurrInstr = cmd->failInstr; - return; - } - - // Battler selected! Revive and go to next instruction. - if (gSelectedMonPartyId != PARTY_SIZE) - { - struct Pokemon *party = GetSideParty(side); - - u16 hp = GetMonData(&party[gSelectedMonPartyId], MON_DATA_MAX_HP) / 2; - BtlController_EmitSetMonData(gBattlerAttacker, BUFFER_A, REQUEST_HP_BATTLE, gBitTable[gSelectedMonPartyId], sizeof(hp), &hp); - MarkBattlerForControllerExec(gBattlerAttacker); - PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gSelectedMonPartyId], MON_DATA_SPECIES)); - - // If an on-field battler is revived, it needs to be sent out again. - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && - gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)] == gSelectedMonPartyId) - { - gBattleScripting.battler = BATTLE_PARTNER(gBattlerAttacker); - gBattleCommunication[MULTIUSE_STATE] = TRUE; - } - - gSelectedMonPartyId = PARTY_SIZE; - gBattlescriptCurrInstr = cmd->nextInstr; - return; - } - - // Open party menu, wait to go to next instruction. - else - { - BtlController_EmitChoosePokemon(gBattlerAttacker, BUFFER_A, PARTY_ACTION_CHOOSE_FAINTED_MON, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gBattlerAttacker]); - MarkBattlerForControllerExec(gBattlerAttacker); - } - return; - } } // End of switch (cmd->id) gBattlescriptCurrInstr = cmd->nextInstr; @@ -11244,7 +11161,7 @@ static void Cmd_setreflect(void) gSideTimers[GetBattlerSide(gBattlerAttacker)].reflectTimer = 5; gSideTimers[GetBattlerSide(gBattlerAttacker)].reflectBattlerId = gBattlerAttacker; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) + if (IsDoubleBattle() && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_REFLECT_DOUBLE; else gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_REFLECT_SINGLE; @@ -11367,7 +11284,7 @@ static void Cmd_jumpifnotfirstturn(void) const u8 *jumpInstr = cmd->jumpInstr; - if (gDisableStructs[gBattlerAttacker].isFirstTurn) + if (gDisableStructs[gBattlerAttacker].isFirstTurn && !(gSpecialStatuses[gBattlerAttacker].instructedChosenTarget)) gBattlescriptCurrInstr = cmd->nextInstr; else gBattlescriptCurrInstr = jumpInstr; @@ -12108,7 +12025,7 @@ static void Cmd_forcerandomswitch(void) battler2PartyId = gBattlerPartyIndexes[gBattlerTarget]; battler1PartyId = gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerTarget)]; } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (IsDoubleBattle()) { firstMonId = 0; lastMonId = PARTY_SIZE; @@ -12143,7 +12060,7 @@ static void Cmd_forcerandomswitch(void) { *(gBattleStruct->battlerPartyIndexes + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget]; gBattlescriptCurrInstr = BattleScript_RoarSuccessSwitch; - gBattleStruct->forcedSwitch |= gBitTable[gBattlerTarget]; + gBattleStruct->forcedSwitch |= 1u << gBattlerTarget; *(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = validMons[RandomUniform(RNG_FORCE_RANDOM_SWITCH, 0, validMonsCount - 1)]; if (!IsMultiBattle()) @@ -12230,9 +12147,9 @@ static void Cmd_tryconversiontypechange(void) else moveType = TYPE_NORMAL; } - if (moveType != gBattleMons[gBattlerAttacker].type1 - && moveType != gBattleMons[gBattlerAttacker].type2 - && moveType != gBattleMons[gBattlerAttacker].type3) + if (moveType != gBattleMons[gBattlerAttacker].types[0] + && moveType != gBattleMons[gBattlerAttacker].types[1] + && moveType != gBattleMons[gBattlerAttacker].types[2]) { break; } @@ -12258,7 +12175,7 @@ static void Cmd_tryconversiontypechange(void) moveType = TYPE_NORMAL; } } - while (moveType == gBattleMons[gBattlerAttacker].type1 || moveType == gBattleMons[gBattlerAttacker].type2 || moveType == gBattleMons[gBattlerAttacker].type3); + while (moveType == gBattleMons[gBattlerAttacker].types[0] || moveType == gBattleMons[gBattlerAttacker].types[1] || moveType == gBattleMons[gBattlerAttacker].types[2]); SET_BATTLER_TYPE(gBattlerAttacker, moveType); PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType); @@ -12306,7 +12223,7 @@ static void Cmd_setlightscreen(void) gSideTimers[GetBattlerSide(gBattlerAttacker)].lightscreenTimer = 5; gSideTimers[GetBattlerSide(gBattlerAttacker)].lightscreenBattlerId = gBattlerAttacker; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) + if (IsDoubleBattle() && CountAliveMonsInBattle(BATTLE_ALIVE_SIDE, gBattlerAttacker) == 2) gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_LIGHTSCREEN_DOUBLE; else gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_SET_LIGHTSCREEN_SINGLE; @@ -12471,15 +12388,15 @@ static void Cmd_updatestatusicon(void) else { battler = gBattlerAttacker; - if (!(gAbsentBattlerFlags & gBitTable[battler])) + if (!(gAbsentBattlerFlags & (1u << battler))) { BtlController_EmitStatusIconUpdate(battler, BUFFER_A, gBattleMons[battler].status1, gBattleMons[battler].status2); MarkBattlerForControllerExec(battler); } - if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if ((IsDoubleBattle())) { battler = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); - if (!(gAbsentBattlerFlags & gBitTable[battler])) + if (!(gAbsentBattlerFlags & (1u << battler))) { BtlController_EmitStatusIconUpdate(battler, BUFFER_A, gBattleMons[battler].status1, gBattleMons[battler].status2); MarkBattlerForControllerExec(battler); @@ -12513,8 +12430,8 @@ static void Cmd_setfocusenergy(void) CMD_ARGS(u8 battler); u8 battler = GetBattlerForBattleScript(cmd->battler); - if ((gMovesInfo[gCurrentMove].effect == EFFECT_DRAGON_CHEER && (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE) || (gAbsentBattlerFlags & gBitTable[battler]))) - || gBattleMons[battler].status2 & STATUS2_FOCUS_ENERGY_ANY) + if ((gMovesInfo[gCurrentMove].effect == EFFECT_DRAGON_CHEER && (!(IsDoubleBattle()) || (gAbsentBattlerFlags & (1u << battler)))) + || gBattleMons[battler].status2 & STATUS2_FOCUS_ENERGY_ANY) { gMoveResultFlags |= MOVE_RESULT_FAILED; gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FOCUS_ENERGY_FAILED; @@ -12657,7 +12574,7 @@ static void Cmd_mimicattackcopy(void) PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gBattlerTarget]) - gDisableStructs[gBattlerAttacker].mimickedMoves |= gBitTable[gCurrMovePos]; + gDisableStructs[gBattlerAttacker].mimickedMoves |= 1u << gCurrMovePos; gBattlescriptCurrInstr = cmd->nextInstr; } else @@ -12898,7 +12815,7 @@ static void Cmd_settypetorandomresistance(void) { gBattlescriptCurrInstr = cmd->failInstr; } - else if (gLastHitByType[gBattlerAttacker] == TYPE_STELLAR) + else if (gLastHitByType[gBattlerAttacker] == TYPE_STELLAR || gLastHitByType[gBattlerAttacker] == TYPE_MYSTERY) { gBattlescriptCurrInstr = cmd->failInstr; } @@ -12913,7 +12830,7 @@ static void Cmd_settypetorandomresistance(void) { case UQ_4_12(0): case UQ_4_12(0.5): - resistTypes |= gBitTable[i]; + resistTypes |= 1u << i; break; } } @@ -12921,11 +12838,11 @@ static void Cmd_settypetorandomresistance(void) while (resistTypes != 0) { i = Random() % NUMBER_OF_MON_TYPES; - if (resistTypes & gBitTable[i]) + if (resistTypes & (1u << i)) { if (IS_BATTLER_OF_TYPE(gBattlerAttacker, i)) { - resistTypes &= ~(gBitTable[i]); // Type resists, but the user is already of this type. + resistTypes &= ~(1u << i); // Type resists, but the user is already of this type. } else { @@ -13015,7 +12932,7 @@ static void Cmd_trychoosesleeptalkmove(void) if (gMovesInfo[gBattleMons[gBattlerAttacker].moves[i]].sleepTalkBanned || gBattleMoveEffects[gMovesInfo[gBattleMons[gBattlerAttacker].moves[i]].effect].twoTurnEffect) { - unusableMovesBits |= gBitTable[i]; + unusableMovesBits |= (1 << (i)); } } @@ -13027,11 +12944,11 @@ 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]; + gDisableStructs[gBattlerAttacker].usedMoves |= 1u << gCurrMovePos; do { movePosition = MOD(Random(), MAX_MON_MOVES); - } while ((gBitTable[movePosition] & unusableMovesBits)); + } while ((1u << movePosition) & unusableMovesBits); if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !IS_MOVE_STATUS(gBattleMons[gBattlerAttacker].moves[movePosition])) { @@ -13142,7 +13059,7 @@ static void Cmd_tryspiteppreduce(void) gBattleMons[gBattlerTarget].pp[i] -= ppToDeduct; // if (MOVE_IS_PERMANENT(gBattlerTarget, i)), but backwards - if (!(gDisableStructs[gBattlerTarget].mimickedMoves & gBitTable[i]) + if (!(gDisableStructs[gBattlerTarget].mimickedMoves & (1u << i)) && !(gBattleMons[gBattlerTarget].status2 & STATUS2_TRANSFORMED)) { BtlController_EmitSetMonData(gBattlerTarget, BUFFER_A, REQUEST_PPMOVE1_BATTLE + i, 0, sizeof(gBattleMons[gBattlerTarget].pp[i]), &gBattleMons[gBattlerTarget].pp[i]); @@ -13256,8 +13173,8 @@ static void Cmd_healpartystatus(void) gBattleMons[gBattlerAttacker].status1 = 0; gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE - && !(gAbsentBattlerFlags & gBitTable[partner])) + if (IsDoubleBattle() + && !(gAbsentBattlerFlags & (1u <battler); gStatuses3[battler] |= STATUS3_CHARGED_UP; - gDisableStructs[battler].chargeTimer = 2; + if (B_CHARGE < GEN_9) + gDisableStructs[battler].chargeTimer = 2; + else + gDisableStructs[battler].chargeTimer = 0; gBattlescriptCurrInstr++; gBattlescriptCurrInstr = cmd->nextInstr; } @@ -14099,8 +14019,8 @@ static void Cmd_trysethelpinghand(void) gBattlerTarget = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE - && !(gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + if (IsDoubleBattle() + && !(gAbsentBattlerFlags & (1u << gBattlerTarget)) && !gProtectStructs[gBattlerAttacker].helpingHand && !gProtectStructs[gBattlerTarget].helpingHand) { @@ -14142,8 +14062,8 @@ static void Cmd_tryswapitems(void) | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_SECRET_BASE | BATTLE_TYPE_RECORDED_LINK)) - && (gWishFutureKnock.knockedOffMons[sideAttacker] & gBitTable[gBattlerPartyIndexes[gBattlerAttacker]] - || gWishFutureKnock.knockedOffMons[sideTarget] & gBitTable[gBattlerPartyIndexes[gBattlerTarget]])) + && (gWishFutureKnock.knockedOffMons[sideAttacker] & (1u << gBattlerPartyIndexes[gBattlerAttacker]) + || gWishFutureKnock.knockedOffMons[sideTarget] & (1u << gBattlerPartyIndexes[gBattlerTarget]))) { gBattlescriptCurrInstr = cmd->failInstr; } @@ -14626,7 +14546,7 @@ static void Cmd_switchoutabilities(void) case ABILITY_NATURAL_CURE: gBattleMons[battler].status1 = 0; BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, - gBitTable[*(gBattleStruct->battlerPartyIndexes + battler)], + 1u << *(gBattleStruct->battlerPartyIndexes + battler), sizeof(gBattleMons[battler].status1), &gBattleMons[battler].status1); MarkBattlerForControllerExec(battler); @@ -14637,7 +14557,7 @@ static void Cmd_switchoutabilities(void) if (gBattleMoveDamage > gBattleMons[battler].maxHP) gBattleMoveDamage = gBattleMons[battler].maxHP; BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_HP_BATTLE, - gBitTable[*(gBattleStruct->battlerPartyIndexes + battler)], + 1u << *(gBattleStruct->battlerPartyIndexes + battler), sizeof(gBattleMoveDamage), &gBattleMoveDamage); MarkBattlerForControllerExec(battler); @@ -14852,7 +14772,10 @@ static void Cmd_tryrecycleitem(void) u16 *usedHeldItem; - usedHeldItem = &gBattleStruct->usedHeldItems[gBattlerPartyIndexes[gBattlerAttacker]][GetBattlerSide(gBattlerAttacker)]; + if (gCurrentMove == MOVE_NONE && GetBattlerAbility(gBattlerAttacker) == ABILITY_PICKUP) + usedHeldItem = &gBattleStruct->usedHeldItems[gBattlerPartyIndexes[gBattlerTarget]][GetBattlerSide(gBattlerTarget)]; + else + usedHeldItem = &gBattleStruct->usedHeldItems[gBattlerPartyIndexes[gBattlerAttacker]][GetBattlerSide(gBattlerAttacker)]; if (*usedHeldItem != ITEM_NONE && gBattleMons[gBattlerAttacker].item == ITEM_NONE) { gLastUsedItem = *usedHeldItem; @@ -14921,8 +14844,8 @@ static void Cmd_pursuitdoubles(void) u32 battler = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker))); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE - && !(gAbsentBattlerFlags & gBitTable[battler]) + if (IsDoubleBattle() + && !(gAbsentBattlerFlags & (1u << battler)) && gChosenActionByBattler[battler] == B_ACTION_USE_MOVE && gMovesInfo[gChosenMoveByBattler[battler]].effect == EFFECT_PURSUIT) { @@ -15602,7 +15525,7 @@ static void Cmd_trainerslideout(void) { CMD_ARGS(u8 position); - u32 battler = GetBattlerAtPosition(cmd->position); + u32 battler = GetBattlerForBattleScript(cmd->position); BtlController_EmitTrainerSlideBack(battler, BUFFER_A); MarkBattlerForControllerExec(battler); @@ -15664,17 +15587,26 @@ static void Cmd_swapstatstages(void) gBattlescriptCurrInstr = cmd->nextInstr; } +static u16 *GetBattlerStat(struct BattlePokemon *battler, u32 stat) +{ + switch (stat) + { + case STAT_ATK: return &battler->attack; + case STAT_DEF: return &battler->defense; + case STAT_SPATK: return &battler->spAttack; + case STAT_SPDEF: return &battler->spDefense; + default: return NULL; + } +} + static void Cmd_averagestats(void) { CMD_ARGS(u8 stat); - u8 stat = cmd->stat; - u16 atkStat = *(u16 *)((&gBattleMons[gBattlerAttacker].attack) + (stat - 1)); - u16 defStat = *(u16 *)((&gBattleMons[gBattlerTarget].attack) + (stat - 1)); - u16 average = (atkStat + defStat) / 2; - - *(u16 *)((&gBattleMons[gBattlerAttacker].attack) + (stat - 1)) = average; - *(u16 *)((&gBattleMons[gBattlerTarget].attack) + (stat - 1)) = average; + u16 *stat1 = GetBattlerStat(&gBattleMons[gBattlerAttacker], cmd->stat); + u16 *stat2 = GetBattlerStat(&gBattleMons[gBattlerTarget], cmd->stat); + u16 avg = (*stat1 + *stat2) / 2; + *stat1 = *stat2 = avg; gBattlescriptCurrInstr = cmd->nextInstr; } @@ -15919,7 +15851,7 @@ bool32 IsMoveAffectedByParentalBond(u32 move, u32 battler) && gMovesInfo[move].strikeCount < 2 && gMovesInfo[move].effect != EFFECT_MULTI_HIT) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { switch (GetBattlerMoveTargetType(battler, move)) { @@ -16036,7 +15968,7 @@ void BS_SetZEffect(void) static void TryUpdateRoundTurnOrder(void) { - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { u32 i; u32 j = 0; @@ -16066,7 +15998,6 @@ static void TryUpdateRoundTurnOrder(void) for (i = 0; roundUsers[i] != 0xFF && i < 3; i++) { gBattlerByTurnOrder[currRounder] = roundUsers[i]; - gActionsByTurnOrder[currRounder] = gActionsByTurnOrder[roundUsers[i]]; gProtectStructs[roundUsers[i]].quash = TRUE; // Make it so their turn order can't be changed again currRounder++; } @@ -16075,7 +16006,6 @@ static void TryUpdateRoundTurnOrder(void) for (i = 0; nonRoundUsers[i] != 0xFF && i < 3; i++) { gBattlerByTurnOrder[currRounder] = nonRoundUsers[i]; - gActionsByTurnOrder[currRounder] = gActionsByTurnOrder[nonRoundUsers[i]]; currRounder++; } } @@ -16174,8 +16104,7 @@ void BS_ItemRestoreHP(void) // Check if the recipient is an active battler. if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) battler = gBattlerAttacker; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE - && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) + else if (IsDoubleBattle() && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) battler = BATTLE_PARTNER(gBattlerAttacker); // Get amount to heal. @@ -16212,9 +16141,9 @@ void BS_ItemRestoreHP(void) SetMonData(&party[gBattleStruct->itemPartyIndex[gBattlerAttacker]], MON_DATA_HP, &hp); // Revived battlers on the field need to be brought back. - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && battler != MAX_BATTLERS_COUNT) + if (IsDoubleBattle() && battler != MAX_BATTLERS_COUNT) { - gAbsentBattlerFlags &= ~gBitTable[battler]; + gAbsentBattlerFlags &= ~(1u << battler); gBattleMons[battler].hp = hp; gBattleCommunication[MULTIUSE_STATE] = TRUE; } @@ -16238,7 +16167,7 @@ void BS_ItemCureStatus(void) previousStatus2 = gBattleMons[battler].status2; gBattleMons[gBattlerAttacker].status2 &= ~GetItemStatus2Mask(gLastUsedItem); } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + else if (IsDoubleBattle() && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) { battler = BATTLE_PARTNER(gBattlerAttacker); @@ -16303,7 +16232,7 @@ void BS_ItemRestorePP(void) // Check if the recipient is an active battler. if (gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[gBattlerAttacker]) battler = gBattlerAttacker; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + else if (IsDoubleBattle() && gBattleStruct->itemPartyIndex[gBattlerAttacker] == gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)]) battler = BATTLE_PARTNER(gBattlerAttacker); @@ -16523,30 +16452,30 @@ void BS_TryReflectType(void) } 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; + gBattleMons[gBattlerAttacker].types[0] = TYPE_NORMAL; + gBattleMons[gBattlerAttacker].types[1] = TYPE_NORMAL; + gBattleMons[gBattlerAttacker].types[2] = targetType3; gBattlescriptCurrInstr = cmd->nextInstr; } else if (targetType1 == TYPE_MYSTERY && targetType2 != TYPE_MYSTERY) { - gBattleMons[gBattlerAttacker].type1 = targetType2; - gBattleMons[gBattlerAttacker].type2 = targetType2; - gBattleMons[gBattlerAttacker].type3 = targetType3; + gBattleMons[gBattlerAttacker].types[0] = targetType2; + gBattleMons[gBattlerAttacker].types[1] = targetType2; + gBattleMons[gBattlerAttacker].types[2] = targetType3; gBattlescriptCurrInstr = cmd->nextInstr; } else if (targetType1 != TYPE_MYSTERY && targetType2 == TYPE_MYSTERY) { - gBattleMons[gBattlerAttacker].type1 = targetType1; - gBattleMons[gBattlerAttacker].type2 = targetType1; - gBattleMons[gBattlerAttacker].type3 = targetType3; + gBattleMons[gBattlerAttacker].types[0] = targetType1; + gBattleMons[gBattlerAttacker].types[1] = targetType1; + gBattleMons[gBattlerAttacker].types[2] = targetType3; gBattlescriptCurrInstr = cmd->nextInstr; } else { - gBattleMons[gBattlerAttacker].type1 = targetType1; - gBattleMons[gBattlerAttacker].type2 = targetType2; - gBattleMons[gBattlerAttacker].type3 = targetType3; + gBattleMons[gBattlerAttacker].types[0] = targetType1; + gBattleMons[gBattlerAttacker].types[1] = targetType2; + gBattleMons[gBattlerAttacker].types[2] = targetType3; gBattlescriptCurrInstr = cmd->nextInstr; } } @@ -16607,7 +16536,7 @@ void BS_SetPledge(void) u32 i = 0; u32 k = 0; - if (gBattleStruct->pledgeMove) + if (gBattleStruct->pledgeMove && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE)) { PrepareStringBattle(STRINGID_USEDMOVE, gBattlerAttacker); gHitMarker |= HITMARKER_ATTACKSTRING_PRINTED; @@ -16634,8 +16563,10 @@ void BS_SetPledge(void) gBattleCommunication[MSG_DISPLAY] = 0; } else if ((gChosenActionByBattler[partner] == B_ACTION_USE_MOVE) - && gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && IsDoubleBattle() && IsBattlerAlive(partner) + && GetBattlerTurnOrderNum(gBattlerAttacker) < GetBattlerTurnOrderNum(partner) + && !(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) && gCurrentMove != partnerMove && gMovesInfo[partnerMove].effect == EFFECT_PLEDGE) { @@ -16674,8 +16605,8 @@ void BS_SetPledge(void) } else { + gBattleStruct->pledgeMove = FALSE; gBattlescriptCurrInstr = cmd->jumpInstr; - } } @@ -17132,3 +17063,176 @@ void BS_DamageToQuarterTargetHP(void) gBattlescriptCurrInstr = cmd->nextInstr; } + +void BS_FickleBeamDamageCalculation(void) +{ + NATIVE_ARGS(); + gBattleStruct->fickleBeamBoosted = FALSE; + + if (RandomPercentage(RNG_FICKLE_BEAM, 30)) + { + gBattleStruct->fickleBeamBoosted = TRUE; + gBattlescriptCurrInstr = BattleScript_FickleBeamDoubled; + } + else + { + gBattlescriptCurrInstr = cmd->nextInstr; + } +} + +void BS_TryTarShot(void) +{ + NATIVE_ARGS(const u8 *failInstr); + if (gDisableStructs[gBattlerTarget].tarShot || GetActiveGimmick(gBattlerTarget) == GIMMICK_TERA) + { + gBattlescriptCurrInstr = cmd->failInstr; + } + else + { + gDisableStructs[gBattlerTarget].tarShot = TRUE; + gBattlescriptCurrInstr = cmd->nextInstr; + } +} + +void BS_JumpIfBlockedBySoundproof(void) +{ + NATIVE_ARGS(u8 battler, const u8 *jumpInstr); + u32 battler = GetBattlerForBattleScript(cmd->battler); + if (gMovesInfo[gCurrentMove].soundMove && GetBattlerAbility(battler) == ABILITY_SOUNDPROOF) + { + gLastUsedAbility = ABILITY_SOUNDPROOF; + gBattlescriptCurrInstr = cmd->jumpInstr; + RecordAbilityBattle(battler, gLastUsedAbility); + gBattlerAbility = battler; + } + else + { + gBattlescriptCurrInstr = cmd->nextInstr; + } +} + +void BS_TeatimeInvul(void) +{ + NATIVE_ARGS(u8 battler, const u8 *jumpInstr); + + u32 battler = GetBattlerForBattleScript(cmd->battler); + if (ItemId_GetPocket(gBattleMons[battler].item) == POCKET_BERRIES && !(gStatuses3[gBattlerTarget] & (STATUS3_SEMI_INVULNERABLE))) + gBattlescriptCurrInstr = cmd->nextInstr; + else + gBattlescriptCurrInstr = cmd->jumpInstr; +} + +void BS_TeatimeTargets(void) +{ + NATIVE_ARGS(const u8 *failInstr); + u32 count = 0, i; + + for (i = 0; i < gBattlersCount; i++) + { + if (IsTeatimeAffected(i)) + count++; + } + if (count == 0) + gBattlescriptCurrInstr = cmd->failInstr; + else + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_TryWindRiderPower(void) +{ + NATIVE_ARGS(u8 battler, const u8 *failInstr); + + u32 battler = GetBattlerForBattleScript(cmd->battler); + u16 ability = GetBattlerAbility(battler); + if (GetBattlerSide(battler) == GetBattlerSide(gBattlerAttacker) + && (ability == ABILITY_WIND_RIDER || ability == ABILITY_WIND_POWER)) + { + gLastUsedAbility = ability; + RecordAbilityBattle(battler, gLastUsedAbility); + gBattlerAbility = gBattleScripting.battler = battler; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + gBattlescriptCurrInstr = cmd->failInstr; + } +} + +void BS_ActivateWeatherChangeAbilities(void) +{ + NATIVE_ARGS(u8 battler); + + u32 battler = GetBattlerForBattleScript(cmd->battler); + gBattlescriptCurrInstr = cmd->nextInstr; + AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, battler, 0, 0, 0); +} + +void BS_ActivateTerrainChangeAbilities(void) +{ + NATIVE_ARGS(u8 battler); + + u32 battler = GetBattlerForBattleScript(cmd->battler); + gBattlescriptCurrInstr = cmd->nextInstr; + AbilityBattleEffects(ABILITYEFFECT_ON_TERRAIN, battler, 0, 0, 0); +} + +void BS_StoreHealingWish(void) +{ + NATIVE_ARGS(u8 battler); + + u32 battler = GetBattlerForBattleScript(cmd->battler); + if (gCurrentMove == MOVE_LUNAR_DANCE) + gBattleStruct->storedLunarDance |= 1u << battler; + else + gBattleStruct->storedHealingWish |= 1u << battler; + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_HitSwitchTargetFailed(void) +{ + NATIVE_ARGS(); + gBattleStruct->hitSwitchTargetFailed = TRUE; + gBattlescriptCurrInstr = cmd->nextInstr; +} + +void BS_TryRevivalBlessing(void) +{ + NATIVE_ARGS(const u8 *failInstr); + u32 side = GetBattlerSide(gBattlerAttacker); + u8 index = GetFirstFaintedPartyIndex(gBattlerAttacker); + + // Move fails if there are no battlers to revive. + if (index == PARTY_SIZE) + { + gBattlescriptCurrInstr = cmd->failInstr; + return; + } + + // Battler selected! Revive and go to next instruction. + if (gSelectedMonPartyId != PARTY_SIZE) + { + struct Pokemon *party = GetSideParty(side); + + u16 hp = GetMonData(&party[gSelectedMonPartyId], MON_DATA_MAX_HP) / 2; + BtlController_EmitSetMonData(gBattlerAttacker, BUFFER_A, REQUEST_HP_BATTLE, 1u << gSelectedMonPartyId, sizeof(hp), &hp); + MarkBattlerForControllerExec(gBattlerAttacker); + PREPARE_SPECIES_BUFFER(gBattleTextBuff1, GetMonData(&party[gSelectedMonPartyId], MON_DATA_SPECIES)); + + // If an on-field battler is revived, it needs to be sent out again. + if (IsDoubleBattle() && + gBattlerPartyIndexes[BATTLE_PARTNER(gBattlerAttacker)] == gSelectedMonPartyId) + { + gBattleScripting.battler = BATTLE_PARTNER(gBattlerAttacker); + gBattleCommunication[MULTIUSE_STATE] = TRUE; + } + + gSelectedMonPartyId = PARTY_SIZE; + gBattlescriptCurrInstr = cmd->nextInstr; + } + else + { + // Open party menu, wait to go to next instruction. + BtlController_EmitChoosePokemon(gBattlerAttacker, BUFFER_A, PARTY_ACTION_CHOOSE_FAINTED_MON, PARTY_SIZE, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gBattlerAttacker]); + MarkBattlerForControllerExec(gBattlerAttacker); + } +} diff --git a/src/battle_setup.c b/src/battle_setup.c index 41f2b9b502..54c4f99b92 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -1940,7 +1940,7 @@ void IncrementRematchStepCounter(void) #if FREE_MATCH_CALL == FALSE if (!HasAtLeastFiveBadges()) return; - + if (IsVsSeekerEnabled()) return; diff --git a/src/battle_tent.c b/src/battle_tent.c index 8c6a94509a..49df90ffd6 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -139,6 +139,7 @@ static void BufferVerdanturfTentTrainerIntro(void) static void SaveVerdanturfTentChallenge(void) { + ClearEnemyPartyAfterChallenge(); gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; @@ -189,6 +190,7 @@ static void SetFallarborTentPrize(void) static void SaveFallarborTentChallenge(void) { + ClearEnemyPartyAfterChallenge(); gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; @@ -244,6 +246,7 @@ static void SetSlateportTentPrize(void) static void SaveSlateportTentChallenge(void) { + ClearEnemyPartyAfterChallenge(); gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; diff --git a/src/battle_terastal.c b/src/battle_terastal.c index 6866c6aaad..2c140414db 100644 --- a/src/battle_terastal.c +++ b/src/battle_terastal.c @@ -30,7 +30,7 @@ void ActivateTera(u32 battler) if (B_FLAG_TERA_ORB_CHARGED != 0 && (B_FLAG_TERA_ORB_NO_COST == 0 || !FlagGet(B_FLAG_TERA_ORB_NO_COST)) && side == B_SIDE_PLAYER - && !(gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !IsPartnerMonFromSameTrainer(battler))) + && !(IsDoubleBattle() && !IsPartnerMonFromSameTrainer(battler))) { FlagClear(B_FLAG_TERA_ORB_CHARGED); } @@ -63,6 +63,10 @@ bool32 CanTerastallize(u32 battler) { u32 holdEffect = GetBattlerHoldEffect(battler, FALSE); + // Prevents Zigzagoon from terastalizing in vanilla. + if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE && GetBattlerSide(battler) == B_SIDE_OPPONENT) + return FALSE; + if (TESTING || GetBattlerSide(battler) == B_SIDE_OPPONENT) { // Skip all other checks in this block, go to HasTrainerUsedGimmick @@ -110,14 +114,14 @@ u32 GetBattlerTeraType(u32 battler) void ExpendTypeStellarBoost(u32 battler, u32 type) { if (type < 32 && gBattleMons[battler].species != SPECIES_TERAPAGOS_STELLAR) // avoid OOB access - gBattleStruct->stellarBoostFlags[GetBattlerSide(battler)] |= gBitTable[type]; + gBattleStruct->stellarBoostFlags[GetBattlerSide(battler)] |= 1u << type; } // Checks whether a type's Stellar boost has been expended. bool32 IsTypeStellarBoosted(u32 battler, u32 type) { if (type < 32) // avoid OOB access - return !(gBattleStruct->stellarBoostFlags[GetBattlerSide(battler)] & gBitTable[type]); + return !(gBattleStruct->stellarBoostFlags[GetBattlerSide(battler)] & (1u << type)); else return FALSE; } diff --git a/src/battle_tower.c b/src/battle_tower.c index 045f87ad65..72858a854c 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -143,7 +143,7 @@ const u8 gTowerFemaleFacilityClasses[20] = FACILITY_CLASS_LASS }; -const u8 gTowerMaleTrainerGfxIds[30] = +const u16 gTowerMaleTrainerGfxIds[30] = { OBJ_EVENT_GFX_HIKER, OBJ_EVENT_GFX_TUBER_M, @@ -177,7 +177,7 @@ const u8 gTowerMaleTrainerGfxIds[30] = OBJ_EVENT_GFX_HIKER }; -const u8 gTowerFemaleTrainerGfxIds[20] = +const u16 gTowerFemaleTrainerGfxIds[20] = { OBJ_EVENT_GFX_WOMAN_2, OBJ_EVENT_GFX_TUBER_F, @@ -2206,6 +2206,7 @@ static void SaveTowerChallenge(void) if (gSpecialVar_0x8005 == 0 && (challengeNum > 1 || gSaveBlock2Ptr->frontier.curChallengeBattleNum != 0)) SaveBattleTowerRecord(); + ClearEnemyPartyAfterChallenge(); gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005; VarSet(VAR_TEMP_CHALLENGE_STATUS, 0); gSaveBlock2Ptr->frontier.challengePaused = TRUE; @@ -3524,7 +3525,7 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount) u16 FacilityClassToGraphicsId(u8 facilityClass) { - u8 trainerObjectGfxId; + u16 trainerObjectGfxId; u8 i; // Search male classes. diff --git a/src/battle_tv.c b/src/battle_tv.c index bba14054c9..22e5ab1c31 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -338,17 +338,8 @@ void BattleTv_SetDataBasedOnString(u16 stringId) defSide = GetBattlerSide(gBattlerTarget); effSide = GetBattlerSide(gEffectBattler); scriptingSide = GetBattlerSide(gBattleMsgDataPtr->scrActive); - - if (atkSide == B_SIDE_PLAYER) - atkMon = &gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]]; - else - atkMon = &gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker]]; - - if (defSide == B_SIDE_PLAYER) - defMon = &gPlayerParty[gBattlerPartyIndexes[gBattlerTarget]]; - else - defMon = &gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]]; - + atkMon = GetPartyBattlerData(gBattlerAttacker); + defMon = GetPartyBattlerData(gBattlerTarget); moveSlot = GetBattlerMoveSlotId(gBattlerAttacker, gBattleMsgDataPtr->currentMove); if (moveSlot >= MAX_MON_MOVES && IsNotSpecialBattleString(stringId) && stringId > BATTLESTRINGS_TABLE_START) @@ -775,7 +766,7 @@ void BattleTv_SetDataBasedOnMove(u16 move, u16 weatherFlags, struct DisableStruc tvPtr->side[atkSide].usedMoveSlot = moveSlot; AddMovePoints(PTS_MOVE_EFFECT, moveSlot, move, 0); AddPointsBasedOnWeather(weatherFlags, move, moveSlot); - if (disableStructPtr->chargeTimer != 0) + if (gStatuses3[gBattlerAttacker] & STATUS3_CHARGED_UP) AddMovePoints(PTS_ELECTRIC, move, moveSlot, 0); if (move == MOVE_WISH) diff --git a/src/battle_util.c b/src/battle_util.c index 678778bf1a..83af21cdcf 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -130,7 +130,7 @@ void HandleAction_UseMove(void) u16 moveTarget; gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - if (gBattleStruct->absentBattlerFlags & gBitTable[gBattlerAttacker] || !IsBattlerAlive(gBattlerAttacker)) + if (gBattleStruct->absentBattlerFlags & (1u << gBattlerAttacker) || !IsBattlerAlive(gBattlerAttacker)) { gCurrentActionFuncId = B_ACTION_FINISHED; return; @@ -145,6 +145,8 @@ void HandleAction_UseMove(void) gBattleScripting.savedMoveEffect = 0; gCurrMovePos = gChosenMovePos = *(gBattleStruct->chosenMovePositions + gBattlerAttacker); + gBattleStruct->obedienceResult = GetAttackerObedienceForAction(); + // choose move if (gProtectStructs[gBattlerAttacker].noValidMoves) { @@ -196,7 +198,7 @@ void HandleAction_UseMove(void) // Set dynamic move type. SetTypeBeforeUsingMove(gChosenMove, gBattlerAttacker); - GET_MOVE_TYPE(gChosenMove, moveType); + moveType = GetMoveType(gCurrentMove); // check Z-Move used if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !IS_MOVE_STATUS(gCurrentMove) && !IsZMove(gCurrentMove)) @@ -221,7 +223,7 @@ void HandleAction_UseMove(void) { gBattleStruct->moveTarget[gBattlerAttacker] = gBattlerTarget = gSideTimers[side].followmeTarget; // follow me moxie fix } - else if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (IsDoubleBattle() && gSideTimers[side].followmeTimer == 0 && (gMovesInfo[gCurrentMove].power != 0 || (moveTarget != MOVE_TARGET_USER && moveTarget != MOVE_TARGET_ALL_BATTLERS)) && ((GetBattlerAbility(*(gBattleStruct->moveTarget + gBattlerAttacker)) != ABILITY_LIGHTNING_ROD && moveType == TYPE_ELECTRIC) @@ -305,8 +307,7 @@ void HandleAction_UseMove(void) gBattlerTarget = battler; } } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE - && moveTarget & MOVE_TARGET_RANDOM) + else if (IsDoubleBattle() && moveTarget & MOVE_TARGET_RANDOM) { if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) { @@ -323,7 +324,7 @@ void HandleAction_UseMove(void) gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); } - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget] + if (gAbsentBattlerFlags & (1u << gBattlerTarget) && GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) { gBattlerTarget = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerTarget))); @@ -336,8 +337,7 @@ void HandleAction_UseMove(void) else gBattlerTarget = gBattlerAttacker; } - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE - && moveTarget == MOVE_TARGET_FOES_AND_ALLY) + else if (IsDoubleBattle() && moveTarget == MOVE_TARGET_FOES_AND_ALLY) { for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++) { @@ -350,7 +350,7 @@ void HandleAction_UseMove(void) else { gBattlerTarget = *(gBattleStruct->moveTarget + gBattlerAttacker); - if (!IsBattlerAlive(gBattlerTarget)) + if (!IsBattlerAlive(gBattlerTarget) && moveTarget != MOVE_TARGET_OPPONENTS_FIELD) { if (GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)) { @@ -722,7 +722,8 @@ void HandleAction_ActionFinished(void) | HITMARKER_CHARGING | HITMARKER_NEVER_SET | HITMARKER_IGNORE_DISGUISE); // check if Stellar type boost should be used up - GET_MOVE_TYPE(gCurrentMove, moveType); + moveType = GetMoveType(gCurrentMove); + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA && GetBattlerTeraType(gBattlerAttacker) == TYPE_STELLAR && gMovesInfo[gCurrentMove].category != DAMAGE_CATEGORY_STATUS @@ -965,29 +966,29 @@ static void UNUSED MarkAllBattlersForControllerExec(void) if (gBattleTypeFlags & BATTLE_TYPE_LINK) { for (i = 0; i < gBattlersCount; i++) - gBattleControllerExecFlags |= gBitTable[i] << (32 - MAX_BATTLERS_COUNT); + gBattleControllerExecFlags |= 1u << (i + 32 - MAX_BATTLERS_COUNT); } else { for (i = 0; i < gBattlersCount; i++) - gBattleControllerExecFlags |= gBitTable[i]; + gBattleControllerExecFlags |= 1 << i; } } bool32 IsBattlerMarkedForControllerExec(u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_LINK) - return (gBattleControllerExecFlags & (gBitTable[battler] << 0x1C)) != 0; + return (gBattleControllerExecFlags & (1 << (battler + 28))) != 0; else - return (gBattleControllerExecFlags & (gBitTable[battler])) != 0; + return (gBattleControllerExecFlags & (1 << battler)) != 0; } void MarkBattlerForControllerExec(u32 battler) { if (gBattleTypeFlags & BATTLE_TYPE_LINK) - gBattleControllerExecFlags |= gBitTable[battler] << (32 - MAX_BATTLERS_COUNT); + gBattleControllerExecFlags |= 1u << (32 - MAX_BATTLERS_COUNT); else - gBattleControllerExecFlags |= gBitTable[battler]; + gBattleControllerExecFlags |= 1u << battler; } void MarkBattlerReceivedLinkData(u32 battler) @@ -995,9 +996,9 @@ void MarkBattlerReceivedLinkData(u32 battler) s32 i; for (i = 0; i < GetLinkPlayerCount(); i++) - gBattleControllerExecFlags |= gBitTable[battler] << (i << 2); + gBattleControllerExecFlags |= 1u << (battler + (i << 2)); - gBattleControllerExecFlags &= ~((1 << 28) << battler); + gBattleControllerExecFlags &= ~(1u << (28 + battler)); } const u8* CancelMultiTurnMoves(u32 battler) @@ -1137,7 +1138,6 @@ void PrepareStringBattle(u16 stringId, u32 battler) && ((gSpecialStatuses[gBattlerTarget].changedStatsBattlerId != gBattlerTarget) || gBattleScripting.stickyWebStatDrop == 1) && !(gBattleScripting.stickyWebStatDrop == 1 && gSideTimers[targetSide].stickyWebBattlerSide == targetSide)) // Sticky Web must have been set by the foe { - gBattleScripting.stickyWebStatDrop = 0; gBattlerAbility = gBattlerTarget; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_AbilityRaisesDefenderStat; @@ -1174,7 +1174,7 @@ void ResetSentPokesToOpponentValue(void) gSentPokesToOpponent[1] = 0; for (i = 0; i < gBattlersCount; i += 2) - bits |= gBitTable[gBattlerPartyIndexes[i]]; + bits |= 1u << gBattlerPartyIndexes[i]; for (i = 1; i < gBattlersCount; i += 2) gSentPokesToOpponent[(i & BIT_FLANK) >> 1] = bits; @@ -1192,8 +1192,8 @@ void OpponentSwitchInResetSentPokesToOpponentValue(u32 battler) for (i = 0; i < gBattlersCount; i += 2) { - if (!(gAbsentBattlerFlags & gBitTable[i])) - bits |= gBitTable[gBattlerPartyIndexes[i]]; + if (!(gAbsentBattlerFlags & (1u << i))) + bits |= 1u << gBattlerPartyIndexes[i]; } gSentPokesToOpponent[flank] = bits; } @@ -1209,7 +1209,7 @@ void UpdateSentPokesToOpponentValue(u32 battler) { s32 i; for (i = 1; i < gBattlersCount; i++) - gSentPokesToOpponent[(i & BIT_FLANK) >> 1] |= gBitTable[gBattlerPartyIndexes[battler]]; + gSentPokesToOpponent[(i & BIT_FLANK) >> 1] |= 1u << gBattlerPartyIndexes[battler]; } } @@ -1250,7 +1250,7 @@ bool32 IsBelchPreventingMove(u32 battler, u32 move) if (gMovesInfo[move].effect != EFFECT_BELCH) return FALSE; - return !(gBattleStruct->ateBerry[battler & BIT_SIDE] & gBitTable[gBattlerPartyIndexes[battler]]); + return !(gBattleStruct->ateBerry[battler & BIT_SIDE] & (1u << gBattlerPartyIndexes[battler])); } // Dynamax bypasses all selection prevention except Taunt and Assault Vest. @@ -1515,55 +1515,55 @@ u8 CheckMoveLimitations(u32 battler, u8 unusableMoves, u16 check) moveEffect = gMovesInfo[move].effect; // No move if (check & MOVE_LIMITATION_ZEROMOVE && move == MOVE_NONE) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // No PP else if (check & MOVE_LIMITATION_PP && gBattleMons[battler].pp[i] == 0) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Placeholder else if (check & MOVE_LIMITATION_PLACEHOLDER && moveEffect == EFFECT_PLACEHOLDER) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Disable else if (check & MOVE_LIMITATION_DISABLED && move == gDisableStructs[battler].disabledMove) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Torment else if (check & MOVE_LIMITATION_TORMENTED && move == gLastMoves[battler] && gBattleMons[battler].status2 & STATUS2_TORMENT) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Taunt else if (check & MOVE_LIMITATION_TAUNT && gDisableStructs[battler].tauntTimer && IS_MOVE_STATUS(move)) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Imprison else if (check & MOVE_LIMITATION_IMPRISON && GetImprisonedMovesCount(battler, move)) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Encore else if (check & MOVE_LIMITATION_ENCORE && gDisableStructs[battler].encoreTimer && gDisableStructs[battler].encoredMove != move) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Choice Items else if (check & MOVE_LIMITATION_CHOICE_ITEM && HOLD_EFFECT_CHOICE(holdEffect) && *choicedMove != MOVE_NONE && *choicedMove != MOVE_UNAVAILABLE && *choicedMove != move) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Assault Vest else if (check & MOVE_LIMITATION_ASSAULT_VEST && holdEffect == HOLD_EFFECT_ASSAULT_VEST && IS_MOVE_STATUS(move) && gMovesInfo[move].effect != EFFECT_ME_FIRST) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Gravity else if (check & MOVE_LIMITATION_GRAVITY && IsGravityPreventingMove(move)) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Heal Block else if (check & MOVE_LIMITATION_HEAL_BLOCK && IsHealBlockPreventingMove(battler, move)) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Belch else if (check & MOVE_LIMITATION_BELCH && IsBelchPreventingMove(battler, move)) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Throat Chop else if (check & MOVE_LIMITATION_THROAT_CHOP && gDisableStructs[battler].throatChopTimer && gMovesInfo[move].soundMove) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Stuff Cheeks else if (check & MOVE_LIMITATION_STUFF_CHEEKS && moveEffect == EFFECT_STUFF_CHEEKS && ItemId_GetPocket(gBattleMons[battler].item) != POCKET_BERRIES) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Gorilla Tactics else if (check & MOVE_LIMITATION_CHOICE_ITEM && GetBattlerAbility(battler) == ABILITY_GORILLA_TACTICS && *choicedMove != MOVE_NONE && *choicedMove != MOVE_UNAVAILABLE && *choicedMove != move) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; // Can't Use Twice flag else if (check & MOVE_LIMITATION_CANT_USE_TWICE && gMovesInfo[move].cantUseTwice && move == gLastResultingMoves[battler]) - unusableMoves |= gBitTable[i]; + unusableMoves |= 1u << i; } return unusableMoves; } @@ -1671,8 +1671,6 @@ enum ENDTURN_PSYCHIC_TERRAIN, ENDTURN_ION_DELUGE, ENDTURN_FAIRY_LOCK, - ENDTURN_RETALIATE, - ENDTURN_WEATHER_FORM, ENDTURN_STATUS_HEAL, ENDTURN_RAINBOW, ENDTURN_SEA_OF_FIRE, @@ -1705,10 +1703,10 @@ u8 DoFieldEndTurnEffects(void) { u8 effect = 0; - for (gBattlerAttacker = 0; gBattlerAttacker < gBattlersCount && gAbsentBattlerFlags & gBitTable[gBattlerAttacker]; gBattlerAttacker++) + for (gBattlerAttacker = 0; gBattlerAttacker < gBattlersCount && gAbsentBattlerFlags & (1u << gBattlerAttacker); gBattlerAttacker++) { } - for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount && gAbsentBattlerFlags & gBitTable[gBattlerTarget]; gBattlerTarget++) + for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount && gAbsentBattlerFlags & (1u << gBattlerTarget); gBattlerTarget++) { } @@ -2165,25 +2163,6 @@ u8 DoFieldEndTurnEffects(void) } gBattleStruct->turnCountersTracker++; break; - case ENDTURN_RETALIATE: - if (gSideTimers[B_SIDE_PLAYER].retaliateTimer > 0) - gSideTimers[B_SIDE_PLAYER].retaliateTimer--; - if (gSideTimers[B_SIDE_OPPONENT].retaliateTimer > 0) - gSideTimers[B_SIDE_OPPONENT].retaliateTimer--; - gBattleStruct->turnCountersTracker++; - break; - case ENDTURN_WEATHER_FORM: - for (i = 0; i < gBattlersCount; i++) - { - if (AbilityBattleEffects(ABILITYEFFECT_ON_WEATHER, i, 0, 0, 0)) - { - effect++; - break; - } - } - if (effect == 0) - gBattleStruct->turnCountersTracker++; - break; case ENDTURN_STATUS_HEAL: for (gBattlerAttacker = 0; gBattlerAttacker < gBattlersCount; gBattlerAttacker++) { @@ -2323,8 +2302,8 @@ enum ENDTURN_HEALBLOCK, ENDTURN_EMBARGO, ENDTURN_LOCK_ON, - ENDTURN_CHARGE, ENDTURN_LASER_FOCUS, + ENDTURN_CHARGE, ENDTURN_TAUNT, ENDTURN_YAWN, ENDTURN_ITEMS2, @@ -2341,6 +2320,7 @@ enum ENDTURN_DYNAMAX, ENDTURN_GMAX_MOVE_RESIDUAL_DAMAGE, ENDTURN_SEA_OF_FIRE_DAMAGE, + ENDTURN_ITEMS3, ENDTURN_BATTLER_COUNT }; @@ -2372,7 +2352,7 @@ u8 DoBattlerEndTurnEffects(void) while (gBattleStruct->turnEffectsBattlerId < gBattlersCount && gBattleStruct->turnEffectsTracker <= ENDTURN_BATTLER_COUNT) { battler = gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->turnEffectsBattlerId]; - if (gAbsentBattlerFlags & gBitTable[battler]) + if (gAbsentBattlerFlags & (1u << battler)) { gBattleStruct->turnEffectsBattlerId++; continue; @@ -2401,6 +2381,8 @@ u8 DoBattlerEndTurnEffects(void) { gBattleScripting.battler = battler; gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 16; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; BattleScriptExecute(BattleScript_DamagingWeather); effect++; } @@ -2411,7 +2393,7 @@ u8 DoBattlerEndTurnEffects(void) && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)) { gBattleScripting.battler = battler; - gBattleMoveDamage = -1 * (GetNonDynamaxMaxHP(battler) / 16); + gBattleMoveDamage = -1 * max(1, GetNonDynamaxMaxHP(battler) / 16); BattleScriptExecute(BattleScript_IceBodyHeal); effect++; } @@ -2425,6 +2407,8 @@ u8 DoBattlerEndTurnEffects(void) { gBattleScripting.battler = battler; gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 16; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; BattleScriptExecute(BattleScript_DamagingWeather); effect++; } @@ -2469,6 +2453,15 @@ u8 DoBattlerEndTurnEffects(void) effect++; gBattleStruct->turnEffectsTracker++; break; + case ENDTURN_ITEMS3: // berry effects + if (gItemsInfo[gBattleMons[battler].item].pocket == POCKET_BERRIES + || GetBattlerHoldEffect(battler, TRUE) == HOLD_EFFECT_RESTORE_HP) // Edge case for Berry Juice + { + if (ItemBattleEffects(ITEMEFFECT_NORMAL, battler, FALSE)) + effect++; + } + gBattleStruct->turnEffectsTracker++; + break; case ENDTURN_ORBS: if (IsBattlerAlive(battler) && ItemBattleEffects(ITEMEFFECT_ORBS, battler, FALSE)) effect++; @@ -2783,7 +2776,7 @@ u8 DoBattlerEndTurnEffects(void) gBattleStruct->turnEffectsTracker++; break; case ENDTURN_CHARGE: // charge - if (gDisableStructs[battler].chargeTimer && --gDisableStructs[battler].chargeTimer == 0) + if (gDisableStructs[battler].chargeTimer > 0 && --gDisableStructs[battler].chargeTimer == 0) gStatuses3[battler] &= ~STATUS3_CHARGED_UP; gBattleStruct->turnEffectsTracker++; break; @@ -2900,9 +2893,11 @@ u8 DoBattlerEndTurnEffects(void) case ENDTURN_ELECTRIFY: gStatuses4[battler] &= ~STATUS4_ELECTRIFIED; gBattleStruct->turnEffectsTracker++; + break; case ENDTURN_POWDER: gBattleMons[battler].status2 &= ~STATUS2_POWDER; gBattleStruct->turnEffectsTracker++; + break; case ENDTURN_THROAT_CHOP: if (gDisableStructs[battler].throatChopTimer && --gDisableStructs[battler].throatChopTimer == 0) { @@ -2970,7 +2965,7 @@ u8 DoBattlerEndTurnEffects(void) && --gBattleStruct->dynamax.dynamaxTurns[battler] == 0) { gBattleScripting.battler = battler; - UndoDynamax(battler); + UndoDynamax(battler); BattleScriptExecute(BattleScript_DynamaxEnds); effect++; } @@ -3034,7 +3029,7 @@ bool32 HandleWishPerishSongOnTurnEnd(void) if (gWishFutureKnock.futureSightCounter[battler] != 0 && --gWishFutureKnock.futureSightCounter[battler] == 0 - && !(gAbsentBattlerFlags & gBitTable[battler])) + && !(gAbsentBattlerFlags & (1u << battler))) { struct Pokemon *party; @@ -3075,7 +3070,7 @@ bool32 HandleWishPerishSongOnTurnEnd(void) while (gBattleStruct->wishPerishSongBattlerId < gBattlersCount) { battler = gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->wishPerishSongBattlerId]; - if (gAbsentBattlerFlags & gBitTable[battler]) + if (gAbsentBattlerFlags & (1u << battler)) { gBattleStruct->wishPerishSongBattlerId++; continue; @@ -3141,8 +3136,8 @@ bool32 HandleFaintedMonActions(void) gBattleStruct->faintedActionsState++; for (i = 0; i < gBattlersCount; i++) { - if (gAbsentBattlerFlags & gBitTable[i] && !HasNoMonsToSwitch(i, PARTY_SIZE, PARTY_SIZE)) - gAbsentBattlerFlags &= ~(gBitTable[i]); + if (gAbsentBattlerFlags & (1u << i) && !HasNoMonsToSwitch(i, PARTY_SIZE, PARTY_SIZE)) + gAbsentBattlerFlags &= ~(1u << i); } // fall through case 1: @@ -3150,8 +3145,8 @@ bool32 HandleFaintedMonActions(void) { gBattlerFainted = gBattlerTarget = gBattleStruct->faintedActionsBattlerId; if (gBattleMons[gBattleStruct->faintedActionsBattlerId].hp == 0 - && !(gBattleStruct->givenExpMons & gBitTable[gBattlerPartyIndexes[gBattleStruct->faintedActionsBattlerId]]) - && !(gAbsentBattlerFlags & gBitTable[gBattleStruct->faintedActionsBattlerId])) + && !(gBattleStruct->givenExpMons & (1u << gBattlerPartyIndexes[gBattleStruct->faintedActionsBattlerId])) + && !(gAbsentBattlerFlags & (1u << gBattleStruct->faintedActionsBattlerId))) { BattleScriptExecute(BattleScript_GiveExp); gBattleStruct->faintedActionsState = 2; @@ -3172,7 +3167,7 @@ bool32 HandleFaintedMonActions(void) && !NoAliveMonsForEitherParty() && gCurrentTurnActionNumber != gBattlersCount) { - gAbsentBattlerFlags |= gBitTable[gBattlerFainted]; + gAbsentBattlerFlags |= 1u << gBattlerFainted; if (gBattleStruct->faintedActionsState != 1) return FALSE; } @@ -3194,7 +3189,7 @@ bool32 HandleFaintedMonActions(void) { gBattlerFainted = gBattlerTarget = gBattleStruct->faintedActionsBattlerId; if (gBattleMons[gBattleStruct->faintedActionsBattlerId].hp == 0 - && !(gAbsentBattlerFlags & gBitTable[gBattleStruct->faintedActionsBattlerId])) + && !(gAbsentBattlerFlags & (1u << gBattleStruct->faintedActionsBattlerId))) { BattleScriptExecute(BattleScript_HandleFaintedMon); gBattleStruct->faintedActionsState = 5; @@ -3249,7 +3244,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; + gStatuses4[gBattlerAttacker] &= ~STATUS4_GLAIVE_RUSH; gBattleStruct->atkCancellerTracker++; break; case CANCELLER_SKY_DROP: @@ -3312,7 +3307,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) if (!RandomPercentage(RNG_FROZEN, 20)) { gBattlescriptCurrInstr = BattleScript_MoveUsedIsFrozen; - gHitMarker |= HITMARKER_NO_ATTACKSTRING; + gHitMarker |= (HITMARKER_NO_ATTACKSTRING | HITMARKER_UNABLE_TO_USE_MOVE); } else // unfreeze { @@ -3500,7 +3495,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) gCurrentMove = MOVE_BIDE; gBattleScripting.bideDmg = gBideDmg[gBattlerAttacker] * 2; gBattlerTarget = gBideTarget[gBattlerAttacker]; - if (gAbsentBattlerFlags & gBitTable[gBattlerTarget]) + if (gAbsentBattlerFlags & (1u << gBattlerTarget)) gBattlerTarget = GetMoveTarget(MOVE_BIDE, MOVE_TARGET_SELECTED + 1); gBattlescriptCurrInstr = BattleScript_BideAttack; } @@ -3567,6 +3562,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) gProtectStructs[gBattlerAttacker].powderSelfDmg = TRUE; gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 4; gBattlescriptCurrInstr = BattleScript_MoveUsedPowder; + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; effect = 1; } } @@ -3584,7 +3580,8 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) gBattleStruct->atkCancellerTracker++; break; case CANCELLER_Z_MOVES: - if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE) + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE + && gBattleStruct->obedienceResult == OBEYS) { // For Z-Mirror Move, so it doesn't play the animation twice. bool32 alreadyUsed = HasTrainerUsedGimmick(gBattlerAttacker, GIMMICK_Z_MOVE); @@ -3659,13 +3656,14 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType) else { gMultiHitCounter = gMovesInfo[gCurrentMove].strikeCount; - PREPARE_BYTE_NUMBER_BUFFER(gBattleScripting.multihitString, 3, 0) if (gMovesInfo[gCurrentMove].effect == EFFECT_DRAGON_DARTS && CanTargetPartner(gBattlerAttacker, gBattlerTarget) && TargetFullyImmuneToCurrMove(gBattlerAttacker, gBattlerTarget)) gBattlerTarget = BATTLE_PARTNER(gBattlerTarget); } + + PREPARE_BYTE_NUMBER_BUFFER(gBattleScripting.multihitString, 3, 0) } else if (B_BEAT_UP >= GEN_5 && gMovesInfo[gCurrentMove].effect == EFFECT_BEAT_UP) { @@ -3744,7 +3742,7 @@ bool32 HasNoMonsToSwitch(u32 battler, u8 partyIdBattlerOn1, u8 partyIdBattlerOn2 u32 i, side, playerId, flankId; struct Pokemon *party; - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) return FALSE; side = GetBattlerSide(battler); @@ -3895,21 +3893,6 @@ static const u16 sWeatherFlagsInfo[][3] = [ENUM_WEATHER_FOG] = {B_WEATHER_FOG_TEMPORARY, B_WEATHER_FOG_PERMANENT, HOLD_EFFECT_NONE}, }; -static void ShouldChangeFormInWeather(u32 battler) -{ - int i; - int side = GetBattlerSide(battler); - struct Pokemon *party = GetSideParty(side); - - for (i = 0; i < PARTY_SIZE; i++) - { - if (GetMonData(&party[i], MON_DATA_SPECIES) == SPECIES_EISCUE_NOICE_FACE) - gBattleStruct->allowedToChangeFormInWeather[i][side] = TRUE; - else - gBattleStruct->allowedToChangeFormInWeather[i][side] = FALSE; - } -} - bool32 TryChangeBattleWeather(u32 battler, u32 weatherEnumId, bool32 viaAbility) { u16 battlerAbility = GetBattlerAbility(battler); @@ -3923,7 +3906,6 @@ bool32 TryChangeBattleWeather(u32 battler, u32 weatherEnumId, bool32 viaAbility) else if (B_ABILITY_WEATHER < GEN_6 && viaAbility && !(gBattleWeather & sWeatherFlagsInfo[weatherEnumId][1])) { gBattleWeather = (sWeatherFlagsInfo[weatherEnumId][0] | sWeatherFlagsInfo[weatherEnumId][1]); - ShouldChangeFormInWeather(battler); return TRUE; } else if (!(gBattleWeather & (sWeatherFlagsInfo[weatherEnumId][0] | sWeatherFlagsInfo[weatherEnumId][1]))) @@ -3933,7 +3915,6 @@ bool32 TryChangeBattleWeather(u32 battler, u32 weatherEnumId, bool32 viaAbility) gWishFutureKnock.weatherDuration = 8; else gWishFutureKnock.weatherDuration = 5; - ShouldChangeFormInWeather(battler); return TRUE; } return FALSE; @@ -4061,6 +4042,54 @@ static inline bool32 HadMoreThanHalfHpNowDoesnt(u32 battler) && gBattleMons[battler].hp <= cutoff); } +#define ANIM_STAT_HP 0 +#define ANIM_STAT_ATK 1 +#define ANIM_STAT_DEF 2 +#define ANIM_STAT_SPATK 3 +#define ANIM_STAT_SPDEF 4 +#define ANIM_STAT_SPEED 5 +#define ANIM_STAT_ACC 6 +#define ANIM_STAT_EVASION 7 +static void ChooseStatBoostAnimation(u32 battler) +{ + u32 stat; + bool32 statBuffMoreThan1 = FALSE; + u32 static const statsOrder[NUM_BATTLE_STATS] = + { + [ANIM_STAT_HP] = STAT_HP, + [ANIM_STAT_ATK] = STAT_ATK, + [ANIM_STAT_DEF] = STAT_DEF, + [ANIM_STAT_SPATK] = STAT_SPATK, + [ANIM_STAT_SPDEF] = STAT_SPDEF, + [ANIM_STAT_SPEED] = STAT_SPEED, + [ANIM_STAT_ACC] = STAT_ACC, + [ANIM_STAT_EVASION] = STAT_EVASION, + }; + gBattleScripting.animArg1 = 0; + + for (stat = 1; stat < NUM_BATTLE_STATS; stat++) // Start loop at 1 to avoid STAT_HP + { + if ((gQueuedStatBoosts[battler].stats & (1 << statsOrder[stat])) == 0) + continue; + + if (!statBuffMoreThan1) + statBuffMoreThan1 = ((gQueuedStatBoosts[battler].stats & (1 << statsOrder[stat])) > 1); + + if (gBattleScripting.animArg1 != 0) // Already set in a different stat so now boosting multiple stats + gBattleScripting.animArg1 = (statBuffMoreThan1 ? STAT_ANIM_MULTIPLE_PLUS2 : STAT_ANIM_MULTIPLE_PLUS1); + else + gBattleScripting.animArg1 = GET_STAT_BUFF_ID((statsOrder[stat] + 1)) + (statBuffMoreThan1 ? STAT_ANIM_PLUS2 : STAT_ANIM_PLUS1); + } +} +#undef ANIM_STAT_HP +#undef ANIM_STAT_ATK +#undef ANIM_STAT_DEF +#undef ANIM_STAT_SPATK +#undef ANIM_STAT_SPDEF +#undef ANIM_STAT_SPEED +#undef ANIM_STAT_ACC +#undef ANIM_STAT_EVASION + u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 moveArg) { u32 effect = 0; @@ -4086,7 +4115,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 else move = gCurrentMove; - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); switch (caseID) { @@ -4328,7 +4357,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 target1 = GetBattlerAtPosition(side); target2 = GetBattlerAtPosition(side + BIT_FLANK); gSpecialStatuses[battler].switchInAbilityDone = TRUE; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { if (!gAbilitiesInfo[gBattleMons[target1].ability].cantBeTraced && gBattleMons[target1].hp != 0 && !gAbilitiesInfo[gBattleMons[target2].ability].cantBeTraced && gBattleMons[target2].hp != 0) @@ -4459,7 +4488,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 for (j = 0; j < MAX_MON_MOVES; j++) { move = gBattleMons[i].moves[j]; - GET_MOVE_TYPE(move, moveType); + moveType = GetMoveType(move); if (CalcTypeEffectivenessMultiplier(move, moveType, i, battler, ABILITY_ANTICIPATION, FALSE) >= UQ_4_12(2.0)) { effect++; @@ -4685,11 +4714,11 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; case ABILITY_SUPERSWEET_SYRUP: if (!gSpecialStatuses[battler].switchInAbilityDone - && !(gBattleStruct->supersweetSyrup[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]])) + && !(gBattleStruct->supersweetSyrup[GetBattlerSide(battler)] & (1u << gBattlerPartyIndexes[battler]))) { gBattlerAttacker = battler; gSpecialStatuses[battler].switchInAbilityDone = TRUE; - gBattleStruct->supersweetSyrup[GetBattlerSide(battler)] |= gBitTable[gBattlerPartyIndexes[battler]]; + gBattleStruct->supersweetSyrup[GetBattlerSide(battler)] |= (1u << gBattlerPartyIndexes[battler]); BattleScriptPushCursorAndCallback(BattleScript_SupersweetSyrupActivates); effect++; } @@ -4726,12 +4755,12 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; case ABILITY_INTREPID_SWORD: if (!gSpecialStatuses[battler].switchInAbilityDone && CompareStat(battler, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN) - && !(gBattleStruct->intrepidSwordBoost[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]])) + && !(gBattleStruct->intrepidSwordBoost[GetBattlerSide(battler)] & (1u << gBattlerPartyIndexes[battler]))) { gBattleScripting.savedBattler = gBattlerAttacker; gBattlerAttacker = battler; if (B_INTREPID_SWORD == GEN_9) - gBattleStruct->intrepidSwordBoost[GetBattlerSide(battler)] |= gBitTable[gBattlerPartyIndexes[battler]]; + gBattleStruct->intrepidSwordBoost[GetBattlerSide(battler)] |= 1u << gBattlerPartyIndexes[battler]; gSpecialStatuses[battler].switchInAbilityDone = TRUE; SET_STATCHANGER(STAT_ATK, 1, FALSE); BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn); @@ -4740,18 +4769,31 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 break; case ABILITY_DAUNTLESS_SHIELD: if (!gSpecialStatuses[battler].switchInAbilityDone && CompareStat(battler, STAT_DEF, MAX_STAT_STAGE, CMP_LESS_THAN) - && !(gBattleStruct->dauntlessShieldBoost[GetBattlerSide(battler)] & gBitTable[gBattlerPartyIndexes[battler]])) + && !(gBattleStruct->dauntlessShieldBoost[GetBattlerSide(battler)] & (1u << gBattlerPartyIndexes[battler]))) { gBattleScripting.savedBattler = gBattlerAttacker; gBattlerAttacker = battler; if (B_DAUNTLESS_SHIELD == GEN_9) - gBattleStruct->dauntlessShieldBoost[GetBattlerSide(battler)] |= gBitTable[gBattlerPartyIndexes[battler]]; + gBattleStruct->dauntlessShieldBoost[GetBattlerSide(battler)] |= 1u << gBattlerPartyIndexes[battler]; gSpecialStatuses[battler].switchInAbilityDone = TRUE; SET_STATCHANGER(STAT_DEF, 1, FALSE); BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn); effect++; } break; + case ABILITY_WIND_RIDER: + if (!gSpecialStatuses[battler].switchInAbilityDone + && CompareStat(battler, STAT_ATK, MAX_STAT_STAGE, CMP_LESS_THAN) + && gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_TAILWIND) + { + gBattleScripting.savedBattler = gBattlerAttacker; + gBattlerAttacker = battler; + gSpecialStatuses[battler].switchInAbilityDone = TRUE; + SET_STATCHANGER(STAT_ATK, 1, FALSE); + BattleScriptPushCursorAndCallback(BattleScript_BattlerAbilityStatRaiseOnSwitchIn); + effect++; + } + break; case ABILITY_DESOLATE_LAND: if (TryChangeBattleWeather(battler, ENUM_WEATHER_SUN_PRIMAL, TRUE)) { @@ -4849,11 +4891,11 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 if (!gSpecialStatuses[battler].switchInAbilityDone && GetMonData(mon, MON_DATA_SPECIES) == SPECIES_PALAFIN_HERO - && !(gBattleStruct->transformZeroToHero[side] & gBitTable[gBattlerPartyIndexes[battler]])) + && !(gBattleStruct->transformZeroToHero[side] & (1u << gBattlerPartyIndexes[battler]))) { gSpecialStatuses[battler].switchInAbilityDone = TRUE; gBattlerAttacker = battler; - gBattleStruct->transformZeroToHero[side] |= gBitTable[gBattlerPartyIndexes[battler]]; + gBattleStruct->transformZeroToHero[side] |= 1u << gBattlerPartyIndexes[battler]; BattleScriptPushCursorAndCallback(BattleScript_ZeroToHeroActivates); effect++; } @@ -4914,6 +4956,17 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 effect++; } break; + case ABILITY_ICE_FACE: + if (IsBattlerWeatherAffected(battler, B_WEATHER_HAIL | B_WEATHER_SNOW) + && gBattleMons[battler].species == SPECIES_EISCUE_NOICE_FACE + && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)) + { + // TODO: Convert this to a proper FORM_CHANGE type. + gBattleMons[battler].species = SPECIES_EISCUE_ICE_FACE; + BattleScriptPushCursorAndCallback(BattleScript_BattlerFormChangeWithStringEnd3); + effect++; + } + break; } break; case ABILITYEFFECT_ENDTURN: @@ -4922,8 +4975,19 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 gBattlerAttacker = battler; switch (gLastUsedAbility) { + case ABILITY_PICKUP: + if (gBattleMons[battler].item == ITEM_NONE + && gBattleStruct->changedItems[battler] == ITEM_NONE // Will not inherit an item + && PickupHasValidTarget(battler)) + { + gBattlerTarget = RandomUniformExcept(RNG_PICKUP, 0, gBattlersCount - 1, CantPickupItem); + gLastUsedItem = GetUsedHeldItem(gBattlerTarget); + BattleScriptPushCursorAndCallback(BattleScript_PickupActivates); + effect++; + } + break; case ABILITY_HARVEST: - if ((IsBattlerWeatherAffected(battler, B_WEATHER_SUN) || Random() % 2 == 0) + if ((IsBattlerWeatherAffected(battler, B_WEATHER_SUN) || RandomPercentage(RNG_HARVEST, 50)) && gBattleMons[battler].item == ITEM_NONE && gBattleStruct->changedItems[battler] == ITEM_NONE // Will not inherit an item && ItemId_GetPocket(GetUsedHeldItem(battler)) == POCKET_BERRIES) @@ -5000,9 +5064,9 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 for (i = STAT_ATK; i < statsNum; i++) { if (CompareStat(battler, i, MIN_STAT_STAGE, CMP_GREATER_THAN)) - validToLower |= gBitTable[i]; + validToLower |= 1u << i; if (CompareStat(battler, i, MAX_STAT_STAGE, CMP_LESS_THAN)) - validToRaise |= gBitTable[i]; + validToRaise |= 1u << i; } if (validToLower != 0 || validToRaise != 0) // Can lower one stat, or can raise one stat @@ -5013,16 +5077,16 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 do { i = (Random() % statsNum) + STAT_ATK; - } while (!(validToRaise & gBitTable[i])); + } while (!(validToRaise & (1u << i))); SET_STATCHANGER(i, 2, FALSE); - validToLower &= ~(gBitTable[i]); // Can't lower the same stat as raising. + validToLower &= ~(1u << i); // Can't lower the same stat as raising. } if (validToLower != 0) // Find stat to lower { do { i = (Random() % statsNum) + STAT_ATK; - } while (!(validToLower & gBitTable[i])); + } while (!(validToLower & (1u << i))); SET_STATCHANGER2(gBattleScripting.savedStatChanger, i, 1, TRUE); } BattleScriptPushCursorAndCallback(BattleScript_MoodyActivates); @@ -5177,7 +5241,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && BlocksPrankster(move, gBattlerAttacker, gBattlerTarget, TRUE) && !(IS_MOVE_STATUS(move) && (gLastUsedAbility == ABILITY_MAGIC_BOUNCE || gProtectStructs[gBattlerTarget].bounceMove))) { - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE) || !(moveTarget & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))) + if (!IsDoubleBattle() || !(moveTarget & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY))) CancelMultiTurnMoves(gBattlerAttacker); // Don't cancel moves that can hit two targets bc one target might not be protected gBattleScripting.battler = gBattlerAbility = gBattlerTarget; battleScriptBlocksMove = BattleScript_DarkTypePreventsPrankster; @@ -5248,6 +5312,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } if (caseID == ABILITYEFFECT_WOULD_ABSORB) { + gBattleStruct->pledgeMove = FALSE; if (effect && gLastUsedAbility != 0xFFFF) RecordAbilityBattle(battler, gLastUsedAbility); @@ -5255,6 +5320,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } else if (effect == 1) // Drain Hp ability. { + gBattleStruct->pledgeMove = FALSE; if (BATTLER_MAX_HP(battler) || (B_HEAL_BLOCKING >= GEN_5 && gStatuses3[battler] & STATUS3_HEAL_BLOCK)) { if ((gProtectStructs[gBattlerAttacker].notFirstStrike)) @@ -5277,6 +5343,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } else if (effect == 2) // Boost Stat ability; { + gBattleStruct->pledgeMove = FALSE; if (!CompareStat(battler, statId, MAX_STAT_STAGE, CMP_LESS_THAN)) { if ((gProtectStructs[gBattlerAttacker].notFirstStrike)) @@ -5298,6 +5365,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } else if (effect == 3) { + gBattleStruct->pledgeMove = FALSE; if (!(gBattleResources->flags->flags[battler] & RESOURCE_FLAG_FLASH_FIRE)) { gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FLASH_FIRE_BOOST; @@ -5518,6 +5586,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && TARGET_TURN_DAMAGED && !IS_BATTLER_OF_TYPE(battler, moveType) && moveType != TYPE_STELLAR + && moveType != TYPE_MYSTERY && IsBattlerAlive(battler)) { SET_BATTLER_TYPE(battler, moveType); @@ -5867,7 +5936,6 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && HadMoreThanHalfHpNowDoesnt(gBattlerTarget) && !(TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove))) { - gBattlerAttacker = gBattlerTarget; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_AngerShellActivates; effect++; @@ -5978,6 +6046,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect; effect++; } + break; } break; case ABILITYEFFECT_MOVE_END_OTHER: // Abilities that activate on *another* battler's moveend: Dancer, Soul-Heart, Receiver, Symbiosis @@ -6002,6 +6071,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 // Edge case for dance moves that hit multiply targets gHitMarker &= ~HITMARKER_NO_ATTACKSTRING; + SetTypeBeforeUsingMove(gCalledMove, battler); // Make sure that the target isn't an ally - if it is, target the original user if (GetBattlerSide(gBattlerTarget) == GetBattlerSide(gBattlerAttacker)) @@ -6025,40 +6095,10 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_OPPORTUNIST: if (gProtectStructs[battler].activateOpportunist == 2) { - bool32 statBuffMoreThan1 = FALSE; - bool32 handleSpeedAnimLater = FALSE; gBattleScripting.animArg1 = 0; gBattleScripting.battler = battler; gProtectStructs[battler].activateOpportunist--; - - for (i = 0; i < (NUM_BATTLE_STATS - 1); i++) - { - if ((gQueuedStatBoosts[battler].stats & (1 << i)) == 0) - continue; - - if (i == STAT_SPEED) - { - handleSpeedAnimLater = TRUE; - continue; - } - - if (!statBuffMoreThan1) - statBuffMoreThan1 = ((gQueuedStatBoosts[battler].stats & (1 << i)) > 1); - - if (gBattleScripting.animArg1 != 0) //Already set in a different stat so now boosting multiple stats - gBattleScripting.animArg1 = (!statBuffMoreThan1 ? STAT_ANIM_MULTIPLE_PLUS1 : STAT_ANIM_MULTIPLE_PLUS2); - else - gBattleScripting.animArg1 = GET_STAT_BUFF_ID((i + 1)) + (!statBuffMoreThan1 ? STAT_ANIM_PLUS1 : STAT_ANIM_PLUS2); - - } - if (handleSpeedAnimLater) - { - if (gBattleScripting.animArg1 != 0) //Already set in a different stat so now boosting multiple stats - gBattleScripting.animArg1 = (!statBuffMoreThan1 ? STAT_ANIM_MULTIPLE_PLUS1 : STAT_ANIM_MULTIPLE_PLUS2); - else - gBattleScripting.animArg1 = GET_STAT_BUFF_ID((STAT_SPEED + 1)) + (!statBuffMoreThan1 ? STAT_ANIM_PLUS1 : STAT_ANIM_PLUS2); - } - + ChooseStatBoostAnimation(battler); BattleScriptPushCursorAndCallback(BattleScript_OpportunistCopyStatChange); effect = 1; } @@ -6248,17 +6288,17 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 } break; case ABILITYEFFECT_ON_WEATHER: // For ability effects that activate when the battle weather changes. - battler = gBattlerAbility = gBattleScripting.battler; gLastUsedAbility = GetBattlerAbility(battler); switch (gLastUsedAbility) { case ABILITY_FORECAST: case ABILITY_FLOWER_GIFT: if ((IsBattlerWeatherAffected(battler, gBattleWeather) - || gBattleWeather == B_WEATHER_NONE - || !WEATHER_HAS_EFFECT) // Air Lock active - && TryBattleFormChange(battler, FORM_CHANGE_BATTLE_WEATHER)) + || gBattleWeather == B_WEATHER_NONE + || !WEATHER_HAS_EFFECT) // Air Lock active + && TryBattleFormChange(battler, FORM_CHANGE_BATTLE_WEATHER)) { + gBattleScripting.battler = battler; BattleScriptPushCursorAndCallback(BattleScript_BattlerFormChangeWithStringEnd3); effect++; } @@ -6266,11 +6306,10 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 case ABILITY_ICE_FACE: if (IsBattlerWeatherAffected(battler, B_WEATHER_HAIL | B_WEATHER_SNOW) && gBattleMons[battler].species == SPECIES_EISCUE_NOICE_FACE - && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) - && gBattleStruct->allowedToChangeFormInWeather[gBattlerPartyIndexes[battler]][GetBattlerSide(battler)]) + && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)) { // TODO: Convert this to a proper FORM_CHANGE type. - gBattleStruct->allowedToChangeFormInWeather[gBattlerPartyIndexes[battler]][GetBattlerSide(battler)] = FALSE; + gBattleScripting.battler = battler; gBattleMons[battler].species = SPECIES_EISCUE_ICE_FACE; BattleScriptPushCursorAndCallback(BattleScript_BattlerFormChangeWithStringEnd3); effect++; @@ -6281,7 +6320,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 { gDisableStructs[battler].weatherAbilityDone = TRUE; PREPARE_STAT_BUFFER(gBattleTextBuff1, GetHighestStatId(battler)); - gBattlerAbility = gBattleScripting.battler = battler; + gBattleScripting.battler = battler; BattleScriptPushCursorAndCallback(BattleScript_ProtosynthesisActivates); effect++; } @@ -7007,43 +7046,11 @@ static u8 TryConsumeMirrorHerb(u32 battler, bool32 execute) if (gProtectStructs[battler].eatMirrorHerb) { - u32 i; - bool32 statBuffMoreThan1 = FALSE; - bool32 handleSpeedAnimLater = FALSE; - gBattleScripting.animArg1 = 0; gLastUsedItem = gBattleMons[battler].item; gBattleScripting.battler = battler; gProtectStructs[battler].eatMirrorHerb = 0; - - for (i = 0; i < (NUM_BATTLE_STATS - 1); i++) - { - if ((gQueuedStatBoosts[battler].stats & (1 << i)) == 0) - continue; - - if (i == STAT_SPEED) - { - handleSpeedAnimLater = TRUE; - continue; - } - - if (!statBuffMoreThan1) - statBuffMoreThan1 = ((gQueuedStatBoosts[battler].stats & (1 << i)) > 1); - - if (gBattleScripting.animArg1 != 0) //Already set in a different stat so now boosting multiple stats - gBattleScripting.animArg1 = (!statBuffMoreThan1 ? STAT_ANIM_MULTIPLE_PLUS1 : STAT_ANIM_MULTIPLE_PLUS2); - else - gBattleScripting.animArg1 = GET_STAT_BUFF_ID((i + 1)) + (!statBuffMoreThan1 ? STAT_ANIM_PLUS1 : STAT_ANIM_PLUS2); - - } - if (handleSpeedAnimLater) - { - if (gBattleScripting.animArg1 != 0) //Already set in a different stat so now boosting multiple stats - gBattleScripting.animArg1 = (!statBuffMoreThan1 ? STAT_ANIM_MULTIPLE_PLUS1 : STAT_ANIM_MULTIPLE_PLUS2); - else - gBattleScripting.animArg1 = GET_STAT_BUFF_ID((STAT_SPEED + 1)) + (!statBuffMoreThan1 ? STAT_ANIM_PLUS1 : STAT_ANIM_PLUS2); - } - + ChooseStatBoostAnimation(battler); if (execute) { BattleScriptExecute(BattleScript_MirrorHerbCopyStatChangeEnd2); @@ -7574,13 +7581,13 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) effect = TryConsumeMirrorHerb(battler, TRUE); break; case HOLD_EFFECT_BOOSTER_ENERGY: - if (!(gBattleStruct->boosterEnergyActivates & gBitTable[battler]) + if (!(gBattleStruct->boosterEnergyActivates & (1u << battler)) && (((GetBattlerAbility(battler) == ABILITY_PROTOSYNTHESIS) && !(gBattleWeather & B_WEATHER_SUN)) || ((GetBattlerAbility(battler) == ABILITY_QUARK_DRIVE) && !(gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)))) { PREPARE_STAT_BUFFER(gBattleTextBuff1, GetHighestStatId(battler)); gBattleScripting.battler = battler; - gBattleStruct->boosterEnergyActivates |= gBitTable[battler]; + gBattleStruct->boosterEnergyActivates |= 1u << battler; BattleScriptExecute(BattleScript_BoosterEnergyEnd2); effect = ITEM_EFFECT_OTHER; } @@ -7841,13 +7848,13 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) effect = TryConsumeMirrorHerb(battler, TRUE); break; case HOLD_EFFECT_BOOSTER_ENERGY: - if (!(gBattleStruct->boosterEnergyActivates & gBitTable[battler]) + if (!(gBattleStruct->boosterEnergyActivates & (1u << battler)) && (((GetBattlerAbility(battler) == ABILITY_PROTOSYNTHESIS) && !(gBattleWeather & B_WEATHER_SUN)) || ((GetBattlerAbility(battler) == ABILITY_QUARK_DRIVE) && !(gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)))) { PREPARE_STAT_BUFFER(gBattleTextBuff1, GetHighestStatId(battler)); gBattlerAbility = gBattleScripting.battler = battler; - gBattleStruct->boosterEnergyActivates |= gBitTable[battler]; + gBattleStruct->boosterEnergyActivates |= 1u << battler; BattleScriptExecute(BattleScript_BoosterEnergyEnd2); effect = ITEM_EFFECT_OTHER; } @@ -7999,7 +8006,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) case ITEMEFFECT_TARGET: if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)) { - GET_MOVE_TYPE(gCurrentMove, moveType); + moveType = GetMoveType(gCurrentMove); switch (battlerHoldEffect) { case HOLD_EFFECT_AIR_BALLOON: @@ -8224,7 +8231,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn) // Berry was successfully used on a Pokemon. if (effect && (gLastUsedItem >= FIRST_BERRY_INDEX && gLastUsedItem <= LAST_BERRY_INDEX)) - gBattleStruct->ateBerry[battler & BIT_SIDE] |= gBitTable[gBattlerPartyIndexes[battler]]; + gBattleStruct->ateBerry[battler & BIT_SIDE] |= 1u << gBattlerPartyIndexes[battler]; return effect; } @@ -8252,7 +8259,7 @@ u32 SetRandomTarget(u32 battler) [B_SIDE_OPPONENT] = {B_POSITION_PLAYER_LEFT, B_POSITION_PLAYER_RIGHT}, }; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { target = GetBattlerAtPosition(targets[GetBattlerSide(battler)][Random() % 2]); if (!IsBattlerAlive(target)) @@ -8270,6 +8277,7 @@ u32 GetMoveTarget(u16 move, u8 setTarget) { u8 targetBattler = 0; u32 moveTarget, side; + u32 moveType = GetMoveType(move); if (setTarget != NO_TARGET_OVERRIDE) moveTarget = setTarget - 1; @@ -8287,7 +8295,7 @@ u32 GetMoveTarget(u16 move, u8 setTarget) else { targetBattler = SetRandomTarget(gBattlerAttacker); - if (gMovesInfo[move].type == TYPE_ELECTRIC + if (moveType == TYPE_ELECTRIC && IsAbilityOnOpposingSide(gBattlerAttacker, ABILITY_LIGHTNING_ROD) && GetBattlerAbility(targetBattler) != ABILITY_LIGHTNING_ROD) { @@ -8295,7 +8303,7 @@ u32 GetMoveTarget(u16 move, u8 setTarget) RecordAbilityBattle(targetBattler, gBattleMons[targetBattler].ability); gSpecialStatuses[targetBattler].lightningRodRedirected = TRUE; } - else if (gMovesInfo[move].type == TYPE_WATER + else if (moveType == TYPE_WATER && IsAbilityOnOpposingSide(gBattlerAttacker, ABILITY_STORM_DRAIN) && GetBattlerAbility(targetBattler) != ABILITY_STORM_DRAIN) { @@ -8308,16 +8316,18 @@ u32 GetMoveTarget(u16 move, u8 setTarget) case MOVE_TARGET_DEPENDS: case MOVE_TARGET_BOTH: case MOVE_TARGET_FOES_AND_ALLY: - case MOVE_TARGET_OPPONENTS_FIELD: targetBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker))); if (!IsBattlerAlive(targetBattler)) targetBattler ^= BIT_FLANK; break; + case MOVE_TARGET_OPPONENTS_FIELD: + targetBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker))); + break; case MOVE_TARGET_RANDOM: side = BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker)); if (IsAffectedByFollowMe(gBattlerAttacker, side, move)) targetBattler = gSideTimers[side].followmeTarget; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && moveTarget & MOVE_TARGET_RANDOM) + else if (IsDoubleBattle() && moveTarget & MOVE_TARGET_RANDOM) targetBattler = SetRandomTarget(gBattlerAttacker); else targetBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerSide(gBattlerAttacker))); @@ -8340,12 +8350,7 @@ u32 GetMoveTarget(u16 move, u8 setTarget) return targetBattler; } -static bool32 IsBattlerModernFatefulEncounter(u32 battler) -{ - return TRUE; -} - -u8 IsMonDisobedient(void) +u8 GetAttackerObedienceForAction() { s32 rnd; s32 calc; @@ -8353,40 +8358,37 @@ u8 IsMonDisobedient(void) u8 levelReferenced; if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK)) - return 0; + return OBEYS; if (BattlerHasAi(gBattlerAttacker)) - return 0; + return OBEYS; - if (IsBattlerModernFatefulEncounter(gBattlerAttacker)) // only false if illegal Mew or Deoxys - { - if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && GetBattlerPosition(gBattlerAttacker) == B_POSITION_PLAYER_RIGHT) - return 0; - if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) - return 0; - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) - return 0; - if (B_OBEDIENCE_MECHANICS < GEN_8 && !IsOtherTrainer(gBattleMons[gBattlerAttacker].otId, gBattleMons[gBattlerAttacker].otName)) - return 0; - if (FlagGet(FLAG_BADGE08_GET)) // Rain Badge, ignore obedience altogether - return 0; + if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER && GetBattlerPosition(gBattlerAttacker) == B_POSITION_PLAYER_RIGHT) + return OBEYS; + if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) + return OBEYS; + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) + return OBEYS; + if (B_OBEDIENCE_MECHANICS < GEN_8 && !IsOtherTrainer(gBattleMons[gBattlerAttacker].otId, gBattleMons[gBattlerAttacker].otName)) + return OBEYS; + if (FlagGet(FLAG_BADGE08_GET)) // Rain Badge, ignore obedience altogether + return OBEYS; - obedienceLevel = 10; + obedienceLevel = 10; - if (FlagGet(FLAG_BADGE01_GET)) // Stone Badge - obedienceLevel = 20; - if (FlagGet(FLAG_BADGE02_GET)) // Knuckle Badge - obedienceLevel = 30; - if (FlagGet(FLAG_BADGE03_GET)) // Dynamo Badge - obedienceLevel = 40; - if (FlagGet(FLAG_BADGE04_GET)) // Heat Badge - obedienceLevel = 50; - 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 (FlagGet(FLAG_BADGE01_GET)) // Stone Badge + obedienceLevel = 20; + if (FlagGet(FLAG_BADGE02_GET)) // Knuckle Badge + obedienceLevel = 30; + if (FlagGet(FLAG_BADGE03_GET)) // Dynamo Badge + obedienceLevel = 40; + if (FlagGet(FLAG_BADGE04_GET)) // Heat Badge + obedienceLevel = 50; + 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 && !IsOtherTrainer(gBattleMons[gBattlerAttacker].otId, gBattleMons[gBattlerAttacker].otName)) @@ -8395,86 +8397,58 @@ u8 IsMonDisobedient(void) levelReferenced = gBattleMons[gBattlerAttacker].level; if (levelReferenced <= obedienceLevel) - return 0; - rnd = (Random() & 255); - calc = (levelReferenced + obedienceLevel) * rnd >> 8; + return OBEYS; + + rnd = Random(); + calc = (levelReferenced + obedienceLevel) * (rnd & 255) >> 8; if (calc < obedienceLevel) - return 0; + return OBEYS; + + // Clear the Z-Move flags if the battler is disobedient as to not waste the Z-Move + if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE) + { + gBattleStruct->gimmick.activated[gBattlerAttacker][GIMMICK_Z_MOVE] = FALSE; + gBattleStruct->gimmick.activeGimmick[GetBattlerSide(gBattlerAttacker)][gBattlerPartyIndexes[gBattlerAttacker]] = GIMMICK_NONE; + } // is not obedient if (gCurrentMove == MOVE_RAGE) gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_RAGE; - if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP && (gCurrentMove == MOVE_SNORE || gCurrentMove == MOVE_SLEEP_TALK)) - { - gBattlescriptCurrInstr = BattleScript_IgnoresWhileAsleep; - return 1; - } + if (gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP && (gMovesInfo[gCurrentMove].effect == EFFECT_SNORE || gMovesInfo[gCurrentMove].effect == EFFECT_SLEEP_TALK)) + return DISOBEYS_WHILE_ASLEEP; - rnd = (Random() & 255); - calc = (levelReferenced + obedienceLevel) * rnd >> 8; + calc = (levelReferenced + obedienceLevel) * ((rnd >> 8) & 255) >> 8; if (calc < obedienceLevel) { - calc = CheckMoveLimitations(gBattlerAttacker, gBitTable[gCurrMovePos], MOVE_LIMITATIONS_ALL); + calc = CheckMoveLimitations(gBattlerAttacker, 1u << gCurrMovePos, MOVE_LIMITATIONS_ALL); if (calc == ALL_MOVES_MASK) // all moves cannot be used - { - // Randomly select, then print a disobedient string - // B_MSG_LOAFING, B_MSG_WONT_OBEY, B_MSG_TURNED_AWAY, or B_MSG_PRETEND_NOT_NOTICE - gBattleCommunication[MULTISTRING_CHOOSER] = MOD(Random(), NUM_LOAF_STRINGS); - gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround; - return 1; - } + return DISOBEYS_LOAFS; else // use a random move - { do - { gCurrMovePos = gChosenMovePos = MOD(Random(), MAX_MON_MOVES); - } while (gBitTable[gCurrMovePos] & calc); - - gCalledMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos]; - SetAtkCancellerForCalledMove(); - gBattlescriptCurrInstr = BattleScript_IgnoresAndUsesRandomMove; - gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE); - gHitMarker |= HITMARKER_DISOBEDIENT_MOVE; - return 2; - } + while ((1u << gCurrMovePos) & calc); + return DISOBEYS_RANDOM_MOVE; } else { obedienceLevel = levelReferenced - obedienceLevel; - calc = (Random() & 255); + calc = ((rnd >> 16) & 255); if (calc < obedienceLevel && CanBeSlept(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker))) { // try putting asleep int i; for (i = 0; i < gBattlersCount; i++) - { if (gBattleMons[i].status2 & STATUS2_UPROAR) break; - } if (i == gBattlersCount) - { - gBattlescriptCurrInstr = BattleScript_IgnoresAndFallsAsleep; - return 1; - } + return DISOBEYS_FALL_ASLEEP; } calc -= obedienceLevel; if (calc < obedienceLevel) - { - gBattleMoveDamage = CalculateMoveDamage(MOVE_NONE, gBattlerAttacker, gBattlerAttacker, TYPE_MYSTERY, 40, FALSE, FALSE, TRUE); - gBattlerTarget = gBattlerAttacker; - gBattlescriptCurrInstr = BattleScript_IgnoresAndHitsItself; - gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - return 2; - } + return DISOBEYS_HITS_SELF; else - { - // Randomly select, then print a disobedient string - // B_MSG_LOAFING, B_MSG_WONT_OBEY, B_MSG_TURNED_AWAY, or B_MSG_PRETEND_NOT_NOTICE - gBattleCommunication[MULTISTRING_CHOOSER] = MOD(Random(), NUM_LOAF_STRINGS); - gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround; - return 1; - } + return DISOBEYS_LOAFS; } } @@ -8570,16 +8544,20 @@ bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move) // Protective Pads doesn't stop Unseen Fist from bypassing Protect effects, so IsMoveMakingContact() isn't used here. // This means extra logic is needed to handle Shell Side Arm. if (GetBattlerAbility(gBattlerAttacker) == ABILITY_UNSEEN_FIST - && (gMovesInfo[move].makesContact - || (gMovesInfo[move].effect == EFFECT_SHELL_SIDE_ARM && gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] == DAMAGE_CATEGORY_PHYSICAL)) - && !gProtectStructs[battlerDef].maxGuarded) // Max Guard cannot be bypassed by Unseen Fist + && (gMovesInfo[move].makesContact + || (gMovesInfo[move].effect == EFFECT_SHELL_SIDE_ARM + && gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] == DAMAGE_CATEGORY_PHYSICAL)) + && !gProtectStructs[battlerDef].maxGuarded) // Max Guard cannot be bypassed by Unseen Fist return FALSE; + else if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_CRAFTY_SHIELD + && IS_MOVE_STATUS(move)) + return TRUE; else if (gMovesInfo[move].ignoresProtect) return FALSE; else if (gProtectStructs[battlerDef].protected) return TRUE; else if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_WIDE_GUARD - && GetBattlerMoveTargetType(gBattlerAttacker, move) & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY)) + && GetBattlerMoveTargetType(gBattlerAttacker, move) & (MOVE_TARGET_BOTH | MOVE_TARGET_FOES_AND_ALLY)) return TRUE; else if (gProtectStructs[battlerDef].banefulBunkered) return TRUE; @@ -8596,11 +8574,8 @@ bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move) else if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_QUICK_GUARD && GetChosenMovePriority(gBattlerAttacker) > 0) return TRUE; - else if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_CRAFTY_SHIELD - && IS_MOVE_STATUS(move)) - return TRUE; else if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_MAT_BLOCK - && !IS_MOVE_STATUS(move)) + && !IS_MOVE_STATUS(move)) return TRUE; else return FALSE; @@ -8643,7 +8618,7 @@ bool32 IsBattlerAlive(u32 battler) return FALSE; else if (battler >= gBattlersCount) return FALSE; - else if (gAbsentBattlerFlags & gBitTable[battler]) + else if (gAbsentBattlerFlags & (1u << battler)) return FALSE; else return TRUE; @@ -8716,12 +8691,12 @@ u32 GetMoveTargetCount(u32 move, u32 battlerAtk, u32 battlerDef) switch (GetBattlerMoveTargetType(gBattlerAttacker, move)) { case MOVE_TARGET_BOTH: - return !(gAbsentBattlerFlags & gBitTable[battlerDef]) - + !(gAbsentBattlerFlags & gBitTable[BATTLE_PARTNER(battlerDef)]); + return !(gAbsentBattlerFlags & (1u << battlerDef)) + + !(gAbsentBattlerFlags & (1u << BATTLE_PARTNER(battlerDef))); case MOVE_TARGET_FOES_AND_ALLY: - return !(gAbsentBattlerFlags & gBitTable[battlerDef]) - + !(gAbsentBattlerFlags & gBitTable[BATTLE_PARTNER(battlerDef)]) - + !(gAbsentBattlerFlags & gBitTable[BATTLE_PARTNER(battlerAtk)]); + return !(gAbsentBattlerFlags & (1u << battlerDef)) + + !(gAbsentBattlerFlags & (1u << BATTLE_PARTNER(battlerDef))) + + !(gAbsentBattlerFlags & (1u << BATTLE_PARTNER(battlerAtk))); case MOVE_TARGET_OPPONENTS_FIELD: return 1; case MOVE_TARGET_DEPENDS: @@ -8859,6 +8834,9 @@ static inline u32 CalcMoveBasePower(u32 move, u32 battlerAtk, u32 battlerDef, u3 if (GetActiveGimmick(battlerAtk) == GIMMICK_Z_MOVE) return GetZMovePower(gBattleStruct->zmove.baseMoves[battlerAtk]); + if (GetActiveGimmick(battlerAtk) == GIMMICK_DYNAMAX) + return GetMaxMovePower(move); + switch (gMovesInfo[move].effect) { case EFFECT_PLEDGE: @@ -8899,10 +8877,7 @@ static inline u32 CalcMoveBasePower(u32 move, u32 battlerAtk, u32 battlerDef, u3 basePower = gBattleStruct->presentBasePower; break; case EFFECT_TRIPLE_KICK: - if (gMultiHitCounter == 0) // Calc damage with max BP for move consideration - basePower *= 6; - else - basePower *= 1 + gMovesInfo[move].strikeCount - gMultiHitCounter; + basePower *= 1 + gMovesInfo[move].strikeCount - gMultiHitCounter; break; case EFFECT_SPIT_UP: basePower = 100 * gDisableStructs[battlerAtk].stockpileCounter; @@ -9087,7 +9062,7 @@ static inline u32 CalcMoveBasePower(u32 move, u32 battlerAtk, u32 battlerDef, u3 basePower = (basePower > 350) ? 350 : basePower; break; case EFFECT_FICKLE_BEAM: - if (RandomPercentage(RNG_FICKLE_BEAM, 30)) + if (gBattleStruct->fickleBeamBoosted) basePower *= 2; break; case EFFECT_TERA_BLAST: @@ -9142,7 +9117,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 modifier = uq4_12_multiply(modifier, UQ_4_12(0.5)); break; case EFFECT_STOMPING_TANTRUM: - if (gBattleStruct->lastMoveFailed & gBitTable[battlerAtk]) + if (gBattleStruct->lastMoveFailed & (1u << battlerAtk)) modifier = uq4_12_multiply(modifier, UQ_4_12(2.0)); break; case EFFECT_MAGNITUDE: @@ -9297,7 +9272,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 case ABILITY_PROTOSYNTHESIS: { u8 atkHighestStat = GetHighestStatId(battlerAtk); - if ((weather & B_WEATHER_SUN || gBattleStruct->boosterEnergyActivates & gBitTable[battlerAtk]) + if ((weather & B_WEATHER_SUN || gBattleStruct->boosterEnergyActivates & (1u << battlerAtk)) && ((IS_MOVE_PHYSICAL(move) && atkHighestStat == STAT_ATK) || (IS_MOVE_SPECIAL(move) && atkHighestStat == STAT_SPATK))) modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); } @@ -9305,7 +9280,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 case ABILITY_QUARK_DRIVE: { u8 atkHighestStat = GetHighestStatId(battlerAtk); - if ((gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gBattleStruct->boosterEnergyActivates & gBitTable[battlerAtk]) + if ((gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gBattleStruct->boosterEnergyActivates & (1u << battlerAtk)) && ((IS_MOVE_PHYSICAL(move) && atkHighestStat == STAT_ATK) || (IS_MOVE_SPECIAL(move) && atkHighestStat == STAT_SPATK))) modifier = uq4_12_multiply(modifier, UQ_4_12(1.3)); } @@ -9375,7 +9350,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 case ABILITY_PROTOSYNTHESIS: { u8 defHighestStat = GetHighestStatId(battlerDef); - if ((weather & B_WEATHER_SUN || gBattleStruct->boosterEnergyActivates & gBitTable[battlerDef]) + if ((weather & B_WEATHER_SUN || gBattleStruct->boosterEnergyActivates & (1u << battlerDef)) && ((IS_MOVE_PHYSICAL(move) && defHighestStat == STAT_DEF) || (IS_MOVE_SPECIAL(move) && defHighestStat == STAT_SPDEF))) modifier = uq4_12_multiply(modifier, UQ_4_12(0.7)); } @@ -9383,7 +9358,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32 case ABILITY_QUARK_DRIVE: { u8 defHighestStat = GetHighestStatId(battlerDef); - if ((gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gBattleStruct->boosterEnergyActivates & gBitTable[battlerDef]) + if ((gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gBattleStruct->boosterEnergyActivates & (1u << battlerDef)) && ((IS_MOVE_PHYSICAL(move) && defHighestStat == STAT_DEF) || (IS_MOVE_SPECIAL(move) && defHighestStat == STAT_SPDEF))) modifier = uq4_12_multiply(modifier, UQ_4_12(0.7)); } @@ -9787,7 +9762,7 @@ static inline u32 CalcDefenseStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5)); break; case ABILITY_PURIFYING_SALT: - if (gMovesInfo[move].type == TYPE_GHOST) + if (moveType == TYPE_GHOST) modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0)); break; } @@ -9878,7 +9853,9 @@ static inline uq4_12_t GetParentalBondModifier(u32 battlerAtk) static inline uq4_12_t GetSameTypeAttackBonusModifier(u32 battlerAtk, u32 moveType, u32 move, u32 abilityAtk) { - if (gBattleStruct->pledgeMove && IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerAtk), moveType)) + if (moveType == TYPE_MYSTERY) + return UQ_4_12(1.0); + else if (gBattleStruct->pledgeMove && IS_BATTLER_OF_TYPE(BATTLE_PARTNER(battlerAtk), moveType)) return (abilityAtk == ABILITY_ADAPTABILITY) ? UQ_4_12(2.0) : UQ_4_12(1.5); else if (!IS_BATTLER_OF_TYPE(battlerAtk, moveType) || move == MOVE_STRUGGLE || move == MOVE_NONE) return UQ_4_12(1.0); @@ -9983,7 +9960,7 @@ static inline uq4_12_t GetScreensModifier(u32 move, u32 battlerAtk, u32 battlerD if (isCrit || abilityAtk == ABILITY_INFILTRATOR || gProtectStructs[battlerAtk].confusionSelfDmg) return UQ_4_12(1.0); if (reflect || lightScreen || auroraVeil) - return (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) ? UQ_4_12(0.667) : UQ_4_12(0.5); + return (IsDoubleBattle()) ? UQ_4_12(0.667) : UQ_4_12(0.5); return UQ_4_12(1.0); } @@ -10349,7 +10326,7 @@ static inline void MulByTypeEffectiveness(uq4_12_t *modifier, u32 move, u32 move mod = UQ_4_12(1.0); } - if (gBattleStruct->distortedTypeMatchups & gBitTable[battlerDef] || (gBattleStruct->aiCalcInProgress && ShouldTeraShellDistortTypeMatchups(move, battlerDef))) + if (gBattleStruct->distortedTypeMatchups & (1u << battlerDef) || (gBattleStruct->aiCalcInProgress && ShouldTeraShellDistortTypeMatchups(move, battlerDef))) { mod = UQ_4_12(0.5); if (recordAbilities) @@ -10481,7 +10458,7 @@ uq4_12_t CalcTypeEffectivenessMultiplier(u32 move, u32 moveType, u32 battlerAtk, uq4_12_t CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilityDef) { uq4_12_t modifier = UQ_4_12(1.0); - u8 moveType = gMovesInfo[move].type; + u32 moveType = GetMoveType(move); if (move != MOVE_STRUGGLE && moveType != TYPE_MYSTERY) { @@ -10599,8 +10576,8 @@ s32 GetStealthHazardDamageByTypesAndHP(u8 hazardType, u8 type1, u8 type2, u32 ma s32 GetStealthHazardDamage(u8 hazardType, u32 battler) { - u8 type1 = gBattleMons[battler].type1; - u8 type2 = gBattleMons[battler].type2; + u8 type1 = gBattleMons[battler].types[0]; + u8 type2 = gBattleMons[battler].types[1]; u32 maxHp = gBattleMons[battler].maxHP; return GetStealthHazardDamageByTypesAndHP(hazardType, type1, type2, maxHp); @@ -11074,7 +11051,6 @@ static u32 SwapMoveDamageCategory(u32 move) u8 GetBattleMoveCategory(u32 moveId) { - u8 moveType; if (gBattleStruct != NULL && gBattleStruct->swapDamageCategory) // Photon Geyser, Shell Side Arm, Light That Burns the Sky, Tera Blast return SwapMoveDamageCategory(moveId); if (gBattleStruct != NULL && (IsZMove(moveId) || IsMaxMove(moveId))) // TODO: Might be buggy depending on when this is called. @@ -11084,11 +11060,7 @@ u8 GetBattleMoveCategory(u32 moveId) if (IS_MOVE_STATUS(moveId)) return DAMAGE_CATEGORY_STATUS; - else if (gMain.inBattle) - GET_MOVE_TYPE(moveId, moveType); - else - moveType = gMovesInfo[moveId].type; - return gTypesInfo[moveType].damageCategory; + return gTypesInfo[GetMoveType(gCurrentMove)].damageCategory; } static bool32 TryRemoveScreens(u32 battler) @@ -11264,7 +11236,7 @@ bool32 CanStealItem(u32 battlerStealing, u32 battlerItem, u16 item) | BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK | BATTLE_TYPE_SECRET_BASE)) - && (gWishFutureKnock.knockedOffMons[stealerSide] & gBitTable[gBattlerPartyIndexes[battlerStealing]])) + && (gWishFutureKnock.knockedOffMons[stealerSide] & (1u << gBattlerPartyIndexes[battlerStealing]))) { return FALSE; } @@ -11430,6 +11402,25 @@ u16 GetUsedHeldItem(u32 battler) return gBattleStruct->usedHeldItems[gBattlerPartyIndexes[battler]][GetBattlerSide(battler)]; } +bool32 CantPickupItem(u32 battler) +{ + // Used by RandomUniformExcept() for RNG_PICKUP + if (battler == gBattlerAttacker && gBattleTypeFlags & (BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK)) + return TRUE; + return !(IsBattlerAlive(battler) && GetUsedHeldItem(battler) && gBattleStruct->canPickupItem & (1u << battler)); +} + +bool32 PickupHasValidTarget(u32 battler) +{ + u32 i; + for (i = 0; i < gBattlersCount; i++) + { + if (!CantPickupItem(i)) + return TRUE; + } + return FALSE; +} + bool32 IsBattlerWeatherAffected(u32 battler, u32 weatherFlags) { if (gBattleWeather & weatherFlags && WEATHER_HAS_EFFECT) @@ -11447,14 +11438,11 @@ bool32 IsBattlerWeatherAffected(u32 battler, u32 weatherFlags) // Possible return values are defined in battle.h following MOVE_TARGET_SELECTED u32 GetBattlerMoveTargetType(u32 battler, u32 move) { - if (move == MOVE_CURSE - && !IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) + if (move == MOVE_CURSE && !IS_BATTLER_OF_TYPE(battler, TYPE_GHOST)) return MOVE_TARGET_USER; - else if (gMovesInfo[move].effect == EFFECT_EXPANDING_FORCE - && IsBattlerTerrainAffected(battler, STATUS_FIELD_PSYCHIC_TERRAIN)) + if (gMovesInfo[move].effect == EFFECT_EXPANDING_FORCE && IsBattlerTerrainAffected(battler, STATUS_FIELD_PSYCHIC_TERRAIN)) return MOVE_TARGET_BOTH; - else if (gMovesInfo[move].effect == EFFECT_TERA_STARSTORM - && gBattleMons[battler].species == SPECIES_TERAPAGOS_STELLAR) + if (gMovesInfo[move].effect == EFFECT_TERA_STARSTORM && gBattleMons[battler].species == SPECIES_TERAPAGOS_STELLAR) return MOVE_TARGET_BOTH; return gMovesInfo[move].target; @@ -11497,9 +11485,9 @@ void CopyMonLevelAndBaseStatsToBattleMon(u32 battler, struct Pokemon *mon) void CopyMonAbilityAndTypesToBattleMon(u32 battler, struct Pokemon *mon) { gBattleMons[battler].ability = GetMonAbility(mon); - gBattleMons[battler].type1 = gSpeciesInfo[gBattleMons[battler].species].types[0]; - gBattleMons[battler].type2 = gSpeciesInfo[gBattleMons[battler].species].types[1]; - gBattleMons[battler].type3 = TYPE_MYSTERY; + gBattleMons[battler].types[0] = gSpeciesInfo[gBattleMons[battler].species].types[0]; + gBattleMons[battler].types[1] = gSpeciesInfo[gBattleMons[battler].species].types[1]; + gBattleMons[battler].types[2] = TYPE_MYSTERY; } void RecalcBattlerStats(u32 battler, struct Pokemon *mon) @@ -11704,9 +11692,9 @@ u8 GetBattlerType(u32 battler, u8 typeIndex, bool32 ignoreTera) { u32 teraType = GetBattlerTeraType(battler); u16 types[3] = {0}; - types[0] = gBattleMons[battler].type1; - types[1] = gBattleMons[battler].type2; - types[2] = gBattleMons[battler].type3; + types[0] = gBattleMons[battler].types[0]; + types[1] = gBattleMons[battler].types[1]; + types[2] = gBattleMons[battler].types[2]; // Handle Terastallization if (GetActiveGimmick(battler) == GIMMICK_TERA && teraType != TYPE_STELLAR && !ignoreTera) @@ -11735,8 +11723,8 @@ void RemoveBattlerType(u32 battler, u8 type) return; for (i = 0; i < 3; i++) { - if (*(u8 *)(&gBattleMons[battler].type1 + i) == type) - *(u8 *)(&gBattleMons[battler].type1 + i) = TYPE_MYSTERY; + if (*(u8 *)(&gBattleMons[battler].types[0] + i) == type) + *(u8 *)(&gBattleMons[battler].types[0] + i) = TYPE_MYSTERY; } } @@ -11792,7 +11780,7 @@ void SetShellSideArmCategory(void) bool32 CanTargetPartner(u32 battlerAtk, u32 battlerDef) { - return (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + return (IsDoubleBattle() && IsBattlerAlive(BATTLE_PARTNER(battlerDef)) && battlerDef != BATTLE_PARTNER(battlerAtk)); } @@ -11805,11 +11793,20 @@ static inline bool32 DoesCurrentTargetHaveAbilityImmunity(void) bool32 TargetFullyImmuneToCurrMove(u32 BattlerAtk, u32 battlerDef) { - u32 moveType = 0; - GET_MOVE_TYPE(gCurrentMove, moveType); - - return ((CalcTypeEffectivenessMultiplier(gCurrentMove, moveType, BattlerAtk, battlerDef, GetBattlerAbility(battlerDef), FALSE) == UQ_4_12(0.0)) + return ((CalcTypeEffectivenessMultiplier(gCurrentMove, GetMoveType(gCurrentMove), BattlerAtk, battlerDef, GetBattlerAbility(battlerDef), FALSE) == UQ_4_12(0.0)) || IsBattlerProtected(BattlerAtk, battlerDef, gCurrentMove) || IsSemiInvulnerable(battlerDef, gCurrentMove) || DoesCurrentTargetHaveAbilityImmunity()); } + +u32 GetMoveType(u32 move) +{ + if (gMain.inBattle && gBattleStruct->dynamicMoveType) + return gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK; + else if (B_UPDATED_MOVE_TYPES < GEN_5 + && (move == MOVE_BEAT_UP + || move == MOVE_FUTURE_SIGHT + || move == MOVE_DOOM_DESIRE)) + return TYPE_MYSTERY; + return gMovesInfo[move].type; +} diff --git a/src/battle_util2.c b/src/battle_util2.c index 2c333978d2..326acf0e40 100644 --- a/src/battle_util2.c +++ b/src/battle_util2.c @@ -80,7 +80,7 @@ void AdjustFriendshipOnBattleFaint(u8 battler) { u8 opposingBattlerId; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (IsDoubleBattle()) { u8 opposingBattlerId2; diff --git a/src/battle_z_move.c b/src/battle_z_move.c index c000c35808..5a5816142c 100644 --- a/src/battle_z_move.c +++ b/src/battle_z_move.c @@ -209,13 +209,13 @@ void AssignUsableZMoves(u32 battler, u16 *moves) for (i = 0; i < MAX_MON_MOVES; i++) { if (moves[i] != MOVE_NONE && IsViableZMove(battler, moves[i])) - gBattleStruct->zmove.possibleZMoves[battler] |= gBitTable[i]; + gBattleStruct->zmove.possibleZMoves[battler] |= 1u << i; } } bool32 TryChangeZTrigger(u32 battler, u32 moveIndex) { - bool32 viableZMove = (gBattleStruct->zmove.possibleZMoves[battler] & gBitTable[moveIndex]) != 0; + bool32 viableZMove = (gBattleStruct->zmove.possibleZMoves[battler] & (1u << moveIndex)) != 0; if (gBattleStruct->zmove.viable && !viableZMove) HideGimmickTriggerSprite(); // Was a viable z move, now is not -> slide out @@ -284,7 +284,7 @@ bool32 MoveSelectionDisplayZMove(u16 zmove, u32 battler) if (zEffect == Z_EFFECT_CURSE) { - if (moveInfo->monType1 == TYPE_GHOST || moveInfo->monType2 == TYPE_GHOST || moveInfo->monType3 == TYPE_GHOST) + if (moveInfo->monTypes[0] == TYPE_GHOST || moveInfo->monTypes[1] == TYPE_GHOST || moveInfo->monTypes[2] == TYPE_GHOST) zEffect = Z_EFFECT_RECOVER_HP; else zEffect = Z_EFFECT_ATK_UP_1; @@ -415,9 +415,7 @@ static void ZMoveSelectionDisplayPpNumber(u32 battler) static void ZMoveSelectionDisplayMoveType(u16 zMove, u32 battler) { u8 *txtPtr, *end; - u8 zMoveType; - - GET_MOVE_TYPE(zMove, zMoveType); + u32 zMoveType = GetMoveType(zMove); txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfaceType); *(txtPtr)++ = EXT_CTRL_CODE_BEGIN; diff --git a/src/berry.c b/src/berry.c index 9f187bd1e2..5c23623e3b 100644 --- a/src/berry.c +++ b/src/berry.c @@ -1817,6 +1817,8 @@ bool32 BerryTreeGrow(struct BerryTree *tree) tree->stage = BERRY_STAGE_BERRIES; break; case BERRY_STAGE_BERRIES: + if (OW_BERRY_IMMORTAL) + break; tree->watered = 0; tree->berryYield = 0; tree->stage = BERRY_STAGE_SPROUTED; @@ -1842,16 +1844,16 @@ static u16 GetMulchAffectedGrowthRate(u16 berryDuration, u8 mulch, u8 stage) void BerryTreeTimeUpdate(s32 minutes) { int i; - u8 drainVal; + u32 drainVal; struct BerryTree *tree; for (i = 0; i < BERRY_TREES_COUNT; i++) { tree = &gSaveBlock1Ptr->berryTrees[i]; - if (tree->berry && tree->stage && !tree->stopGrowth) + if (tree->berry && tree->stage && !tree->stopGrowth && (!OW_BERRY_IMMORTAL || tree->stage != BERRY_STAGE_BERRIES)) { - if (minutes >= GetStageDurationByBerryType(tree->berry) * 71) + if ((!OW_BERRY_IMMORTAL) && (minutes >= GetStageDurationByBerryType(tree->berry) * 71)) { *tree = gBlankBerryTree; } @@ -2142,6 +2144,8 @@ void ObjectEventInteractionGetBerryCountString(void) u8 treeId = GetObjectEventBerryTreeId(gSelectedObjectEvent); u8 berry = GetBerryTypeByBerryTreeId(treeId); u8 count = GetBerryCountByBerryTreeId(treeId); + + gSpecialVar_0x8006 = BerryTypeToItemId(berry); CopyItemNameHandlePlural(BerryTypeToItemId(berry), gStringVar1, count); berry = GetTreeMutationValue(treeId); if (berry > 0) diff --git a/src/berry_blender.c b/src/berry_blender.c index 0af3fd3ba6..a34afcf998 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -255,35 +255,20 @@ static const u16 sBlenderOuter_Pal[] = INCBIN_U16("graphics/berry_blender/outer. static const u16 sUnused_Pal[] = INCBIN_U16("graphics/berry_blender/unused.gbapal"); static const u16 sEmpty_Pal[16 * 14] = {0}; -// unused text -static const u8 sUnusedText_YesNo[] = _("YES\nNO"); -static const u8 sUnusedText_2[] = _("▶"); -static const u8 sUnusedText_Space[] = _(" "); -static const u8 sUnusedText_Terminating[] = _("Terminating."); -static const u8 sUnusedText_LinkPartnerNotFound[] = _("Link partner(s) not found.\nPlease try again.\p"); - static const u8 sText_BerryBlenderStart[] = _("Starting up the BERRY BLENDER.\pPlease select a BERRY from your BAG\nto put in the BERRY BLENDER.\p"); static const u8 sText_NewParagraph[] = _("\p"); static const u8 sText_WasMade[] = _(" was made!"); -static const u8 sText_Mister[] = _("MISTER"); -static const u8 sText_Laddie[] = _("LADDIE"); -static const u8 sText_Lassie[] = _("LASSIE"); -static const u8 sText_Master[] = _("MASTER"); -static const u8 sText_Dude[] = _("DUDE"); -static const u8 sText_Miss[] = _("MISS"); static const u8 *const sBlenderOpponentsNames[] = { - [BLENDER_MISTER] = sText_Mister, - [BLENDER_LADDIE] = sText_Laddie, - [BLENDER_LASSIE] = sText_Lassie, - [BLENDER_MASTER] = sText_Master, - [BLENDER_DUDE] = sText_Dude, - [BLENDER_MISS] = sText_Miss + [BLENDER_MISTER] = COMPOUND_STRING("MISTER"), + [BLENDER_LADDIE] = COMPOUND_STRING("LADDIE"), + [BLENDER_LASSIE] = COMPOUND_STRING("LASSIE"), + [BLENDER_MASTER] = COMPOUND_STRING("MASTER"), + [BLENDER_DUDE] = COMPOUND_STRING("DUDE"), + [BLENDER_MISS] = COMPOUND_STRING("MISS"), }; -static const u8 sText_PressAToStart[] = _("Press the A Button to start."); -static const u8 sText_PleaseWaitAWhile[] = _("Please wait a while."); static const u8 sText_CommunicationStandby[] = _("Communication standby…"); static const u8 sText_WouldLikeToBlendAnotherBerry[] = _("Would you like to blend another BERRY?"); static const u8 sText_RunOutOfBerriesForBlending[] = _("You've run out of BERRIES for\nblending in the BERRY BLENDER.\p"); @@ -291,7 +276,6 @@ static const u8 sText_YourPokeblockCaseIsFull[] = _("Your {POKEBLOCK} CASE is fu static const u8 sText_HasNoBerriesToPut[] = _(" has no BERRIES to put in\nthe BERRY BLENDER."); static const u8 sText_ApostropheSPokeblockCaseIsFull[] = _("'s {POKEBLOCK} CASE is full.\p"); static const u8 sText_BlendingResults[] = _("RESULTS OF BLENDING"); -static const u8 sText_BerryUsed[] = _("BERRY USED"); static const u8 sText_SpaceBerry[] = _(" BERRY"); static const u8 sText_Time[] = _("Time:"); static const u8 sText_Min[] = _(" min. "); @@ -300,7 +284,6 @@ static const u8 sText_MaximumSpeed[] = _("MAXIMUM SPEED"); static const u8 sText_RPM[] = _(" RPM"); static const u8 sText_Dot[] = _("."); static const u8 sText_NewLine[] = _("\n"); -static const u8 sText_Space[] = _(" "); static const u8 sText_Ranking[] = _("RANKING"); static const u8 sText_TheLevelIs[] = _("The level is "); static const u8 sText_TheFeelIs[] = _(", and the feel is "); diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index c6eb731845..fcd322ce33 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -143,11 +143,12 @@ static const struct WindowTemplate sWindowTemplates[] = static const u8 *const sBerryFirmnessStrings[] = { - gBerryFirmnessString_VerySoft, - gBerryFirmnessString_Soft, - gBerryFirmnessString_Hard, - gBerryFirmnessString_VeryHard, - gBerryFirmnessString_SuperHard + [BERRY_FIRMNESS_UNKNOWN] = COMPOUND_STRING("???"), + [BERRY_FIRMNESS_VERY_SOFT] = COMPOUND_STRING("Very soft"), + [BERRY_FIRMNESS_SOFT] = COMPOUND_STRING("Soft"), + [BERRY_FIRMNESS_HARD] = COMPOUND_STRING("Hard"), + [BERRY_FIRMNESS_VERY_HARD] = COMPOUND_STRING("Very hard"), + [BERRY_FIRMNESS_SUPER_HARD] = COMPOUND_STRING("Super hard") }; // this file's functions @@ -172,6 +173,13 @@ static void Task_DisplayAnotherBerry(u8 taskId); static void TryChangeDisplayedBerry(u8 taskId, s8 toMove); static void HandleBagCursorPositionChange(s8 toMove); +static const u8 sText_SizeSlash[] = _("SIZE /"); +static const u8 sText_FirmSlash[] = _("FIRM /"); +static const u8 sText_Var1DotVar2[] = _("{STR_VAR_1}.{STR_VAR_2}”"); +static const u8 sText_NumberVar1Var2[] = _("{NO}{STR_VAR_1} {STR_VAR_2}"); +static const u8 sText_BerryTag[] = _("BERRY TAG"); +static const u8 sText_ThreeMarks[] = _("???"); + // code void DoBerryTagScreen(void) { @@ -386,7 +394,7 @@ static void AddBerryTagTextToBg0(void) { memcpy(GetBgTilemapBuffer(0), sBerryTag->tilemapBuffers[2], sizeof(sBerryTag->tilemapBuffers[2])); FillWindowPixelBuffer(WIN_BERRY_TAG, PIXEL_FILL(15)); - PrintTextInBerryTagScreen(WIN_BERRY_TAG, gText_BerryTag, GetStringCenterAlignXOffset(FONT_NORMAL, gText_BerryTag, 0x40), 1, 0, 1); + PrintTextInBerryTagScreen(WIN_BERRY_TAG, sText_BerryTag, GetStringCenterAlignXOffset(FONT_NORMAL, sText_BerryTag, 0x40), 1, 0, 1); PutWindowTilemap(WIN_BERRY_TAG); ScheduleBgCopyTilemapToVram(0); } @@ -405,14 +413,14 @@ static void PrintBerryNumberAndName(void) const struct Berry *berry = GetBerryInfo(sBerryTag->berryId); ConvertIntToDecimalStringN(gStringVar1, sBerryTag->berryId, STR_CONV_MODE_LEADING_ZEROS, 2); StringCopy(gStringVar2, berry->name); - StringExpandPlaceholders(gStringVar4, gText_NumberVar1Var2); + StringExpandPlaceholders(gStringVar4, sText_NumberVar1Var2); PrintTextInBerryTagScreen(WIN_BERRY_NAME, gStringVar4, 0, 1, 0, 0); } static void PrintBerrySize(void) { const struct Berry *berry = GetBerryInfo(sBerryTag->berryId); - AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, gText_SizeSlash, 0, 1, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sText_SizeSlash, 0, 1, TEXT_SKIP_DRAW, NULL); if (berry->size != 0) { u32 inches, fraction; @@ -425,23 +433,23 @@ static void PrintBerrySize(void) ConvertIntToDecimalStringN(gStringVar1, inches, STR_CONV_MODE_LEFT_ALIGN, 2); ConvertIntToDecimalStringN(gStringVar2, fraction, STR_CONV_MODE_LEFT_ALIGN, 2); - StringExpandPlaceholders(gStringVar4, gText_Var1DotVar2); + StringExpandPlaceholders(gStringVar4, sText_Var1DotVar2); AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, gStringVar4, 0x28, 1, 0, NULL); } else { - AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, gText_ThreeMarks, 0x28, 1, 0, NULL); + AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sText_ThreeMarks, 0x28, 1, 0, NULL); } } static void PrintBerryFirmness(void) { const struct Berry *berry = GetBerryInfo(sBerryTag->berryId); - AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, gText_FirmSlash, 0, 0x11, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sText_FirmSlash, 0, 0x11, TEXT_SKIP_DRAW, NULL); if (berry->firmness != 0) - AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sBerryFirmnessStrings[berry->firmness - 1], 0x28, 0x11, 0, NULL); + AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sBerryFirmnessStrings[berry->firmness], 0x28, 0x11, 0, NULL); else - AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, gText_ThreeMarks, 0x28, 0x11, 0, NULL); + AddTextPrinterParameterized(WIN_SIZE_FIRM, FONT_NORMAL, sText_ThreeMarks, 0x28, 0x11, 0, NULL); } static void PrintBerryDescription1(void) diff --git a/src/clock.c b/src/clock.c index 7061f96b7f..54c9422bbe 100644 --- a/src/clock.c +++ b/src/clock.c @@ -84,7 +84,7 @@ static void FormChangeTimeUpdate() { 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); diff --git a/src/data/abilities.h b/src/data/abilities.h index ccb27ffe35..7c67f2da17 100644 --- a/src/data/abilities.h +++ b/src/data/abilities.h @@ -110,11 +110,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_COMPOUND_EYES] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Compound Eyes"), - #else - .name = _("CompoundEyes"), - #endif .description = COMPOUND_STRING("Raises accuracy."), .aiRating = 7, }, @@ -244,11 +240,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_LIGHTNING_ROD] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Lightning Rod"), - #else - .name = _("LightningRod"), - #endif .description = COMPOUND_STRING("Draws electrical moves."), .aiRating = 7, .breakable = TRUE, @@ -1328,11 +1320,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_STANCE_CHANGE] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Stance Change"), - #else - .name = _("StanceChange"), - #endif .description = COMPOUND_STRING("Transforms as it battles."), .aiRating = 10, .cantBeCopied = TRUE, @@ -1351,11 +1339,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_MEGA_LAUNCHER] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Mega Launcher"), - #else - .name = _("MegaLauncher"), - #endif .description = COMPOUND_STRING("Boosts pulse moves."), .aiRating = 7, }, @@ -1405,11 +1389,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_PARENTAL_BOND] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Parental Bond"), - #else - .name = _("ParentalBond"), - #endif .description = COMPOUND_STRING("Moves hit twice."), .aiRating = 10, }, @@ -1437,22 +1417,14 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_PRIMORDIAL_SEA] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Primordial Sea"), - #else - .name = _("PrimrdialSea"), - #endif .description = COMPOUND_STRING("Summons heavy rain."), .aiRating = 10, }, [ABILITY_DESOLATE_LAND] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Desolate Land"), - #else - .name = _("DesolateLand"), - #endif .description = COMPOUND_STRING("Summons intense sunlight."), .aiRating = 10, }, @@ -1480,22 +1452,14 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_EMERGENCY_EXIT] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Emergency Exit"), - #else - .name = _("EmergncyExit"), - #endif .description = COMPOUND_STRING("Flees at half HP."), .aiRating = 3, }, [ABILITY_WATER_COMPACTION] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Water Compaction"), - #else - .name = _("WtrCmpaction"), - #endif .description = COMPOUND_STRING("Water boosts Defense."), .aiRating = 4, }, @@ -1629,11 +1593,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_POWER_CONSTRUCT] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Power Construct"), - #else - .name = _("PwrConstruct"), - #endif .description = COMPOUND_STRING("Cells aid it when weakened."), .aiRating = 10, .cantBeCopied = TRUE, @@ -1664,11 +1624,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_QUEENLY_MAJESTY] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Queenly Majesty"), - #else - .name = _("QueenlyMjsty"), - #endif .description = COMPOUND_STRING("Protects from priority."), .aiRating = 6, .breakable = TRUE, @@ -1720,11 +1676,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_TANGLING_HAIR] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Tangling Hair"), - #else - .name = _("TanglingHair"), - #endif .description = COMPOUND_STRING("Lowers Speed on contact."), .aiRating = 5, }, @@ -1740,11 +1692,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_POWER_OF_ALCHEMY] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Power Of Alchemy"), - #else - .name = _("PwrOfAlchemy"), - #endif .description = COMPOUND_STRING("Copies ally's ability."), .aiRating = 0, .cantBeCopied = TRUE, @@ -1772,22 +1720,14 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_ELECTRIC_SURGE] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Electric Surge"), - #else - .name = _("ElectrcSurge"), - #endif .description = COMPOUND_STRING("Field becomes Electric."), .aiRating = 8, }, [ABILITY_PSYCHIC_SURGE] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Psychic Surge"), - #else - .name = _("PsychicSurge"), - #endif .description = COMPOUND_STRING("Field becomes weird."), .aiRating = 8, }, @@ -1808,22 +1748,14 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_FULL_METAL_BODY] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Full Metal Body"), - #else - .name = _("FullMetalBdy"), - #endif .description = COMPOUND_STRING("Prevents stat reduction."), .aiRating = 4, }, [ABILITY_SHADOW_SHIELD] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Shadow Shield"), - #else - .name = _("ShadowShield"), - #endif .description = COMPOUND_STRING("Halves damage at full HP."), .aiRating = 8, }, @@ -1844,22 +1776,14 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_INTREPID_SWORD] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Intrepid Sword"), - #else - .name = _("IntrepidSwrd"), - #endif .description = COMPOUND_STRING("Ups Attack on entry."), .aiRating = 3, }, [ABILITY_DAUNTLESS_SHIELD] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Dauntless Shield"), - #else - .name = _("DauntlssShld"), - #endif .description = COMPOUND_STRING("Ups Defense on entry."), .aiRating = 3, }, @@ -1886,11 +1810,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_PROPELLER_TAIL] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Propeller Tail"), - #else - .name = _("PropellrTail"), - #endif .description = COMPOUND_STRING("Ignores foe's redirection."), .aiRating = 2, }, @@ -1988,22 +1908,14 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_SCREEN_CLEANER] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Screen Cleaner"), - #else - .name = _("ScreenCleanr"), - #endif .description = COMPOUND_STRING("Removes walls of light."), .aiRating = 3, }, [ABILITY_STEELY_SPIRIT] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Steely Spirit"), - #else - .name = _("SteelySpirit"), - #endif .description = COMPOUND_STRING("Boosts ally's Steel moves."), .aiRating = 2, }, @@ -2017,33 +1929,21 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_WANDERING_SPIRIT] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Wandering Spirit"), - #else - .name = _("WandrngSprit"), - #endif .description = COMPOUND_STRING("Trade abilities on contact."), .aiRating = 2, }, [ABILITY_GORILLA_TACTICS] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Gorilla Tactics"), - #else - .name = _("GorillaTacti"), - #endif .description = COMPOUND_STRING("Ups Attack and locks move."), .aiRating = 4, }, [ABILITY_NEUTRALIZING_GAS] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Neutralizing Gas"), - #else - .name = _("NeutrlzngGas"), - #endif .description = COMPOUND_STRING("All Abilities are nullified."), .aiRating = 5, .cantBeCopied = TRUE, @@ -2062,11 +1962,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_HUNGER_SWITCH] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Hunger Switch"), - #else - .name = _("HungerSwitch"), - #endif .description = COMPOUND_STRING("Changes form each turn."), .aiRating = 2, .cantBeCopied = TRUE, @@ -2091,11 +1987,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_CURIOUS_MEDICINE] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Curious Medicine"), - #else - .name = _("CuriusMedicn"), - #endif .description = COMPOUND_STRING("Remove ally's stat changes."), .aiRating = 3, }, @@ -2116,11 +2008,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_CHILLING_NEIGH] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Chilling Neigh"), - #else - .name = _("ChillngNeigh"), - #endif .description = COMPOUND_STRING("KOs boost Attack stat."), .aiRating = 7, }, @@ -2158,11 +2046,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_LINGERING_AROMA] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Lingering Aroma"), - #else - .name = _("LngerngAroma"), - #endif .description = COMPOUND_STRING("Spreads with contact."), .aiRating = 5, }, @@ -2176,11 +2060,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_THERMAL_EXCHANGE] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Thermal Exchange"), - #else - .name = _("ThrmlExchnge"), - #endif .description = COMPOUND_STRING("Fire hits up Attack."), .aiRating = 4, .breakable = TRUE, @@ -2195,11 +2075,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_PURIFYING_SALT] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Purifying Salt"), - #else - .name = _("PurfyingSalt"), - #endif .description = COMPOUND_STRING("Protected by pure salts."), .aiRating = 6, .breakable = TRUE, @@ -2207,11 +2083,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_WELL_BAKED_BODY] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Well-Baked Body"), - #else - .name = _("WellBakedBdy"), - #endif .description = COMPOUND_STRING("Strengthened by Fire."), .aiRating = 5, .breakable = TRUE, @@ -2235,11 +2107,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_ROCKY_PAYLOAD] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Rocky Payload"), - #else - .name = _("RockyPayload"), - #endif .description = COMPOUND_STRING("Powers up Rock moves."), .aiRating = 6, }, @@ -2277,22 +2145,14 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_ELECTROMORPHOSIS] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Electromorphosis"), - #else - .name = _("Elecmrphosis"), - #endif .description = COMPOUND_STRING("Gets Charged when hit."), .aiRating = 5, }, [ABILITY_PROTOSYNTHESIS] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Protosynthesis"), - #else - .name = _("Protosnthsis"), - #endif .description = COMPOUND_STRING("Sun boosts best stat."), .aiRating = 7, .cantBeCopied = TRUE, @@ -2322,11 +2182,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_VESSEL_OF_RUIN] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Vessel of Ruin"), - #else - .name = _("VesselOfRuin"), - #endif .description = COMPOUND_STRING("Lowers foes' sp. damage."), .aiRating = 5, .breakable = TRUE, @@ -2334,11 +2190,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_SWORD_OF_RUIN] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Sword of Ruin"), - #else - .name = _("SwordOfRuin"), - #endif .description = COMPOUND_STRING("Lowers foes' Defense."), .aiRating = 5, .breakable = TRUE, @@ -2346,11 +2198,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_TABLETS_OF_RUIN] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Tablets of Ruin"), - #else - .name = _("TabltsOfRuin"), - #endif .description = COMPOUND_STRING("Lowers foes' damage."), .aiRating = 5, .breakable = TRUE, @@ -2358,11 +2206,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_BEADS_OF_RUIN] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Beads of Ruin"), - #else - .name = _("BeadsOfRuin"), - #endif .description = COMPOUND_STRING("Lowers foes' Sp. Defense."), .aiRating = 5, .breakable = TRUE, @@ -2370,22 +2214,14 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_ORICHALCUM_PULSE] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Orichalcum Pulse"), - #else - .name = _("OrchlcumPlse"), - #endif .description = COMPOUND_STRING("Summons sunlight in battle."), .aiRating = 8, }, [ABILITY_HADRON_ENGINE] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Hadron Engine"), - #else - .name = _("HadronEngine"), - #endif .description = COMPOUND_STRING("Field becomes Electric."), .aiRating = 8, }, @@ -2413,11 +2249,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_SUPREME_OVERLORD] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Supreme Overlord"), - #else - .name = _("SuprmeOvrlrd"), - #endif .description = COMPOUND_STRING("Inherits fallen's strength."), .aiRating = 6, }, @@ -2454,11 +2286,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_MYCELIUM_MIGHT] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Mycelium Might"), - #else - .name = _("MceliumMight"), - #endif .description = COMPOUND_STRING("Status moves never fail."), .aiRating = 2, }, @@ -2480,11 +2308,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_EMBODY_ASPECT_TEAL_MASK] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Embody Aspect"), - #else - .name = _("EmbodyAspect"), - #endif .description = COMPOUND_STRING("Raises Speed."), .aiRating = 6, .cantBeCopied = TRUE, @@ -2495,11 +2319,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_EMBODY_ASPECT_HEARTHFLAME_MASK] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Embody Aspect"), - #else - .name = _("EmbodyAspect"), - #endif .description = COMPOUND_STRING("Raises Attack."), .aiRating = 6, .cantBeCopied = TRUE, @@ -2510,11 +2330,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_EMBODY_ASPECT_WELLSPRING_MASK] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Embody Aspect"), - #else - .name = _("EmbodyAspect"), - #endif .description = COMPOUND_STRING("Raises Sp. Def."), .aiRating = 6, .cantBeCopied = TRUE, @@ -2525,11 +2341,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_EMBODY_ASPECT_CORNERSTONE_MASK] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Embody Aspect"), - #else - .name = _("EmbodyAspect"), - #endif .description = COMPOUND_STRING("Raises Defense."), .aiRating = 6, .cantBeCopied = TRUE, @@ -2547,11 +2359,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_SUPERSWEET_SYRUP] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Supersweet Syrup"), - #else - .name = _("SuprswtSyrup"), - #endif .description = COMPOUND_STRING("Lowers the foe's Evasion."), .aiRating = 5, }, @@ -2559,7 +2367,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_TERA_SHIFT] = { .name = _("Tera Shift"), - .description = COMPOUND_STRING("Terasteralizes upon entry."), + .description = COMPOUND_STRING("Terastallizes upon entry."), .aiRating = 10, .cantBeCopied = TRUE, .cantBeSwapped = TRUE, @@ -2582,11 +2390,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_TERAFORM_ZERO] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Teraform Zero"), - #else - .name = _("TeraformZero"), - #endif .description = COMPOUND_STRING("Removes weather and terrain."), .aiRating = 10, .cantBeCopied = TRUE, @@ -2596,11 +2400,7 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] = [ABILITY_POISON_PUPPETEER] = { - #if B_EXPANDED_ABILITY_NAMES == TRUE .name = _("Poison Puppeteer"), - #else - .name = _("PoisnPuppter"), - #endif .description = COMPOUND_STRING("Confuses poisoned foes."), .aiRating = 8, .cantBeCopied = TRUE, diff --git a/src/data/battle_anim.h b/src/data/battle_anim.h index 371fb61a48..2ab982d2d7 100644 --- a/src/data/battle_anim.h +++ b/src/data/battle_anim.h @@ -1455,12 +1455,16 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] = {gBattleAnimSpriteGfx_SyrupSplat, 0x400, ANIM_TAG_SYRUP_SPLAT_RED}, {gBattleAnimSpriteGfx_SyrupSplat, 0x400, ANIM_TAG_SYRUP_SPLAT_YELLOW}, {gBattleAnimSpriteGfx_IvyCudgel, 0x800, ANIM_TAG_IVY_CUDGEL_GRASS}, - {NULL, 0x0, ANIM_TAG_IVY_CUDGEL_FIRE}, - {NULL, 0x0, ANIM_TAG_IVY_CUDGEL_ROCK}, - {NULL, 0x0, ANIM_TAG_IVY_CUDGEL_WATER}, + {gBattleAnimSpriteGfx_IvyCudgel, 0x800, ANIM_TAG_IVY_CUDGEL_FIRE}, + {gBattleAnimSpriteGfx_IvyCudgel, 0x800, ANIM_TAG_IVY_CUDGEL_ROCK}, + {gBattleAnimSpriteGfx_IvyCudgel, 0x800, ANIM_TAG_IVY_CUDGEL_WATER}, {gBattleAnimSpriteGfx_TeraCrystal, 0x800, ANIM_TAG_TERA_CRYSTAL}, {gBattleAnimSpriteGfx_TeraShatter, 0x0180, ANIM_TAG_TERA_SHATTER}, {gBattleAnimSpriteGfx_DreepyMissile, 0x200, ANIM_TAG_DREEPY_SHINY}, + {gBattleAnimSpriteGfx_BloodMoon, 0x0800, ANIM_TAG_BLOOD_MOON}, + {gBattleAnimSpriteGfx_RedExplosion, 0x0800, ANIM_TAG_RED_EXPLOSION}, + {gBattleAnimSpriteGfx_Beam, 0x0800, ANIM_TAG_BEAM}, + {gBattleAnimSpriteGfx_PurpleChain, 0x1000, ANIM_TAG_PURPLE_CHAIN}, }; const struct CompressedSpritePalette gBattleAnimPaletteTable[] = @@ -1923,6 +1927,10 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] = {gBattleAnimSpritePal_TeraCrystal, ANIM_TAG_TERA_CRYSTAL}, {gBattleAnimSpritePal_TeraShatter, ANIM_TAG_TERA_SHATTER}, {gBattleAnimSpritePal_DreepyMissileShiny, ANIM_TAG_DREEPY_SHINY}, + {gBattleAnimSpritePal_BloodMoon, ANIM_TAG_BLOOD_MOON}, + {gBattleAnimSpritePal_RedExplosion, ANIM_TAG_RED_EXPLOSION}, + {gBattleAnimSpritePal_Beam, ANIM_TAG_BEAM}, + {gBattleAnimSpritePal_PurpleChain, ANIM_TAG_PURPLE_CHAIN}, }; const struct BattleAnimBackground gBattleAnimBackgroundTable[] = @@ -2010,4 +2018,5 @@ const struct BattleAnimBackground gBattleAnimBackgroundTable[] = [BG_STEEL_BEAM_PLAYER] = {gBattleAnimBgImage_Highspeed, gBattleAnimBgPalette_SteelBeam, gBattleAnimBgTilemap_HighspeedPlayer}, [BG_CHLOROBLAST] = {gBattleAnimBgImage_HydroCannon, gBattleAnimBgPalette_Chloroblast, gBattleAnimBgTilemap_HydroCannon}, [BG_RAINBOW] = {gBattleAnimBgImage_Rainbow, gBattleAnimBGPalette_Rainbow, gBattleAnimBgTilemap_Rainbow}, + [BG_SWAMP] = {gBattleAnimBgImage_Swamp, gBattleAnimBGPalette_Swamp, gBattleAnimBgTilemap_Swamp}, }; diff --git a/src/data/battle_move_effects.h b/src/data/battle_move_effects.h index f970f0e9f7..ead7cee6f1 100644 --- a/src/data/battle_move_effects.h +++ b/src/data/battle_move_effects.h @@ -2169,7 +2169,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_FICKLE_BEAM] = { - .battleScript = BattleScript_EffectHit, + .battleScript = BattleScript_EffectFickleBeam, .battleTvScore = 0, // TODO: Assign points }, diff --git a/src/data/field_effects/field_effect_objects.h b/src/data/field_effects/field_effect_objects.h index 3b9dafd2cb..1a169007c5 100755 --- a/src/data/field_effects/field_effect_objects.h +++ b/src/data/field_effects/field_effect_objects.h @@ -432,33 +432,33 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_DeepSandFootprints = { }; static const struct SpriteFrameImage sPicTable_BugTracks[] = { - overworld_frame(gFieldEffectObjectPic_BugTracks, 2, 2, 0), - overworld_frame(gFieldEffectObjectPic_BugTracks, 2, 2, 1), + overworld_frame(gFieldEffectObjectPic_BugTracks, 2, 2, 0), + overworld_frame(gFieldEffectObjectPic_BugTracks, 2, 2, 1), }; static const struct SpriteFrameImage sPicTable_SpotTracks[] = { - overworld_frame(gFieldEffectObjectPic_SpotTracks, 2, 2, 0), - overworld_frame(gFieldEffectObjectPic_SpotTracks, 2, 2, 1), + overworld_frame(gFieldEffectObjectPic_SpotTracks, 2, 2, 0), + overworld_frame(gFieldEffectObjectPic_SpotTracks, 2, 2, 1), }; const struct SpriteTemplate gFieldEffectObjectTemplate_BugTracks = { - .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, - .oam = &gObjectEventBaseOam_16x16, - .anims = sAnimTable_DeepSandFootprints, - .images = sPicTable_BugTracks, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = UpdateFootprintsTireTracksFieldEffect, + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_DeepSandFootprints, + .images = sPicTable_BugTracks, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateFootprintsTireTracksFieldEffect, }; const struct SpriteTemplate gFieldEffectObjectTemplate_SpotTracks = { - .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, - .oam = &gObjectEventBaseOam_16x16, - .anims = sAnimTable_DeepSandFootprints, - .images = sPicTable_SpotTracks, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = UpdateFootprintsTireTracksFieldEffect, + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_DeepSandFootprints, + .images = sPicTable_SpotTracks, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateFootprintsTireTracksFieldEffect, }; static const struct SpriteFrameImage sPicTable_BikeTireTracks[] = { @@ -470,10 +470,10 @@ static const struct SpriteFrameImage sPicTable_BikeTireTracks[] = { static const struct SpriteFrameImage sPicTable_SlitherTracks[] = { - overworld_frame(gFieldEffectObjectPic_SlitherTracks, 2, 2, 0), - overworld_frame(gFieldEffectObjectPic_SlitherTracks, 2, 2, 1), - overworld_frame(gFieldEffectObjectPic_SlitherTracks, 2, 2, 2), - overworld_frame(gFieldEffectObjectPic_SlitherTracks, 2, 2, 3), + overworld_frame(gFieldEffectObjectPic_SlitherTracks, 2, 2, 0), + overworld_frame(gFieldEffectObjectPic_SlitherTracks, 2, 2, 1), + overworld_frame(gFieldEffectObjectPic_SlitherTracks, 2, 2, 2), + overworld_frame(gFieldEffectObjectPic_SlitherTracks, 2, 2, 3), }; static const union AnimCmd sBikeTireTracksAnim_South[] = @@ -549,13 +549,13 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_BikeTireTracks = { const struct SpriteTemplate gFieldEffectObjectTemplate_SlitherTracks = { - .tileTag = 0xFFFF, - .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, - .oam = &gObjectEventBaseOam_16x16, - .anims = sAnimTable_BikeTireTracks, - .images = sPicTable_SlitherTracks, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = UpdateFootprintsTireTracksFieldEffect, + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_BikeTireTracks, + .images = sPicTable_SlitherTracks, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateFootprintsTireTracksFieldEffect, }; static const struct SpriteFrameImage sPicTable_JumpBigSplash[] = { diff --git a/src/data/gimmicks.h b/src/data/gimmicks.h index 95a233e3fe..5b06feddef 100644 --- a/src/data/gimmicks.h +++ b/src/data/gimmicks.h @@ -5,7 +5,7 @@ const struct GimmickInfo gGimmicksInfo[GIMMICKS_COUNT] = { [GIMMICK_NONE] = {0}, - [GIMMICK_MEGA] = + [GIMMICK_MEGA] = { .triggerSheet = &sSpriteSheet_MegaTrigger, .triggerPal = &sSpritePalette_MegaTrigger, @@ -15,7 +15,7 @@ const struct GimmickInfo gGimmicksInfo[GIMMICKS_COUNT] = .CanActivate = CanMegaEvolve, .ActivateGimmick = ActivateMegaEvolution, }, - [GIMMICK_Z_MOVE] = + [GIMMICK_Z_MOVE] = { .triggerSheet = &sSpriteSheet_ZMoveTrigger, .triggerPal = &sSpritePalette_ZMoveTrigger, @@ -23,7 +23,7 @@ const struct GimmickInfo gGimmicksInfo[GIMMICKS_COUNT] = .CanActivate = CanUseZMove, .ActivateGimmick = ActivateZMove, }, - [GIMMICK_ULTRA_BURST] = + [GIMMICK_ULTRA_BURST] = { .triggerSheet = &sSpriteSheet_BurstTrigger, .triggerPal = &sSpritePalette_BurstTrigger, @@ -31,7 +31,7 @@ const struct GimmickInfo gGimmicksInfo[GIMMICKS_COUNT] = .CanActivate = CanUltraBurst, .ActivateGimmick = ActivateUltraBurst, }, - [GIMMICK_DYNAMAX] = + [GIMMICK_DYNAMAX] = { .triggerSheet = &sSpriteSheet_DynamaxTrigger, .triggerPal = &sSpritePalette_DynamaxTrigger, diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 37258b7f54..e43fa7c565 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -1593,10 +1593,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Annihilape[] = INCBIN_U8("graphics/pokemon/annihilape/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Annihilape[] = INCBIN_COMP("graphics/pokemon/annihilape/overworld.4bpp"); + const u32 gObjectEventPic_Annihilape[] = INCBIN_COMP("graphics/pokemon/annihilape/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Annihilape[] = INCBIN_U32("graphics/pokemon/annihilape/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Annihilape[] = INCBIN_U32("graphics/pokemon/annihilape/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Annihilape[] = INCBIN_U32("graphics/pokemon/annihilape/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Annihilape[] = INCBIN_U32("graphics/pokemon/annihilape/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_GEN_9_CROSS_EVOS @@ -3690,9 +3690,17 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonIcon_TaurosPaldeanAquaBreed[] = INCBIN_U8("graphics/pokemon/tauros/paldean_aqua_breed/icon.4bpp"); #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_TaurosPaldeanCombatBreed[] = INCBIN_COMP("graphics/pokemon/tauros/paldean_combat_breed/overworld.4bpp"); - // const u32 gObjectEventPic_TaurosPaldeanBlazeBreed[] = INCBIN_COMP("graphics/pokemon/tauros/paldean_blaze_breed/overworld.4bpp"); - // const u32 gObjectEventPic_TaurosPaldeanAquaBreed[] = INCBIN_COMP("graphics/pokemon/tauros/paldean_aqua_breed/overworld.4bpp"); + const u32 gObjectEventPic_TaurosPaldeanCombatBreed[] = INCBIN_COMP("graphics/pokemon/tauros/paldean_combat_breed/overworld.4bpp"); + const u32 gObjectEventPic_TaurosPaldeanBlazeBreed[] = INCBIN_COMP("graphics/pokemon/tauros/paldean_blaze_breed/overworld.4bpp"); + const u32 gObjectEventPic_TaurosPaldeanAquaBreed[] = INCBIN_COMP("graphics/pokemon/tauros/paldean_aqua_breed/overworld.4bpp"); +#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE + const u32 gOverworldPalette_TaurosPaldeanCombatBreed[] = INCBIN_U32("graphics/pokemon/tauros/paldean_combat_breed/overworld_normal.gbapal.lz"); + const u32 gOverworldPalette_TaurosPaldeanBlazeBreed[] = INCBIN_U32("graphics/pokemon/tauros/paldean_blaze_breed/overworld_normal.gbapal.lz"); + const u32 gOverworldPalette_TaurosPaldeanAquaBreed[] = INCBIN_U32("graphics/pokemon/tauros/paldean_aqua_breed/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_TaurosPaldeanCombatBreed[] = INCBIN_U32("graphics/pokemon/tauros/paldean_combat_breed/overworld_shiny.gbapal.lz"); + const u32 gShinyOverworldPalette_TaurosPaldeanBlazeBreed[] = INCBIN_U32("graphics/pokemon/tauros/paldean_blaze_breed/overworld_shiny.gbapal.lz"); + const u32 gShinyOverworldPalette_TaurosPaldeanAquaBreed[] = INCBIN_U32("graphics/pokemon/tauros/paldean_aqua_breed/overworld_shiny.gbapal.lz"); +#endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_PALDEAN_FORMS #endif //P_FAMILY_TAUROS @@ -5193,10 +5201,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonShinyPalette_WooperPaldean[] = INCBIN_U32("graphics/pokemon/wooper/wooper_paldean/shiny.gbapal.lz"); const u8 gMonIcon_WooperPaldean[] = INCBIN_U8("graphics/pokemon/wooper/wooper_paldean/icon.4bpp"); #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_WooperPaldean[] = INCBIN_COMP("graphics/pokemon/wooper/wooper_paldean/overworld.4bpp"); + const u32 gObjectEventPic_WooperPaldean[] = INCBIN_COMP("graphics/pokemon/wooper/wooper_paldean/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_WooperPaldean[] = INCBIN_U32("graphics/pokemon/wooper/wooper_paldean/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_WooperPaldean[] = INCBIN_U32("graphics/pokemon/wooper/wooper_paldean/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_WooperPaldean[] = INCBIN_U32("graphics/pokemon/wooper/wooper_paldean/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_WooperPaldean[] = INCBIN_U32("graphics/pokemon/wooper/wooper_paldean/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -5209,10 +5217,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Clodsire[] = INCBIN_U8("graphics/pokemon/clodsire/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Clodsire[] = INCBIN_COMP("graphics/pokemon/clodsire/overworld.4bpp"); + const u32 gObjectEventPic_Clodsire[] = INCBIN_COMP("graphics/pokemon/clodsire/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Clodsire[] = INCBIN_U32("graphics/pokemon/clodsire/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Clodsire[] = INCBIN_U32("graphics/pokemon/clodsire/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Clodsire[] = INCBIN_U32("graphics/pokemon/clodsire/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Clodsire[] = INCBIN_U32("graphics/pokemon/clodsire/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_PALDEAN_FORMS @@ -5520,10 +5528,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Farigiraf[] = INCBIN_U8("graphics/pokemon/farigiraf/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Farigiraf[] = INCBIN_COMP("graphics/pokemon/farigiraf/overworld.4bpp"); + const u32 gObjectEventPic_Farigiraf[] = INCBIN_COMP("graphics/pokemon/farigiraf/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Farigiraf[] = INCBIN_U32("graphics/pokemon/farigiraf/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Farigiraf[] = INCBIN_U32("graphics/pokemon/farigiraf/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Farigiraf[] = INCBIN_U32("graphics/pokemon/farigiraf/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Farigiraf[] = INCBIN_U32("graphics/pokemon/farigiraf/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_GEN_9_CROSS_EVOS @@ -5588,10 +5596,13 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Dudunsparce[] = INCBIN_U8("graphics/pokemon/dudunsparce/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Dudunsparce[] = INCBIN_COMP("graphics/pokemon/dudunsparce/overworld.4bpp"); + const u32 gObjectEventPic_DudunsparceTwoSegment[] = INCBIN_COMP("graphics/pokemon/dudunsparce/overworld.4bpp"); + const u32 gObjectEventPic_DudunsparceThreeSegment[] = INCBIN_COMP("graphics/pokemon/dudunsparce/three_segment/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Dudunsparce[] = INCBIN_U32("graphics/pokemon/dudunsparce/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Dudunsparce[] = INCBIN_U32("graphics/pokemon/dudunsparce/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Dudunsparce[] = INCBIN_U32("graphics/pokemon/dudunsparce/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Dudunsparce[] = INCBIN_U32("graphics/pokemon/dudunsparce/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_DudunsparceThreeSegment[] = INCBIN_U32("graphics/pokemon/dudunsparce/three_segment/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_DudunsparceThreeSegment[] = INCBIN_U32("graphics/pokemon/dudunsparce/three_segment/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -5917,7 +5928,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gObjectEventPic_UrsalunaBloodmoon[] = INCBIN_COMP("graphics/pokemon/ursaluna/bloodmoon/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE const u32 gOverworldPalette_UrsalunaBloodmoon[] = INCBIN_U32("graphics/pokemon/ursaluna/bloodmoon/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_UrsalunaBloodmoon[] = INCBIN_U32("graphics/pokemon/ursaluna/bloodmoon/overworld_shiny.gbapal.lz"); + const u32 gShinyOverworldPalette_UrsalunaBloodmoon[] = INCBIN_U32("graphics/pokemon/ursaluna/bloodmoon/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_GEN_8_CROSS_EVOS @@ -10834,7 +10845,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gObjectEventPic_DialgaOrigin[] = INCBIN_COMP("graphics/pokemon/dialga/origin/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE const u32 gOverworldPalette_DialgaOrigin[] = INCBIN_U32("graphics/pokemon/dialga/origin/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_DialgaOrigin[] = INCBIN_U32("graphics/pokemon/dialga/origin/overworld_shiny.gbapal.lz"); + const u32 gShinyOverworldPalette_DialgaOrigin[] = INCBIN_U32("graphics/pokemon/dialga/origin/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_DIALGA @@ -10865,7 +10876,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gObjectEventPic_PalkiaOrigin[] = INCBIN_COMP("graphics/pokemon/palkia/origin/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE const u32 gOverworldPalette_PalkiaOrigin[] = INCBIN_U32("graphics/pokemon/palkia/origin/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_PalkiaOrigin[] = INCBIN_U32("graphics/pokemon/palkia/origin/overworld_shiny.gbapal.lz"); + const u32 gShinyOverworldPalette_PalkiaOrigin[] = INCBIN_U32("graphics/pokemon/palkia/origin/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_PALKIA @@ -12202,6 +12213,17 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonShinyPalette_BasculinBlueStriped[] = INCBIN_U32("graphics/pokemon/basculin/blue_striped/shiny.gbapal.lz"); const u8 gMonIcon_BasculinBlueStriped[] = INCBIN_U8("graphics/pokemon/basculin/blue_striped/icon.4bpp"); +#if OW_POKEMON_OBJECT_EVENTS + const u32 gObjectEventPic_BasculinRedStriped[] = INCBIN_COMP("graphics/pokemon/basculin/overworld.4bpp"); + const u32 gObjectEventPic_BasculinBlueStriped[] = INCBIN_COMP("graphics/pokemon/basculin/blue_striped/overworld.4bpp"); +#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE + const u32 gOverworldPalette_BasculinRedStriped[] = INCBIN_U32("graphics/pokemon/basculin/overworld_normal.gbapal.lz"); + const u32 gOverworldPalette_BasculinBlueStriped[] = INCBIN_U32("graphics/pokemon/basculin/blue_striped/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_BasculinRedStriped[] = INCBIN_U32("graphics/pokemon/basculin/overworld_shiny.gbapal.lz"); + const u32 gShinyOverworldPalette_BasculinBlueStriped[] = INCBIN_U32("graphics/pokemon/basculin/blue_striped/overworld_shiny.gbapal.lz"); +#endif //OW_PKMN_OBJECTS_SHARE_PALETTES +#endif //OW_POKEMON_OBJECT_EVENTS + #if P_HISUIAN_FORMS const u32 gMonFrontPic_BasculinWhiteStriped[] = INCBIN_U32("graphics/pokemon/basculin/white_striped/anim_front.4bpp.lz"); const u32 gMonPalette_BasculinWhiteStriped[] = INCBIN_U32("graphics/pokemon/basculin/white_striped/normal.gbapal.lz"); @@ -12210,15 +12232,9 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonIcon_BasculinWhiteStriped[] = INCBIN_U8("graphics/pokemon/basculin/white_striped/icon.4bpp"); #if OW_POKEMON_OBJECT_EVENTS - const u32 gObjectEventPic_BasculinRedStriped[] = INCBIN_COMP("graphics/pokemon/basculin/overworld.4bpp"); - const u32 gObjectEventPic_BasculinBlueStriped[] = INCBIN_COMP("graphics/pokemon/basculin/blue_striped/overworld.4bpp"); const u32 gObjectEventPic_BasculinWhiteStriped[] = INCBIN_COMP("graphics/pokemon/basculin/white_striped/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - const u32 gOverworldPalette_BasculinRedStriped[] = INCBIN_U32("graphics/pokemon/basculin/overworld_normal.gbapal.lz"); - const u32 gOverworldPalette_BasculinBlueStriped[] = INCBIN_U32("graphics/pokemon/basculin/blue_striped/overworld_normal.gbapal.lz"); const u32 gOverworldPalette_BasculinWhiteStriped[] = INCBIN_U32("graphics/pokemon/basculin/white_striped/overworld_normal.gbapal.lz"); - const u32 gShinyOverworldPalette_BasculinRedStriped[] = INCBIN_U32("graphics/pokemon/basculin/overworld_shiny.gbapal.lz"); - const u32 gShinyOverworldPalette_BasculinBlueStriped[] = INCBIN_U32("graphics/pokemon/basculin/blue_striped/overworld_shiny.gbapal.lz"); const u32 gShinyOverworldPalette_BasculinWhiteStriped[] = INCBIN_U32("graphics/pokemon/basculin/white_striped/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -13754,10 +13770,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Kingambit[] = INCBIN_U8("graphics/pokemon/kingambit/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Kingambit[] = INCBIN_COMP("graphics/pokemon/kingambit/overworld.4bpp"); + const u32 gObjectEventPic_Kingambit[] = INCBIN_COMP("graphics/pokemon/kingambit/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Kingambit[] = INCBIN_U32("graphics/pokemon/kingambit/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Kingambit[] = INCBIN_U32("graphics/pokemon/kingambit/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Kingambit[] = INCBIN_U32("graphics/pokemon/kingambit/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Kingambit[] = INCBIN_U32("graphics/pokemon/kingambit/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_GEN_9_CROSS_EVOS @@ -14180,7 +14196,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gObjectEventPic_EnamorusIncarnate[] = INCBIN_COMP("graphics/pokemon/enamorus/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE const u32 gOverworldPalette_EnamorusIncarnate[] = INCBIN_U32("graphics/pokemon/enamorus/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_EnamorusIncarnate[] = INCBIN_U32("graphics/pokemon/enamorus/overworld_shiny.gbapal.lz"); + const u32 gShinyOverworldPalette_EnamorusIncarnate[] = INCBIN_U32("graphics/pokemon/enamorus/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -14193,7 +14209,7 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gObjectEventPic_EnamorusTherian[] = INCBIN_COMP("graphics/pokemon/enamorus/therian/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE const u32 gOverworldPalette_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/overworld_shiny.gbapal.lz"); + const u32 gShinyOverworldPalette_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_ENAMORUS @@ -15939,10 +15955,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonShinyPalette_XerneasActive[] = INCBIN_U32("graphics/pokemon/xerneas/active/shiny.gbapal.lz"); const u8 gMonIcon_XerneasActive[] = INCBIN_U8("graphics/pokemon/xerneas/active/icon.4bpp"); #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_XerneasActive[] = INCBIN_COMP("graphics/pokemon/xerneas/active/overworld.4bpp"); + const u32 gObjectEventPic_XerneasActive[] = INCBIN_COMP("graphics/pokemon/xerneas/active/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_XerneasActive[] = INCBIN_U32("graphics/pokemon/xerneas/active/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_XerneasActive[] = INCBIN_U32("graphics/pokemon/xerneas/active/overworld_shiny.gbapal.lz"); + //const u32 gOverworldPalette_XerneasActive[] = INCBIN_U32("graphics/pokemon/xerneas/active/overworld_normal.gbapal.lz"); + //const u32 gShinyOverworldPalette_XerneasActive[] = INCBIN_U32("graphics/pokemon/xerneas/active/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_XERNEAS @@ -18563,10 +18579,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Dipplin[] = INCBIN_U8("graphics/pokemon/dipplin/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Dipplin[] = INCBIN_COMP("graphics/pokemon/dipplin/overworld.4bpp"); + const u32 gObjectEventPic_Dipplin[] = INCBIN_COMP("graphics/pokemon/dipplin/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Dipplin[] = INCBIN_U32("graphics/pokemon/dipplin/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Dipplin[] = INCBIN_U32("graphics/pokemon/dipplin/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Dipplin[] = INCBIN_U32("graphics/pokemon/dipplin/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Dipplin[] = INCBIN_U32("graphics/pokemon/dipplin/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -18579,10 +18595,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Hydrapple[] = INCBIN_U8("graphics/pokemon/hydrapple/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Hydrapple[] = INCBIN_COMP("graphics/pokemon/hydrapple/overworld.4bpp"); + const u32 gObjectEventPic_Hydrapple[] = INCBIN_COMP("graphics/pokemon/hydrapple/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Hydrapple[] = INCBIN_U32("graphics/pokemon/hydrapple/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Hydrapple[] = INCBIN_U32("graphics/pokemon/hydrapple/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Hydrapple[] = INCBIN_U32("graphics/pokemon/hydrapple/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Hydrapple[] = INCBIN_U32("graphics/pokemon/hydrapple/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_GEN_9_CROSS_EVOS @@ -19517,10 +19533,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Archaludon[] = INCBIN_U8("graphics/pokemon/archaludon/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Archaludon[] = INCBIN_COMP("graphics/pokemon/archaludon/overworld.4bpp"); + const u32 gObjectEventPic_Archaludon[] = INCBIN_COMP("graphics/pokemon/archaludon/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Archaludon[] = INCBIN_U32("graphics/pokemon/archaludon/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Archaludon[] = INCBIN_U32("graphics/pokemon/archaludon/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Archaludon[] = INCBIN_U32("graphics/pokemon/archaludon/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Archaludon[] = INCBIN_U32("graphics/pokemon/archaludon/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_GEN_9_CROSS_EVOS @@ -19888,10 +19904,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Sprigatito[] = INCBIN_U8("graphics/pokemon/sprigatito/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Sprigatito[] = INCBIN_COMP("graphics/pokemon/sprigatito/overworld.4bpp"); + const u32 gObjectEventPic_Sprigatito[] = INCBIN_COMP("graphics/pokemon/sprigatito/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Sprigatito[] = INCBIN_U32("graphics/pokemon/sprigatito/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Sprigatito[] = INCBIN_U32("graphics/pokemon/sprigatito/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Sprigatito[] = INCBIN_U32("graphics/pokemon/sprigatito/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Sprigatito[] = INCBIN_U32("graphics/pokemon/sprigatito/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -19904,10 +19920,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Floragato[] = INCBIN_U8("graphics/pokemon/floragato/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Floragato[] = INCBIN_COMP("graphics/pokemon/floragato/overworld.4bpp"); + const u32 gObjectEventPic_Floragato[] = INCBIN_COMP("graphics/pokemon/floragato/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Floragato[] = INCBIN_U32("graphics/pokemon/floragato/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Floragato[] = INCBIN_U32("graphics/pokemon/floragato/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Floragato[] = INCBIN_U32("graphics/pokemon/floragato/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Floragato[] = INCBIN_U32("graphics/pokemon/floragato/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -19920,10 +19936,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Meowscarada[] = INCBIN_U8("graphics/pokemon/meowscarada/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Meowscarada[] = INCBIN_COMP("graphics/pokemon/meowscarada/overworld.4bpp"); + const u32 gObjectEventPic_Meowscarada[] = INCBIN_COMP("graphics/pokemon/meowscarada/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Meowscarada[] = INCBIN_U32("graphics/pokemon/meowscarada/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Meowscarada[] = INCBIN_U32("graphics/pokemon/meowscarada/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Meowscarada[] = INCBIN_U32("graphics/pokemon/meowscarada/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Meowscarada[] = INCBIN_U32("graphics/pokemon/meowscarada/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_SPRIGATITO @@ -19938,10 +19954,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Fuecoco[] = INCBIN_U8("graphics/pokemon/fuecoco/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Fuecoco[] = INCBIN_COMP("graphics/pokemon/fuecoco/overworld.4bpp"); + const u32 gObjectEventPic_Fuecoco[] = INCBIN_COMP("graphics/pokemon/fuecoco/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Fuecoco[] = INCBIN_U32("graphics/pokemon/fuecoco/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Fuecoco[] = INCBIN_U32("graphics/pokemon/fuecoco/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Fuecoco[] = INCBIN_U32("graphics/pokemon/fuecoco/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Fuecoco[] = INCBIN_U32("graphics/pokemon/fuecoco/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -19954,10 +19970,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Crocalor[] = INCBIN_U8("graphics/pokemon/crocalor/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Crocalor[] = INCBIN_COMP("graphics/pokemon/crocalor/overworld.4bpp"); + const u32 gObjectEventPic_Crocalor[] = INCBIN_COMP("graphics/pokemon/crocalor/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Crocalor[] = INCBIN_U32("graphics/pokemon/crocalor/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Crocalor[] = INCBIN_U32("graphics/pokemon/crocalor/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Crocalor[] = INCBIN_U32("graphics/pokemon/crocalor/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Crocalor[] = INCBIN_U32("graphics/pokemon/crocalor/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -19970,10 +19986,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Skeledirge[] = INCBIN_U8("graphics/pokemon/skeledirge/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Skeledirge[] = INCBIN_COMP("graphics/pokemon/skeledirge/overworld.4bpp"); + const u32 gObjectEventPic_Skeledirge[] = INCBIN_COMP("graphics/pokemon/skeledirge/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Skeledirge[] = INCBIN_U32("graphics/pokemon/skeledirge/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Skeledirge[] = INCBIN_U32("graphics/pokemon/skeledirge/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Skeledirge[] = INCBIN_U32("graphics/pokemon/skeledirge/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Skeledirge[] = INCBIN_U32("graphics/pokemon/skeledirge/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_FUECOCO @@ -19988,10 +20004,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Quaxly[] = INCBIN_U8("graphics/pokemon/quaxly/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Quaxly[] = INCBIN_COMP("graphics/pokemon/quaxly/overworld.4bpp"); + const u32 gObjectEventPic_Quaxly[] = INCBIN_COMP("graphics/pokemon/quaxly/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Quaxly[] = INCBIN_U32("graphics/pokemon/quaxly/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Quaxly[] = INCBIN_U32("graphics/pokemon/quaxly/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Quaxly[] = INCBIN_U32("graphics/pokemon/quaxly/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Quaxly[] = INCBIN_U32("graphics/pokemon/quaxly/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20004,10 +20020,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Quaxwell[] = INCBIN_U8("graphics/pokemon/quaxwell/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Quaxwell[] = INCBIN_COMP("graphics/pokemon/quaxwell/overworld.4bpp"); + const u32 gObjectEventPic_Quaxwell[] = INCBIN_COMP("graphics/pokemon/quaxwell/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Quaxwell[] = INCBIN_U32("graphics/pokemon/quaxwell/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Quaxwell[] = INCBIN_U32("graphics/pokemon/quaxwell/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Quaxwell[] = INCBIN_U32("graphics/pokemon/quaxwell/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Quaxwell[] = INCBIN_U32("graphics/pokemon/quaxwell/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20020,10 +20036,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Quaquaval[] = INCBIN_U8("graphics/pokemon/quaquaval/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Quaquaval[] = INCBIN_COMP("graphics/pokemon/quaquaval/overworld.4bpp"); + const u32 gObjectEventPic_Quaquaval[] = INCBIN_COMP("graphics/pokemon/quaquaval/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Quaquaval[] = INCBIN_U32("graphics/pokemon/quaquaval/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Quaquaval[] = INCBIN_U32("graphics/pokemon/quaquaval/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Quaquaval[] = INCBIN_U32("graphics/pokemon/quaquaval/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Quaquaval[] = INCBIN_U32("graphics/pokemon/quaquaval/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_QUAXLY @@ -20038,10 +20054,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Lechonk[] = INCBIN_U8("graphics/pokemon/lechonk/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Lechonk[] = INCBIN_COMP("graphics/pokemon/lechonk/overworld.4bpp"); + const u32 gObjectEventPic_Lechonk[] = INCBIN_COMP("graphics/pokemon/lechonk/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Lechonk[] = INCBIN_U32("graphics/pokemon/lechonk/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Lechonk[] = INCBIN_U32("graphics/pokemon/lechonk/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Lechonk[] = INCBIN_U32("graphics/pokemon/lechonk/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Lechonk[] = INCBIN_U32("graphics/pokemon/lechonk/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20054,10 +20070,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Oinkologne[] = INCBIN_U8("graphics/pokemon/oinkologne/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_OinkologneMale[] = INCBIN_COMP("graphics/pokemon/oinkologne/overworld.4bpp"); + const u32 gObjectEventPic_OinkologneMale[] = INCBIN_COMP("graphics/pokemon/oinkologne/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_OinkologneMale[] = INCBIN_U32("graphics/pokemon/oinkologne/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_OinkologneMale[] = INCBIN_U32("graphics/pokemon/oinkologne/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_OinkologneMale[] = INCBIN_U32("graphics/pokemon/oinkologne/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_OinkologneMale[] = INCBIN_U32("graphics/pokemon/oinkologne/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20067,10 +20083,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ 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"); #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_OinkologneFemale[] = INCBIN_COMP("graphics/pokemon/oinkologne/female/overworld.4bpp"); + const u32 gObjectEventPic_OinkologneFemale[] = INCBIN_COMP("graphics/pokemon/oinkologne/female/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_OinkologneFemale[] = INCBIN_U32("graphics/pokemon/oinkologne/female/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_OinkologneFemale[] = INCBIN_U32("graphics/pokemon/oinkologne/female/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_OinkologneFemale[] = INCBIN_U32("graphics/pokemon/oinkologne/female/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_OinkologneFemale[] = INCBIN_U32("graphics/pokemon/oinkologne/female/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_LECHONK @@ -20085,10 +20101,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Tarountula[] = INCBIN_U8("graphics/pokemon/tarountula/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Tarountula[] = INCBIN_COMP("graphics/pokemon/tarountula/overworld.4bpp"); + const u32 gObjectEventPic_Tarountula[] = INCBIN_COMP("graphics/pokemon/tarountula/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Tarountula[] = INCBIN_U32("graphics/pokemon/tarountula/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Tarountula[] = INCBIN_U32("graphics/pokemon/tarountula/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Tarountula[] = INCBIN_U32("graphics/pokemon/tarountula/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Tarountula[] = INCBIN_U32("graphics/pokemon/tarountula/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20101,10 +20117,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Spidops[] = INCBIN_U8("graphics/pokemon/spidops/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Spidops[] = INCBIN_COMP("graphics/pokemon/spidops/overworld.4bpp"); + const u32 gObjectEventPic_Spidops[] = INCBIN_COMP("graphics/pokemon/spidops/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Spidops[] = INCBIN_U32("graphics/pokemon/spidops/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Spidops[] = INCBIN_U32("graphics/pokemon/spidops/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Spidops[] = INCBIN_U32("graphics/pokemon/spidops/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Spidops[] = INCBIN_U32("graphics/pokemon/spidops/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_TAROUNTULA @@ -20119,10 +20135,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Nymble[] = INCBIN_U8("graphics/pokemon/nymble/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Nymble[] = INCBIN_COMP("graphics/pokemon/nymble/overworld.4bpp"); + const u32 gObjectEventPic_Nymble[] = INCBIN_COMP("graphics/pokemon/nymble/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Nymble[] = INCBIN_U32("graphics/pokemon/nymble/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Nymble[] = INCBIN_U32("graphics/pokemon/nymble/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Nymble[] = INCBIN_U32("graphics/pokemon/nymble/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Nymble[] = INCBIN_U32("graphics/pokemon/nymble/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20135,10 +20151,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Lokix[] = INCBIN_U8("graphics/pokemon/lokix/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Lokix[] = INCBIN_COMP("graphics/pokemon/lokix/overworld.4bpp"); + const u32 gObjectEventPic_Lokix[] = INCBIN_COMP("graphics/pokemon/lokix/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Lokix[] = INCBIN_U32("graphics/pokemon/lokix/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Lokix[] = INCBIN_U32("graphics/pokemon/lokix/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Lokix[] = INCBIN_U32("graphics/pokemon/lokix/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Lokix[] = INCBIN_U32("graphics/pokemon/lokix/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_NYMBLE @@ -20153,10 +20169,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Pawmi[] = INCBIN_U8("graphics/pokemon/pawmi/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Pawmi[] = INCBIN_COMP("graphics/pokemon/pawmi/overworld.4bpp"); + const u32 gObjectEventPic_Pawmi[] = INCBIN_COMP("graphics/pokemon/pawmi/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Pawmi[] = INCBIN_U32("graphics/pokemon/pawmi/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Pawmi[] = INCBIN_U32("graphics/pokemon/pawmi/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Pawmi[] = INCBIN_U32("graphics/pokemon/pawmi/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Pawmi[] = INCBIN_U32("graphics/pokemon/pawmi/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20169,10 +20185,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Pawmo[] = INCBIN_U8("graphics/pokemon/pawmo/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Pawmo[] = INCBIN_COMP("graphics/pokemon/pawmo/overworld.4bpp"); + const u32 gObjectEventPic_Pawmo[] = INCBIN_COMP("graphics/pokemon/pawmo/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Pawmo[] = INCBIN_U32("graphics/pokemon/pawmo/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Pawmo[] = INCBIN_U32("graphics/pokemon/pawmo/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Pawmo[] = INCBIN_U32("graphics/pokemon/pawmo/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Pawmo[] = INCBIN_U32("graphics/pokemon/pawmo/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20185,10 +20201,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Pawmot[] = INCBIN_U8("graphics/pokemon/pawmot/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Pawmot[] = INCBIN_COMP("graphics/pokemon/pawmot/overworld.4bpp"); + const u32 gObjectEventPic_Pawmot[] = INCBIN_COMP("graphics/pokemon/pawmot/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Pawmot[] = INCBIN_U32("graphics/pokemon/pawmot/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Pawmot[] = INCBIN_U32("graphics/pokemon/pawmot/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Pawmot[] = INCBIN_U32("graphics/pokemon/pawmot/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Pawmot[] = INCBIN_U32("graphics/pokemon/pawmot/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_PAWMI @@ -20203,10 +20219,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Tandemaus[] = INCBIN_U8("graphics/pokemon/tandemaus/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Tandemaus[] = INCBIN_COMP("graphics/pokemon/tandemaus/overworld.4bpp"); + const u32 gObjectEventPic_Tandemaus[] = INCBIN_COMP("graphics/pokemon/tandemaus/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Tandemaus[] = INCBIN_U32("graphics/pokemon/tandemaus/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Tandemaus[] = INCBIN_U32("graphics/pokemon/tandemaus/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Tandemaus[] = INCBIN_U32("graphics/pokemon/tandemaus/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Tandemaus[] = INCBIN_U32("graphics/pokemon/tandemaus/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20220,10 +20236,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_MausholdFamilyOfThree[] = INCBIN_U8("graphics/pokemon/maushold/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_MausholdFamilyOfThree[] = INCBIN_COMP("graphics/pokemon/maushold/overworld.4bpp"); + const u32 gObjectEventPic_MausholdFamilyOfThree[] = INCBIN_COMP("graphics/pokemon/maushold/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_MausholdFamilyOfThree[] = INCBIN_U32("graphics/pokemon/maushold/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_MausholdFamilyOfThree[] = INCBIN_U32("graphics/pokemon/maushold/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_MausholdFamilyOfThree[] = INCBIN_U32("graphics/pokemon/maushold/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_MausholdFamilyOfThree[] = INCBIN_U32("graphics/pokemon/maushold/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20234,10 +20250,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_MausholdFamilyOfFour[] = INCBIN_U8("graphics/pokemon/maushold/four/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_MausholdFamilyOfFour[] = INCBIN_COMP("graphics/pokemon/maushold/four/overworld.4bpp"); + const u32 gObjectEventPic_MausholdFamilyOfFour[] = INCBIN_COMP("graphics/pokemon/maushold/four/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_MausholdFamilyOfFour[] = INCBIN_U32("graphics/pokemon/maushold/four/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_MausholdFamilyOfFour[] = INCBIN_U32("graphics/pokemon/maushold/four/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_MausholdFamilyOfFour[] = INCBIN_U32("graphics/pokemon/maushold/four/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_MausholdFamilyOfFour[] = INCBIN_U32("graphics/pokemon/maushold/four/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_TANDEMAUS @@ -20252,10 +20268,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Fidough[] = INCBIN_U8("graphics/pokemon/fidough/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Fidough[] = INCBIN_COMP("graphics/pokemon/fidough/overworld.4bpp"); + const u32 gObjectEventPic_Fidough[] = INCBIN_COMP("graphics/pokemon/fidough/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Fidough[] = INCBIN_U32("graphics/pokemon/fidough/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Fidough[] = INCBIN_U32("graphics/pokemon/fidough/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Fidough[] = INCBIN_U32("graphics/pokemon/fidough/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Fidough[] = INCBIN_U32("graphics/pokemon/fidough/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20268,10 +20284,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Dachsbun[] = INCBIN_U8("graphics/pokemon/dachsbun/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Dachsbun[] = INCBIN_COMP("graphics/pokemon/dachsbun/overworld.4bpp"); + const u32 gObjectEventPic_Dachsbun[] = INCBIN_COMP("graphics/pokemon/dachsbun/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Dachsbun[] = INCBIN_U32("graphics/pokemon/dachsbun/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Dachsbun[] = INCBIN_U32("graphics/pokemon/dachsbun/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Dachsbun[] = INCBIN_U32("graphics/pokemon/dachsbun/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Dachsbun[] = INCBIN_U32("graphics/pokemon/dachsbun/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_FIDOUGH @@ -20286,10 +20302,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Smoliv[] = INCBIN_U8("graphics/pokemon/smoliv/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Smoliv[] = INCBIN_COMP("graphics/pokemon/smoliv/overworld.4bpp"); + const u32 gObjectEventPic_Smoliv[] = INCBIN_COMP("graphics/pokemon/smoliv/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Smoliv[] = INCBIN_U32("graphics/pokemon/smoliv/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Smoliv[] = INCBIN_U32("graphics/pokemon/smoliv/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Smoliv[] = INCBIN_U32("graphics/pokemon/smoliv/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Smoliv[] = INCBIN_U32("graphics/pokemon/smoliv/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20302,10 +20318,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Dolliv[] = INCBIN_U8("graphics/pokemon/dolliv/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Dolliv[] = INCBIN_COMP("graphics/pokemon/dolliv/overworld.4bpp"); + const u32 gObjectEventPic_Dolliv[] = INCBIN_COMP("graphics/pokemon/dolliv/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Dolliv[] = INCBIN_U32("graphics/pokemon/dolliv/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Dolliv[] = INCBIN_U32("graphics/pokemon/dolliv/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Dolliv[] = INCBIN_U32("graphics/pokemon/dolliv/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Dolliv[] = INCBIN_U32("graphics/pokemon/dolliv/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20318,10 +20334,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Arboliva[] = INCBIN_U8("graphics/pokemon/arboliva/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Arboliva[] = INCBIN_COMP("graphics/pokemon/arboliva/overworld.4bpp"); + const u32 gObjectEventPic_Arboliva[] = INCBIN_COMP("graphics/pokemon/arboliva/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Arboliva[] = INCBIN_U32("graphics/pokemon/arboliva/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Arboliva[] = INCBIN_U32("graphics/pokemon/arboliva/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Arboliva[] = INCBIN_U32("graphics/pokemon/arboliva/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Arboliva[] = INCBIN_U32("graphics/pokemon/arboliva/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_SMOLIV @@ -20337,10 +20353,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonShinyPalette_SquawkabillyGreenPlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/shiny.gbapal.lz"); const u8 gMonIcon_SquawkabillyGreenPlumage[] = INCBIN_U8("graphics/pokemon/squawkabilly/icon.4bpp"); #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_SquawkabillyGreenPlumage[] = INCBIN_COMP("graphics/pokemon/squawkabilly/green_plumage/overworld.4bpp"); + const u32 gObjectEventPic_SquawkabillyGreenPlumage[] = INCBIN_COMP("graphics/pokemon/squawkabilly/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_SquawkabillyGreenPlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/green_plumage/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_SquawkabillyGreenPlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/green_plumage/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_SquawkabillyGreenPlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_SquawkabillyGreenPlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20348,10 +20364,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ 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"); #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_SquawkabillyBluePlumage[] = INCBIN_COMP("graphics/pokemon/squawkabilly/blue_plumage/overworld.4bpp"); + const u32 gObjectEventPic_SquawkabillyBluePlumage[] = INCBIN_COMP("graphics/pokemon/squawkabilly/blue_plumage/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_SquawkabillyBluePlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/blue_plumage/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_SquawkabillyBluePlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/blue_plumage/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_SquawkabillyBluePlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/blue_plumage/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_SquawkabillyBluePlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/blue_plumage/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20359,10 +20375,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ 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"); #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_SquawkabillyYellowPlumage[] = INCBIN_COMP("graphics/pokemon/squawkabilly/yellow_plumage/overworld.4bpp"); + const u32 gObjectEventPic_SquawkabillyYellowPlumage[] = INCBIN_COMP("graphics/pokemon/squawkabilly/yellow_plumage/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_SquawkabillyYellowPlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/yellow_plumage/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_SquawkabillyYellowPlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/yellow_plumage/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_SquawkabillyYellowPlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/yellow_plumage/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_SquawkabillyYellowPlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/yellow_plumage/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20370,10 +20386,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ 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"); #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_SquawkabillyWhitePlumage[] = INCBIN_COMP("graphics/pokemon/squawkabilly/white_plumage/overworld.4bpp"); + const u32 gObjectEventPic_SquawkabillyWhitePlumage[] = INCBIN_COMP("graphics/pokemon/squawkabilly/white_plumage/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_SquawkabillyWhitePlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/white_plumage/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_SquawkabillyWhitePlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/white_plumage/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_SquawkabillyWhitePlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/white_plumage/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_SquawkabillyWhitePlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/white_plumage/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_SQUAWKABILLY @@ -20388,10 +20404,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Nacli[] = INCBIN_U8("graphics/pokemon/nacli/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Nacli[] = INCBIN_COMP("graphics/pokemon/nacli/overworld.4bpp"); + const u32 gObjectEventPic_Nacli[] = INCBIN_COMP("graphics/pokemon/nacli/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Nacli[] = INCBIN_U32("graphics/pokemon/nacli/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Nacli[] = INCBIN_U32("graphics/pokemon/nacli/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Nacli[] = INCBIN_U32("graphics/pokemon/nacli/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Nacli[] = INCBIN_U32("graphics/pokemon/nacli/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20404,10 +20420,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Naclstack[] = INCBIN_U8("graphics/pokemon/naclstack/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Naclstack[] = INCBIN_COMP("graphics/pokemon/naclstack/overworld.4bpp"); + const u32 gObjectEventPic_Naclstack[] = INCBIN_COMP("graphics/pokemon/naclstack/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Naclstack[] = INCBIN_U32("graphics/pokemon/naclstack/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Naclstack[] = INCBIN_U32("graphics/pokemon/naclstack/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Naclstack[] = INCBIN_U32("graphics/pokemon/naclstack/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Naclstack[] = INCBIN_U32("graphics/pokemon/naclstack/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20420,10 +20436,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Garganacl[] = INCBIN_U8("graphics/pokemon/garganacl/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Garganacl[] = INCBIN_COMP("graphics/pokemon/garganacl/overworld.4bpp"); + const u32 gObjectEventPic_Garganacl[] = INCBIN_COMP("graphics/pokemon/garganacl/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Garganacl[] = INCBIN_U32("graphics/pokemon/garganacl/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Garganacl[] = INCBIN_U32("graphics/pokemon/garganacl/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Garganacl[] = INCBIN_U32("graphics/pokemon/garganacl/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Garganacl[] = INCBIN_U32("graphics/pokemon/garganacl/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_NACLI @@ -20438,10 +20454,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Charcadet[] = INCBIN_U8("graphics/pokemon/charcadet/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Charcadet[] = INCBIN_COMP("graphics/pokemon/charcadet/overworld.4bpp"); + const u32 gObjectEventPic_Charcadet[] = INCBIN_COMP("graphics/pokemon/charcadet/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Charcadet[] = INCBIN_U32("graphics/pokemon/charcadet/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Charcadet[] = INCBIN_U32("graphics/pokemon/charcadet/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Charcadet[] = INCBIN_U32("graphics/pokemon/charcadet/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Charcadet[] = INCBIN_U32("graphics/pokemon/charcadet/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20454,10 +20470,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Armarouge[] = INCBIN_U8("graphics/pokemon/armarouge/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Armarouge[] = INCBIN_COMP("graphics/pokemon/armarouge/overworld.4bpp"); + const u32 gObjectEventPic_Armarouge[] = INCBIN_COMP("graphics/pokemon/armarouge/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Armarouge[] = INCBIN_U32("graphics/pokemon/armarouge/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Armarouge[] = INCBIN_U32("graphics/pokemon/armarouge/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Armarouge[] = INCBIN_U32("graphics/pokemon/armarouge/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Armarouge[] = INCBIN_U32("graphics/pokemon/armarouge/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20470,10 +20486,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Ceruledge[] = INCBIN_U8("graphics/pokemon/ceruledge/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Ceruledge[] = INCBIN_COMP("graphics/pokemon/ceruledge/overworld.4bpp"); + const u32 gObjectEventPic_Ceruledge[] = INCBIN_COMP("graphics/pokemon/ceruledge/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Ceruledge[] = INCBIN_U32("graphics/pokemon/ceruledge/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Ceruledge[] = INCBIN_U32("graphics/pokemon/ceruledge/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Ceruledge[] = INCBIN_U32("graphics/pokemon/ceruledge/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Ceruledge[] = INCBIN_U32("graphics/pokemon/ceruledge/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_CHARCADET @@ -20488,10 +20504,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Tadbulb[] = INCBIN_U8("graphics/pokemon/tadbulb/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Tadbulb[] = INCBIN_COMP("graphics/pokemon/tadbulb/overworld.4bpp"); + const u32 gObjectEventPic_Tadbulb[] = INCBIN_COMP("graphics/pokemon/tadbulb/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Tadbulb[] = INCBIN_U32("graphics/pokemon/tadbulb/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Tadbulb[] = INCBIN_U32("graphics/pokemon/tadbulb/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Tadbulb[] = INCBIN_U32("graphics/pokemon/tadbulb/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Tadbulb[] = INCBIN_U32("graphics/pokemon/tadbulb/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20504,10 +20520,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Bellibolt[] = INCBIN_U8("graphics/pokemon/bellibolt/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Bellibolt[] = INCBIN_COMP("graphics/pokemon/bellibolt/overworld.4bpp"); + const u32 gObjectEventPic_Bellibolt[] = INCBIN_COMP("graphics/pokemon/bellibolt/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Bellibolt[] = INCBIN_U32("graphics/pokemon/bellibolt/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Bellibolt[] = INCBIN_U32("graphics/pokemon/bellibolt/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Bellibolt[] = INCBIN_U32("graphics/pokemon/bellibolt/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Bellibolt[] = INCBIN_U32("graphics/pokemon/bellibolt/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_TADBULB @@ -20522,10 +20538,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Wattrel[] = INCBIN_U8("graphics/pokemon/wattrel/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Wattrel[] = INCBIN_COMP("graphics/pokemon/wattrel/overworld.4bpp"); + const u32 gObjectEventPic_Wattrel[] = INCBIN_COMP("graphics/pokemon/wattrel/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Wattrel[] = INCBIN_U32("graphics/pokemon/wattrel/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Wattrel[] = INCBIN_U32("graphics/pokemon/wattrel/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Wattrel[] = INCBIN_U32("graphics/pokemon/wattrel/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Wattrel[] = INCBIN_U32("graphics/pokemon/wattrel/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20538,10 +20554,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Kilowattrel[] = INCBIN_U8("graphics/pokemon/kilowattrel/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Kilowattrel[] = INCBIN_COMP("graphics/pokemon/kilowattrel/overworld.4bpp"); + const u32 gObjectEventPic_Kilowattrel[] = INCBIN_COMP("graphics/pokemon/kilowattrel/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Kilowattrel[] = INCBIN_U32("graphics/pokemon/kilowattrel/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Kilowattrel[] = INCBIN_U32("graphics/pokemon/kilowattrel/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Kilowattrel[] = INCBIN_U32("graphics/pokemon/kilowattrel/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Kilowattrel[] = INCBIN_U32("graphics/pokemon/kilowattrel/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_WATTREL @@ -20556,10 +20572,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Maschiff[] = INCBIN_U8("graphics/pokemon/maschiff/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Maschiff[] = INCBIN_COMP("graphics/pokemon/maschiff/overworld.4bpp"); + const u32 gObjectEventPic_Maschiff[] = INCBIN_COMP("graphics/pokemon/maschiff/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Maschiff[] = INCBIN_U32("graphics/pokemon/maschiff/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Maschiff[] = INCBIN_U32("graphics/pokemon/maschiff/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Maschiff[] = INCBIN_U32("graphics/pokemon/maschiff/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Maschiff[] = INCBIN_U32("graphics/pokemon/maschiff/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20572,10 +20588,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Mabosstiff[] = INCBIN_U8("graphics/pokemon/mabosstiff/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Mabosstiff[] = INCBIN_COMP("graphics/pokemon/mabosstiff/overworld.4bpp"); + const u32 gObjectEventPic_Mabosstiff[] = INCBIN_COMP("graphics/pokemon/mabosstiff/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Mabosstiff[] = INCBIN_U32("graphics/pokemon/mabosstiff/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Mabosstiff[] = INCBIN_U32("graphics/pokemon/mabosstiff/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Mabosstiff[] = INCBIN_U32("graphics/pokemon/mabosstiff/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Mabosstiff[] = INCBIN_U32("graphics/pokemon/mabosstiff/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_MASCHIFF @@ -20590,10 +20606,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Shroodle[] = INCBIN_U8("graphics/pokemon/shroodle/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Shroodle[] = INCBIN_COMP("graphics/pokemon/shroodle/overworld.4bpp"); + const u32 gObjectEventPic_Shroodle[] = INCBIN_COMP("graphics/pokemon/shroodle/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Shroodle[] = INCBIN_U32("graphics/pokemon/shroodle/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Shroodle[] = INCBIN_U32("graphics/pokemon/shroodle/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Shroodle[] = INCBIN_U32("graphics/pokemon/shroodle/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Shroodle[] = INCBIN_U32("graphics/pokemon/shroodle/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20606,10 +20622,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Grafaiai[] = INCBIN_U8("graphics/pokemon/grafaiai/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Grafaiai[] = INCBIN_COMP("graphics/pokemon/grafaiai/overworld.4bpp"); + const u32 gObjectEventPic_Grafaiai[] = INCBIN_COMP("graphics/pokemon/grafaiai/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Grafaiai[] = INCBIN_U32("graphics/pokemon/grafaiai/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Grafaiai[] = INCBIN_U32("graphics/pokemon/grafaiai/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Grafaiai[] = INCBIN_U32("graphics/pokemon/grafaiai/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Grafaiai[] = INCBIN_U32("graphics/pokemon/grafaiai/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_SHROODLE @@ -20624,10 +20640,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Bramblin[] = INCBIN_U8("graphics/pokemon/bramblin/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Bramblin[] = INCBIN_COMP("graphics/pokemon/bramblin/overworld.4bpp"); + const u32 gObjectEventPic_Bramblin[] = INCBIN_COMP("graphics/pokemon/bramblin/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Bramblin[] = INCBIN_U32("graphics/pokemon/bramblin/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Bramblin[] = INCBIN_U32("graphics/pokemon/bramblin/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Bramblin[] = INCBIN_U32("graphics/pokemon/bramblin/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Bramblin[] = INCBIN_U32("graphics/pokemon/bramblin/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20640,10 +20656,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Brambleghast[] = INCBIN_U8("graphics/pokemon/brambleghast/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Brambleghast[] = INCBIN_COMP("graphics/pokemon/brambleghast/overworld.4bpp"); + const u32 gObjectEventPic_Brambleghast[] = INCBIN_COMP("graphics/pokemon/brambleghast/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Brambleghast[] = INCBIN_U32("graphics/pokemon/brambleghast/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Brambleghast[] = INCBIN_U32("graphics/pokemon/brambleghast/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Brambleghast[] = INCBIN_U32("graphics/pokemon/brambleghast/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Brambleghast[] = INCBIN_U32("graphics/pokemon/brambleghast/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_BRAMBLIN @@ -20658,10 +20674,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Toedscool[] = INCBIN_U8("graphics/pokemon/toedscool/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Toedscool[] = INCBIN_COMP("graphics/pokemon/toedscool/overworld.4bpp"); + const u32 gObjectEventPic_Toedscool[] = INCBIN_COMP("graphics/pokemon/toedscool/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Toedscool[] = INCBIN_U32("graphics/pokemon/toedscool/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Toedscool[] = INCBIN_U32("graphics/pokemon/toedscool/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Toedscool[] = INCBIN_U32("graphics/pokemon/toedscool/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Toedscool[] = INCBIN_U32("graphics/pokemon/toedscool/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20674,10 +20690,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Toedscruel[] = INCBIN_U8("graphics/pokemon/toedscruel/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Toedscruel[] = INCBIN_COMP("graphics/pokemon/toedscruel/overworld.4bpp"); + const u32 gObjectEventPic_Toedscruel[] = INCBIN_COMP("graphics/pokemon/toedscruel/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Toedscruel[] = INCBIN_U32("graphics/pokemon/toedscruel/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Toedscruel[] = INCBIN_U32("graphics/pokemon/toedscruel/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Toedscruel[] = INCBIN_U32("graphics/pokemon/toedscruel/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Toedscruel[] = INCBIN_U32("graphics/pokemon/toedscruel/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_TOEDSCOOL @@ -20692,10 +20708,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Klawf[] = INCBIN_U8("graphics/pokemon/klawf/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Klawf[] = INCBIN_COMP("graphics/pokemon/klawf/overworld.4bpp"); + const u32 gObjectEventPic_Klawf[] = INCBIN_COMP("graphics/pokemon/klawf/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Klawf[] = INCBIN_U32("graphics/pokemon/klawf/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Klawf[] = INCBIN_U32("graphics/pokemon/klawf/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Klawf[] = INCBIN_U32("graphics/pokemon/klawf/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Klawf[] = INCBIN_U32("graphics/pokemon/klawf/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_KLAWF @@ -20710,10 +20726,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Capsakid[] = INCBIN_U8("graphics/pokemon/capsakid/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Capsakid[] = INCBIN_COMP("graphics/pokemon/capsakid/overworld.4bpp"); + const u32 gObjectEventPic_Capsakid[] = INCBIN_COMP("graphics/pokemon/capsakid/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Capsakid[] = INCBIN_U32("graphics/pokemon/capsakid/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Capsakid[] = INCBIN_U32("graphics/pokemon/capsakid/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Capsakid[] = INCBIN_U32("graphics/pokemon/capsakid/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Capsakid[] = INCBIN_U32("graphics/pokemon/capsakid/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20726,10 +20742,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Scovillain[] = INCBIN_U8("graphics/pokemon/scovillain/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Scovillain[] = INCBIN_COMP("graphics/pokemon/scovillain/overworld.4bpp"); + const u32 gObjectEventPic_Scovillain[] = INCBIN_COMP("graphics/pokemon/scovillain/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Scovillain[] = INCBIN_U32("graphics/pokemon/scovillain/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Scovillain[] = INCBIN_U32("graphics/pokemon/scovillain/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Scovillain[] = INCBIN_U32("graphics/pokemon/scovillain/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Scovillain[] = INCBIN_U32("graphics/pokemon/scovillain/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_CAPSAKID @@ -20744,10 +20760,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Rellor[] = INCBIN_U8("graphics/pokemon/rellor/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Rellor[] = INCBIN_COMP("graphics/pokemon/rellor/overworld.4bpp"); + const u32 gObjectEventPic_Rellor[] = INCBIN_COMP("graphics/pokemon/rellor/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Rellor[] = INCBIN_U32("graphics/pokemon/rellor/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Rellor[] = INCBIN_U32("graphics/pokemon/rellor/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Rellor[] = INCBIN_U32("graphics/pokemon/rellor/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Rellor[] = INCBIN_U32("graphics/pokemon/rellor/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20760,10 +20776,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Rabsca[] = INCBIN_U8("graphics/pokemon/rabsca/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Rabsca[] = INCBIN_COMP("graphics/pokemon/rabsca/overworld.4bpp"); + const u32 gObjectEventPic_Rabsca[] = INCBIN_COMP("graphics/pokemon/rabsca/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Rabsca[] = INCBIN_U32("graphics/pokemon/rabsca/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Rabsca[] = INCBIN_U32("graphics/pokemon/rabsca/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Rabsca[] = INCBIN_U32("graphics/pokemon/rabsca/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Rabsca[] = INCBIN_U32("graphics/pokemon/rabsca/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_RELLOR @@ -20778,10 +20794,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Flittle[] = INCBIN_U8("graphics/pokemon/flittle/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Flittle[] = INCBIN_COMP("graphics/pokemon/flittle/overworld.4bpp"); + const u32 gObjectEventPic_Flittle[] = INCBIN_COMP("graphics/pokemon/flittle/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Flittle[] = INCBIN_U32("graphics/pokemon/flittle/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Flittle[] = INCBIN_U32("graphics/pokemon/flittle/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Flittle[] = INCBIN_U32("graphics/pokemon/flittle/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Flittle[] = INCBIN_U32("graphics/pokemon/flittle/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20794,10 +20810,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Espathra[] = INCBIN_U8("graphics/pokemon/espathra/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Espathra[] = INCBIN_COMP("graphics/pokemon/espathra/overworld.4bpp"); + const u32 gObjectEventPic_Espathra[] = INCBIN_COMP("graphics/pokemon/espathra/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Espathra[] = INCBIN_U32("graphics/pokemon/espathra/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Espathra[] = INCBIN_U32("graphics/pokemon/espathra/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Espathra[] = INCBIN_U32("graphics/pokemon/espathra/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Espathra[] = INCBIN_U32("graphics/pokemon/espathra/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_FLITTLE @@ -20812,10 +20828,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Tinkatink[] = INCBIN_U8("graphics/pokemon/tinkatink/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Tinkatink[] = INCBIN_COMP("graphics/pokemon/tinkatink/overworld.4bpp"); + const u32 gObjectEventPic_Tinkatink[] = INCBIN_COMP("graphics/pokemon/tinkatink/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Tinkatink[] = INCBIN_U32("graphics/pokemon/tinkatink/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Tinkatink[] = INCBIN_U32("graphics/pokemon/tinkatink/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Tinkatink[] = INCBIN_U32("graphics/pokemon/tinkatink/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Tinkatink[] = INCBIN_U32("graphics/pokemon/tinkatink/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20828,10 +20844,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Tinkatuff[] = INCBIN_U8("graphics/pokemon/tinkatuff/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Tinkatuff[] = INCBIN_COMP("graphics/pokemon/tinkatuff/overworld.4bpp"); + const u32 gObjectEventPic_Tinkatuff[] = INCBIN_COMP("graphics/pokemon/tinkatuff/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Tinkatuff[] = INCBIN_U32("graphics/pokemon/tinkatuff/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Tinkatuff[] = INCBIN_U32("graphics/pokemon/tinkatuff/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Tinkatuff[] = INCBIN_U32("graphics/pokemon/tinkatuff/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Tinkatuff[] = INCBIN_U32("graphics/pokemon/tinkatuff/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20844,10 +20860,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Tinkaton[] = INCBIN_U8("graphics/pokemon/tinkaton/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Tinkaton[] = INCBIN_COMP("graphics/pokemon/tinkaton/overworld.4bpp"); + const u32 gObjectEventPic_Tinkaton[] = INCBIN_COMP("graphics/pokemon/tinkaton/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Tinkaton[] = INCBIN_U32("graphics/pokemon/tinkaton/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Tinkaton[] = INCBIN_U32("graphics/pokemon/tinkaton/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Tinkaton[] = INCBIN_U32("graphics/pokemon/tinkaton/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Tinkaton[] = INCBIN_U32("graphics/pokemon/tinkaton/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_TINKATINK @@ -20862,10 +20878,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Wiglett[] = INCBIN_U8("graphics/pokemon/wiglett/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Wiglett[] = INCBIN_COMP("graphics/pokemon/wiglett/overworld.4bpp"); + const u32 gObjectEventPic_Wiglett[] = INCBIN_COMP("graphics/pokemon/wiglett/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Wiglett[] = INCBIN_U32("graphics/pokemon/wiglett/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Wiglett[] = INCBIN_U32("graphics/pokemon/wiglett/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Wiglett[] = INCBIN_U32("graphics/pokemon/wiglett/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Wiglett[] = INCBIN_U32("graphics/pokemon/wiglett/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20878,10 +20894,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Wugtrio[] = INCBIN_U8("graphics/pokemon/wugtrio/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Wugtrio[] = INCBIN_COMP("graphics/pokemon/wugtrio/overworld.4bpp"); + const u32 gObjectEventPic_Wugtrio[] = INCBIN_COMP("graphics/pokemon/wugtrio/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Wugtrio[] = INCBIN_U32("graphics/pokemon/wugtrio/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Wugtrio[] = INCBIN_U32("graphics/pokemon/wugtrio/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Wugtrio[] = INCBIN_U32("graphics/pokemon/wugtrio/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Wugtrio[] = INCBIN_U32("graphics/pokemon/wugtrio/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_WIGLETT @@ -20896,10 +20912,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Bombirdier[] = INCBIN_U8("graphics/pokemon/bombirdier/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Bombirdier[] = INCBIN_COMP("graphics/pokemon/bombirdier/overworld.4bpp"); + const u32 gObjectEventPic_Bombirdier[] = INCBIN_COMP("graphics/pokemon/bombirdier/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Bombirdier[] = INCBIN_U32("graphics/pokemon/bombirdier/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Bombirdier[] = INCBIN_U32("graphics/pokemon/bombirdier/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Bombirdier[] = INCBIN_U32("graphics/pokemon/bombirdier/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Bombirdier[] = INCBIN_U32("graphics/pokemon/bombirdier/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_BOMBIRDIER @@ -20914,10 +20930,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Finizen[] = INCBIN_U8("graphics/pokemon/finizen/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Finizen[] = INCBIN_COMP("graphics/pokemon/finizen/overworld.4bpp"); + const u32 gObjectEventPic_Finizen[] = INCBIN_COMP("graphics/pokemon/finizen/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Finizen[] = INCBIN_U32("graphics/pokemon/finizen/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Finizen[] = INCBIN_U32("graphics/pokemon/finizen/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Finizen[] = INCBIN_U32("graphics/pokemon/finizen/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Finizen[] = INCBIN_U32("graphics/pokemon/finizen/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20930,10 +20946,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Palafin[] = INCBIN_U8("graphics/pokemon/palafin/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_PalafinZero[] = INCBIN_COMP("graphics/pokemon/palafin/overworld.4bpp"); + const u32 gObjectEventPic_PalafinZero[] = INCBIN_COMP("graphics/pokemon/palafin/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_PalafinZero[] = INCBIN_U32("graphics/pokemon/palafin/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_PalafinZero[] = INCBIN_U32("graphics/pokemon/palafin/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_PalafinZero[] = INCBIN_U32("graphics/pokemon/palafin/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_PalafinZero[] = INCBIN_U32("graphics/pokemon/palafin/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20943,10 +20959,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ 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"); #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_PalafinHero[] = INCBIN_COMP("graphics/pokemon/palafin/hero/overworld.4bpp"); + const u32 gObjectEventPic_PalafinHero[] = INCBIN_COMP("graphics/pokemon/palafin/hero/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_PalafinHero[] = INCBIN_U32("graphics/pokemon/palafin/hero/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_PalafinHero[] = INCBIN_U32("graphics/pokemon/palafin/hero/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_PalafinHero[] = INCBIN_U32("graphics/pokemon/palafin/hero/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_PalafinHero[] = INCBIN_U32("graphics/pokemon/palafin/hero/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_FINIZEN @@ -20961,10 +20977,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Varoom[] = INCBIN_U8("graphics/pokemon/varoom/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Varoom[] = INCBIN_COMP("graphics/pokemon/varoom/overworld.4bpp"); + const u32 gObjectEventPic_Varoom[] = INCBIN_COMP("graphics/pokemon/varoom/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Varoom[] = INCBIN_U32("graphics/pokemon/varoom/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Varoom[] = INCBIN_U32("graphics/pokemon/varoom/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Varoom[] = INCBIN_U32("graphics/pokemon/varoom/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Varoom[] = INCBIN_U32("graphics/pokemon/varoom/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -20977,10 +20993,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Revavroom[] = INCBIN_U8("graphics/pokemon/revavroom/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Revavroom[] = INCBIN_COMP("graphics/pokemon/revavroom/overworld.4bpp"); + const u32 gObjectEventPic_Revavroom[] = INCBIN_COMP("graphics/pokemon/revavroom/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Revavroom[] = INCBIN_U32("graphics/pokemon/revavroom/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Revavroom[] = INCBIN_U32("graphics/pokemon/revavroom/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Revavroom[] = INCBIN_U32("graphics/pokemon/revavroom/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Revavroom[] = INCBIN_U32("graphics/pokemon/revavroom/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_VAROOM @@ -20995,10 +21011,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Cyclizar[] = INCBIN_U8("graphics/pokemon/cyclizar/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Cyclizar[] = INCBIN_COMP("graphics/pokemon/cyclizar/overworld.4bpp"); + const u32 gObjectEventPic_Cyclizar[] = INCBIN_COMP("graphics/pokemon/cyclizar/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Cyclizar[] = INCBIN_U32("graphics/pokemon/cyclizar/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Cyclizar[] = INCBIN_U32("graphics/pokemon/cyclizar/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Cyclizar[] = INCBIN_U32("graphics/pokemon/cyclizar/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Cyclizar[] = INCBIN_U32("graphics/pokemon/cyclizar/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_CYCLIZAR @@ -21013,10 +21029,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Orthworm[] = INCBIN_U8("graphics/pokemon/orthworm/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Orthworm[] = INCBIN_COMP("graphics/pokemon/orthworm/overworld.4bpp"); + const u32 gObjectEventPic_Orthworm[] = INCBIN_COMP("graphics/pokemon/orthworm/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Orthworm[] = INCBIN_U32("graphics/pokemon/orthworm/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Orthworm[] = INCBIN_U32("graphics/pokemon/orthworm/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Orthworm[] = INCBIN_U32("graphics/pokemon/orthworm/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Orthworm[] = INCBIN_U32("graphics/pokemon/orthworm/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_ORTHWORM @@ -21031,10 +21047,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Glimmet[] = INCBIN_U8("graphics/pokemon/glimmet/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Glimmet[] = INCBIN_COMP("graphics/pokemon/glimmet/overworld.4bpp"); + const u32 gObjectEventPic_Glimmet[] = INCBIN_COMP("graphics/pokemon/glimmet/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Glimmet[] = INCBIN_U32("graphics/pokemon/glimmet/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Glimmet[] = INCBIN_U32("graphics/pokemon/glimmet/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Glimmet[] = INCBIN_U32("graphics/pokemon/glimmet/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Glimmet[] = INCBIN_U32("graphics/pokemon/glimmet/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -21047,10 +21063,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Glimmora[] = INCBIN_U8("graphics/pokemon/glimmora/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Glimmora[] = INCBIN_COMP("graphics/pokemon/glimmora/overworld.4bpp"); + const u32 gObjectEventPic_Glimmora[] = INCBIN_COMP("graphics/pokemon/glimmora/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Glimmora[] = INCBIN_U32("graphics/pokemon/glimmora/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Glimmora[] = INCBIN_U32("graphics/pokemon/glimmora/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Glimmora[] = INCBIN_U32("graphics/pokemon/glimmora/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Glimmora[] = INCBIN_U32("graphics/pokemon/glimmora/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_GLIMMET @@ -21065,10 +21081,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Greavard[] = INCBIN_U8("graphics/pokemon/greavard/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Greavard[] = INCBIN_COMP("graphics/pokemon/greavard/overworld.4bpp"); + const u32 gObjectEventPic_Greavard[] = INCBIN_COMP("graphics/pokemon/greavard/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Greavard[] = INCBIN_U32("graphics/pokemon/greavard/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Greavard[] = INCBIN_U32("graphics/pokemon/greavard/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Greavard[] = INCBIN_U32("graphics/pokemon/greavard/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Greavard[] = INCBIN_U32("graphics/pokemon/greavard/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -21081,10 +21097,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Houndstone[] = INCBIN_U8("graphics/pokemon/houndstone/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Houndstone[] = INCBIN_COMP("graphics/pokemon/houndstone/overworld.4bpp"); + const u32 gObjectEventPic_Houndstone[] = INCBIN_COMP("graphics/pokemon/houndstone/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Houndstone[] = INCBIN_U32("graphics/pokemon/houndstone/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Houndstone[] = INCBIN_U32("graphics/pokemon/houndstone/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Houndstone[] = INCBIN_U32("graphics/pokemon/houndstone/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Houndstone[] = INCBIN_U32("graphics/pokemon/houndstone/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_GREAVARD @@ -21099,10 +21115,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Flamigo[] = INCBIN_U8("graphics/pokemon/flamigo/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Flamigo[] = INCBIN_COMP("graphics/pokemon/flamigo/overworld.4bpp"); + const u32 gObjectEventPic_Flamigo[] = INCBIN_COMP("graphics/pokemon/flamigo/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Flamigo[] = INCBIN_U32("graphics/pokemon/flamigo/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Flamigo[] = INCBIN_U32("graphics/pokemon/flamigo/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Flamigo[] = INCBIN_U32("graphics/pokemon/flamigo/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Flamigo[] = INCBIN_U32("graphics/pokemon/flamigo/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_FLAMIGO @@ -21117,10 +21133,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Cetoddle[] = INCBIN_U8("graphics/pokemon/cetoddle/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Cetoddle[] = INCBIN_COMP("graphics/pokemon/cetoddle/overworld.4bpp"); + const u32 gObjectEventPic_Cetoddle[] = INCBIN_COMP("graphics/pokemon/cetoddle/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Cetoddle[] = INCBIN_U32("graphics/pokemon/cetoddle/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Cetoddle[] = INCBIN_U32("graphics/pokemon/cetoddle/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Cetoddle[] = INCBIN_U32("graphics/pokemon/cetoddle/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Cetoddle[] = INCBIN_U32("graphics/pokemon/cetoddle/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -21133,10 +21149,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Cetitan[] = INCBIN_U8("graphics/pokemon/cetitan/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Cetitan[] = INCBIN_COMP("graphics/pokemon/cetitan/overworld.4bpp"); + const u32 gObjectEventPic_Cetitan[] = INCBIN_COMP("graphics/pokemon/cetitan/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Cetitan[] = INCBIN_U32("graphics/pokemon/cetitan/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Cetitan[] = INCBIN_U32("graphics/pokemon/cetitan/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Cetitan[] = INCBIN_U32("graphics/pokemon/cetitan/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Cetitan[] = INCBIN_U32("graphics/pokemon/cetitan/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_CETODDLE @@ -21151,10 +21167,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Veluza[] = INCBIN_U8("graphics/pokemon/veluza/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Veluza[] = INCBIN_COMP("graphics/pokemon/veluza/overworld.4bpp"); + const u32 gObjectEventPic_Veluza[] = INCBIN_COMP("graphics/pokemon/veluza/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Veluza[] = INCBIN_U32("graphics/pokemon/veluza/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Veluza[] = INCBIN_U32("graphics/pokemon/veluza/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Veluza[] = INCBIN_U32("graphics/pokemon/veluza/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Veluza[] = INCBIN_U32("graphics/pokemon/veluza/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_VELUZA @@ -21169,10 +21185,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Dondozo[] = INCBIN_U8("graphics/pokemon/dondozo/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Dondozo[] = INCBIN_COMP("graphics/pokemon/dondozo/overworld.4bpp"); + const u32 gObjectEventPic_Dondozo[] = INCBIN_COMP("graphics/pokemon/dondozo/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Dondozo[] = INCBIN_U32("graphics/pokemon/dondozo/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Dondozo[] = INCBIN_U32("graphics/pokemon/dondozo/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Dondozo[] = INCBIN_U32("graphics/pokemon/dondozo/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Dondozo[] = INCBIN_U32("graphics/pokemon/dondozo/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_DONDOZO @@ -21187,10 +21203,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Tatsugiri[] = INCBIN_U8("graphics/pokemon/tatsugiri/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_TatsugiriCurly[] = INCBIN_COMP("graphics/pokemon/tatsugiri/curly/overworld.4bpp"); + const u32 gObjectEventPic_TatsugiriCurly[] = INCBIN_COMP("graphics/pokemon/tatsugiri/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_TatsugiriCurly[] = INCBIN_U32("graphics/pokemon/tatsugiri/curly/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_TatsugiriCurly[] = INCBIN_U32("graphics/pokemon/tatsugiri/curly/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_TatsugiriCurly[] = INCBIN_U32("graphics/pokemon/tatsugiri/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_TatsugiriCurly[] = INCBIN_U32("graphics/pokemon/tatsugiri/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -21200,10 +21216,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ 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"); #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_TatsugiriDroopy[] = INCBIN_COMP("graphics/pokemon/tatsugiri/droopy/overworld.4bpp"); + const u32 gObjectEventPic_TatsugiriDroopy[] = INCBIN_COMP("graphics/pokemon/tatsugiri/droopy/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_TatsugiriDroopy[] = INCBIN_U32("graphics/pokemon/tatsugiri/droopy/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_TatsugiriDroopy[] = INCBIN_U32("graphics/pokemon/tatsugiri/droopy/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_TatsugiriDroopy[] = INCBIN_U32("graphics/pokemon/tatsugiri/droopy/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_TatsugiriDroopy[] = INCBIN_U32("graphics/pokemon/tatsugiri/droopy/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -21213,10 +21229,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ 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"); #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_TatsugiriStretchy[] = INCBIN_COMP("graphics/pokemon/tatsugiri/stretchy/overworld.4bpp"); + const u32 gObjectEventPic_TatsugiriStretchy[] = INCBIN_COMP("graphics/pokemon/tatsugiri/stretchy/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_TatsugiriStretchy[] = INCBIN_U32("graphics/pokemon/tatsugiri/stretchy/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_TatsugiriStretchy[] = INCBIN_U32("graphics/pokemon/tatsugiri/stretchy/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_TatsugiriStretchy[] = INCBIN_U32("graphics/pokemon/tatsugiri/stretchy/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_TatsugiriStretchy[] = INCBIN_U32("graphics/pokemon/tatsugiri/stretchy/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_DONDOZO @@ -21231,10 +21247,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_GreatTusk[] = INCBIN_U8("graphics/pokemon/great_tusk/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_GreatTusk[] = INCBIN_COMP("graphics/pokemon/great_tusk/overworld.4bpp"); + const u32 gObjectEventPic_GreatTusk[] = INCBIN_COMP("graphics/pokemon/great_tusk/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_GreatTusk[] = INCBIN_U32("graphics/pokemon/great_tusk/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_GreatTusk[] = INCBIN_U32("graphics/pokemon/great_tusk/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_GreatTusk[] = INCBIN_U32("graphics/pokemon/great_tusk/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_GreatTusk[] = INCBIN_U32("graphics/pokemon/great_tusk/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_GREAT_TUSK @@ -21249,10 +21265,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_ScreamTail[] = INCBIN_U8("graphics/pokemon/scream_tail/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_ScreamTail[] = INCBIN_COMP("graphics/pokemon/scream_tail/overworld.4bpp"); + const u32 gObjectEventPic_ScreamTail[] = INCBIN_COMP("graphics/pokemon/scream_tail/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_ScreamTail[] = INCBIN_U32("graphics/pokemon/scream_tail/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_ScreamTail[] = INCBIN_U32("graphics/pokemon/scream_tail/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_ScreamTail[] = INCBIN_U32("graphics/pokemon/scream_tail/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_ScreamTail[] = INCBIN_U32("graphics/pokemon/scream_tail/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_SCREAM_TAIL @@ -21267,10 +21283,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_BruteBonnet[] = INCBIN_U8("graphics/pokemon/brute_bonnet/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_BruteBonnet[] = INCBIN_COMP("graphics/pokemon/brute_bonnet/overworld.4bpp"); + const u32 gObjectEventPic_BruteBonnet[] = INCBIN_COMP("graphics/pokemon/brute_bonnet/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_BruteBonnet[] = INCBIN_U32("graphics/pokemon/brute_bonnet/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_BruteBonnet[] = INCBIN_U32("graphics/pokemon/brute_bonnet/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_BruteBonnet[] = INCBIN_U32("graphics/pokemon/brute_bonnet/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_BruteBonnet[] = INCBIN_U32("graphics/pokemon/brute_bonnet/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_BRUTE_BONNET @@ -21285,10 +21301,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_FlutterMane[] = INCBIN_U8("graphics/pokemon/flutter_mane/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_FlutterMane[] = INCBIN_COMP("graphics/pokemon/flutter_mane/overworld.4bpp"); + const u32 gObjectEventPic_FlutterMane[] = INCBIN_COMP("graphics/pokemon/flutter_mane/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_FlutterMane[] = INCBIN_U32("graphics/pokemon/flutter_mane/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_FlutterMane[] = INCBIN_U32("graphics/pokemon/flutter_mane/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_FlutterMane[] = INCBIN_U32("graphics/pokemon/flutter_mane/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_FlutterMane[] = INCBIN_U32("graphics/pokemon/flutter_mane/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_FLUTTER_MANE @@ -21303,10 +21319,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_SlitherWing[] = INCBIN_U8("graphics/pokemon/slither_wing/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_SlitherWing[] = INCBIN_COMP("graphics/pokemon/slither_wing/overworld.4bpp"); + const u32 gObjectEventPic_SlitherWing[] = INCBIN_COMP("graphics/pokemon/slither_wing/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_SlitherWing[] = INCBIN_U32("graphics/pokemon/slither_wing/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_SlitherWing[] = INCBIN_U32("graphics/pokemon/slither_wing/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_SlitherWing[] = INCBIN_U32("graphics/pokemon/slither_wing/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_SlitherWing[] = INCBIN_U32("graphics/pokemon/slither_wing/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_SLITHER_WING @@ -21321,10 +21337,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_SandyShocks[] = INCBIN_U8("graphics/pokemon/sandy_shocks/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_SandyShocks[] = INCBIN_COMP("graphics/pokemon/sandy_shocks/overworld.4bpp"); + const u32 gObjectEventPic_SandyShocks[] = INCBIN_COMP("graphics/pokemon/sandy_shocks/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_SandyShocks[] = INCBIN_U32("graphics/pokemon/sandy_shocks/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_SandyShocks[] = INCBIN_U32("graphics/pokemon/sandy_shocks/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_SandyShocks[] = INCBIN_U32("graphics/pokemon/sandy_shocks/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_SandyShocks[] = INCBIN_U32("graphics/pokemon/sandy_shocks/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_SANDY_SHOCKS @@ -21339,10 +21355,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_IronTreads[] = INCBIN_U8("graphics/pokemon/iron_treads/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_IronTreads[] = INCBIN_COMP("graphics/pokemon/iron_treads/overworld.4bpp"); + const u32 gObjectEventPic_IronTreads[] = INCBIN_COMP("graphics/pokemon/iron_treads/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_IronTreads[] = INCBIN_U32("graphics/pokemon/iron_treads/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_IronTreads[] = INCBIN_U32("graphics/pokemon/iron_treads/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_IronTreads[] = INCBIN_U32("graphics/pokemon/iron_treads/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_IronTreads[] = INCBIN_U32("graphics/pokemon/iron_treads/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_IRON_TREADS @@ -21357,10 +21373,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_IronBundle[] = INCBIN_U8("graphics/pokemon/iron_bundle/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_IronBundle[] = INCBIN_COMP("graphics/pokemon/iron_bundle/overworld.4bpp"); + const u32 gObjectEventPic_IronBundle[] = INCBIN_COMP("graphics/pokemon/iron_bundle/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_IronBundle[] = INCBIN_U32("graphics/pokemon/iron_bundle/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_IronBundle[] = INCBIN_U32("graphics/pokemon/iron_bundle/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_IronBundle[] = INCBIN_U32("graphics/pokemon/iron_bundle/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_IronBundle[] = INCBIN_U32("graphics/pokemon/iron_bundle/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_IRON_BUNDLE @@ -21375,10 +21391,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_IronHands[] = INCBIN_U8("graphics/pokemon/iron_hands/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_IronHands[] = INCBIN_COMP("graphics/pokemon/iron_hands/overworld.4bpp"); + const u32 gObjectEventPic_IronHands[] = INCBIN_COMP("graphics/pokemon/iron_hands/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_IronHands[] = INCBIN_U32("graphics/pokemon/iron_hands/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_IronHands[] = INCBIN_U32("graphics/pokemon/iron_hands/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_IronHands[] = INCBIN_U32("graphics/pokemon/iron_hands/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_IronHands[] = INCBIN_U32("graphics/pokemon/iron_hands/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_IRON_HANDS @@ -21393,10 +21409,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_IronJugulis[] = INCBIN_U8("graphics/pokemon/iron_jugulis/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_IronJugulis[] = INCBIN_COMP("graphics/pokemon/iron_jugulis/overworld.4bpp"); + const u32 gObjectEventPic_IronJugulis[] = INCBIN_COMP("graphics/pokemon/iron_jugulis/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_IronJugulis[] = INCBIN_U32("graphics/pokemon/iron_jugulis/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_IronJugulis[] = INCBIN_U32("graphics/pokemon/iron_jugulis/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_IronJugulis[] = INCBIN_U32("graphics/pokemon/iron_jugulis/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_IronJugulis[] = INCBIN_U32("graphics/pokemon/iron_jugulis/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_IRON_JUGULIS @@ -21411,10 +21427,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_IronMoth[] = INCBIN_U8("graphics/pokemon/iron_moth/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_IronMoth[] = INCBIN_COMP("graphics/pokemon/iron_moth/overworld.4bpp"); + const u32 gObjectEventPic_IronMoth[] = INCBIN_COMP("graphics/pokemon/iron_moth/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_IronMoth[] = INCBIN_U32("graphics/pokemon/iron_moth/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_IronMoth[] = INCBIN_U32("graphics/pokemon/iron_moth/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_IronMoth[] = INCBIN_U32("graphics/pokemon/iron_moth/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_IronMoth[] = INCBIN_U32("graphics/pokemon/iron_moth/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_IRON_MOTH @@ -21429,10 +21445,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_IronThorns[] = INCBIN_U8("graphics/pokemon/iron_thorns/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_IronThorns[] = INCBIN_COMP("graphics/pokemon/iron_thorns/overworld.4bpp"); + const u32 gObjectEventPic_IronThorns[] = INCBIN_COMP("graphics/pokemon/iron_thorns/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_IronThorns[] = INCBIN_U32("graphics/pokemon/iron_thorns/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_IronThorns[] = INCBIN_U32("graphics/pokemon/iron_thorns/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_IronThorns[] = INCBIN_U32("graphics/pokemon/iron_thorns/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_IronThorns[] = INCBIN_U32("graphics/pokemon/iron_thorns/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_IRON_THORNS @@ -21447,10 +21463,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Frigibax[] = INCBIN_U8("graphics/pokemon/frigibax/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Frigibax[] = INCBIN_COMP("graphics/pokemon/frigibax/overworld.4bpp"); + const u32 gObjectEventPic_Frigibax[] = INCBIN_COMP("graphics/pokemon/frigibax/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Frigibax[] = INCBIN_U32("graphics/pokemon/frigibax/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Frigibax[] = INCBIN_U32("graphics/pokemon/frigibax/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Frigibax[] = INCBIN_U32("graphics/pokemon/frigibax/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Frigibax[] = INCBIN_U32("graphics/pokemon/frigibax/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -21463,10 +21479,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Arctibax[] = INCBIN_U8("graphics/pokemon/arctibax/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Arctibax[] = INCBIN_COMP("graphics/pokemon/arctibax/overworld.4bpp"); + const u32 gObjectEventPic_Arctibax[] = INCBIN_COMP("graphics/pokemon/arctibax/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Arctibax[] = INCBIN_U32("graphics/pokemon/arctibax/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Arctibax[] = INCBIN_U32("graphics/pokemon/arctibax/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Arctibax[] = INCBIN_U32("graphics/pokemon/arctibax/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Arctibax[] = INCBIN_U32("graphics/pokemon/arctibax/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -21479,10 +21495,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Baxcalibur[] = INCBIN_U8("graphics/pokemon/baxcalibur/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Baxcalibur[] = INCBIN_COMP("graphics/pokemon/baxcalibur/overworld.4bpp"); + const u32 gObjectEventPic_Baxcalibur[] = INCBIN_COMP("graphics/pokemon/baxcalibur/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Baxcalibur[] = INCBIN_U32("graphics/pokemon/baxcalibur/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Baxcalibur[] = INCBIN_U32("graphics/pokemon/baxcalibur/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Baxcalibur[] = INCBIN_U32("graphics/pokemon/baxcalibur/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Baxcalibur[] = INCBIN_U32("graphics/pokemon/baxcalibur/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_FRIGIBAX @@ -21497,10 +21513,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_GimmighoulChest[] = INCBIN_U8("graphics/pokemon/gimmighoul/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_GimmighoulChest[] = INCBIN_COMP("graphics/pokemon/gimmighoul/overworld.4bpp"); + const u32 gObjectEventPic_GimmighoulChest[] = INCBIN_COMP("graphics/pokemon/gimmighoul/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_GimmighoulChest[] = INCBIN_U32("graphics/pokemon/gimmighoul/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_GimmighoulChest[] = INCBIN_U32("graphics/pokemon/gimmighoul/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_GimmighoulChest[] = INCBIN_U32("graphics/pokemon/gimmighoul/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_GimmighoulChest[] = INCBIN_U32("graphics/pokemon/gimmighoul/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -21513,10 +21529,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_GimmighoulRoaming[] = INCBIN_U8("graphics/pokemon/gimmighoul/roaming/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_GimmighoulRoaming[] = INCBIN_COMP("graphics/pokemon/gimmighoul/roaming/overworld.4bpp"); +// const u32 gObjectEventPic_GimmighoulRoaming[] = INCBIN_COMP("graphics/pokemon/gimmighoul/roaming/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_GimmighoulRoaming[] = INCBIN_U32("graphics/pokemon/gimmighoul/roaming/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_GimmighoulRoaming[] = INCBIN_U32("graphics/pokemon/gimmighoul/roaming/overworld_shiny.gbapal.lz"); +// const u32 gOverworldPalette_GimmighoulRoaming[] = INCBIN_U32("graphics/pokemon/gimmighoul/roaming/overworld_normal.gbapal.lz"); +// const u32 gShinyOverworldPalette_GimmighoulRoaming[] = INCBIN_U32("graphics/pokemon/gimmighoul/roaming/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -21529,10 +21545,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Gholdengo[] = INCBIN_U8("graphics/pokemon/gholdengo/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Gholdengo[] = INCBIN_COMP("graphics/pokemon/gholdengo/overworld.4bpp"); + const u32 gObjectEventPic_Gholdengo[] = INCBIN_COMP("graphics/pokemon/gholdengo/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Gholdengo[] = INCBIN_U32("graphics/pokemon/gholdengo/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Gholdengo[] = INCBIN_U32("graphics/pokemon/gholdengo/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Gholdengo[] = INCBIN_U32("graphics/pokemon/gholdengo/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Gholdengo[] = INCBIN_U32("graphics/pokemon/gholdengo/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_GIMMIGHOUL @@ -21547,10 +21563,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_WoChien[] = INCBIN_U8("graphics/pokemon/wo_chien/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_WoChien[] = INCBIN_COMP("graphics/pokemon/wo_chien/overworld.4bpp"); + const u32 gObjectEventPic_WoChien[] = INCBIN_COMP("graphics/pokemon/wo_chien/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_WoChien[] = INCBIN_U32("graphics/pokemon/wo_chien/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_WoChien[] = INCBIN_U32("graphics/pokemon/wo_chien/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_WoChien[] = INCBIN_U32("graphics/pokemon/wo_chien/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_WoChien[] = INCBIN_U32("graphics/pokemon/wo_chien/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_WO_CHIEN @@ -21565,10 +21581,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_ChienPao[] = INCBIN_U8("graphics/pokemon/chien_pao/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_ChienPao[] = INCBIN_COMP("graphics/pokemon/chien_pao/overworld.4bpp"); + const u32 gObjectEventPic_ChienPao[] = INCBIN_COMP("graphics/pokemon/chien_pao/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_ChienPao[] = INCBIN_U32("graphics/pokemon/chien_pao/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_ChienPao[] = INCBIN_U32("graphics/pokemon/chien_pao/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_ChienPao[] = INCBIN_U32("graphics/pokemon/chien_pao/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_ChienPao[] = INCBIN_U32("graphics/pokemon/chien_pao/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_CHIEN_PAO @@ -21583,10 +21599,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_TingLu[] = INCBIN_U8("graphics/pokemon/ting_lu/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_TingLu[] = INCBIN_COMP("graphics/pokemon/ting_lu/overworld.4bpp"); + const u32 gObjectEventPic_TingLu[] = INCBIN_COMP("graphics/pokemon/ting_lu/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_TingLu[] = INCBIN_U32("graphics/pokemon/ting_lu/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_TingLu[] = INCBIN_U32("graphics/pokemon/ting_lu/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_TingLu[] = INCBIN_U32("graphics/pokemon/ting_lu/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_TingLu[] = INCBIN_U32("graphics/pokemon/ting_lu/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_TING_LU @@ -21601,10 +21617,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_ChiYu[] = INCBIN_U8("graphics/pokemon/chi_yu/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_ChiYu[] = INCBIN_COMP("graphics/pokemon/chi_yu/overworld.4bpp"); + const u32 gObjectEventPic_ChiYu[] = INCBIN_COMP("graphics/pokemon/chi_yu/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_ChiYu[] = INCBIN_U32("graphics/pokemon/chi_yu/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_ChiYu[] = INCBIN_U32("graphics/pokemon/chi_yu/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_ChiYu[] = INCBIN_U32("graphics/pokemon/chi_yu/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_ChiYu[] = INCBIN_U32("graphics/pokemon/chi_yu/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_CHI_YU @@ -21619,10 +21635,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_RoaringMoon[] = INCBIN_U8("graphics/pokemon/roaring_moon/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_RoaringMoon[] = INCBIN_COMP("graphics/pokemon/roaring_moon/overworld.4bpp"); + const u32 gObjectEventPic_RoaringMoon[] = INCBIN_COMP("graphics/pokemon/roaring_moon/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_RoaringMoon[] = INCBIN_U32("graphics/pokemon/roaring_moon/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_RoaringMoon[] = INCBIN_U32("graphics/pokemon/roaring_moon/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_RoaringMoon[] = INCBIN_U32("graphics/pokemon/roaring_moon/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_RoaringMoon[] = INCBIN_U32("graphics/pokemon/roaring_moon/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_ROARING_MOON @@ -21637,10 +21653,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_IronValiant[] = INCBIN_U8("graphics/pokemon/iron_valiant/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_IronValiant[] = INCBIN_COMP("graphics/pokemon/iron_valiant/overworld.4bpp"); + const u32 gObjectEventPic_IronValiant[] = INCBIN_COMP("graphics/pokemon/iron_valiant/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_IronValiant[] = INCBIN_U32("graphics/pokemon/iron_valiant/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_IronValiant[] = INCBIN_U32("graphics/pokemon/iron_valiant/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_IronValiant[] = INCBIN_U32("graphics/pokemon/iron_valiant/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_IronValiant[] = INCBIN_U32("graphics/pokemon/iron_valiant/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_IRON_VALIANT @@ -21655,10 +21671,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Koraidon[] = INCBIN_U8("graphics/pokemon/koraidon/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Koraidon[] = INCBIN_COMP("graphics/pokemon/koraidon/overworld.4bpp"); + const u32 gObjectEventPic_Koraidon[] = INCBIN_COMP("graphics/pokemon/koraidon/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Koraidon[] = INCBIN_U32("graphics/pokemon/koraidon/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Koraidon[] = INCBIN_U32("graphics/pokemon/koraidon/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Koraidon[] = INCBIN_U32("graphics/pokemon/koraidon/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Koraidon[] = INCBIN_U32("graphics/pokemon/koraidon/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_KORAIDON @@ -21673,10 +21689,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Miraidon[] = INCBIN_U8("graphics/pokemon/miraidon/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Miraidon[] = INCBIN_COMP("graphics/pokemon/miraidon/overworld.4bpp"); + const u32 gObjectEventPic_Miraidon[] = INCBIN_COMP("graphics/pokemon/miraidon/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Miraidon[] = INCBIN_U32("graphics/pokemon/miraidon/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Miraidon[] = INCBIN_U32("graphics/pokemon/miraidon/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Miraidon[] = INCBIN_U32("graphics/pokemon/miraidon/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Miraidon[] = INCBIN_U32("graphics/pokemon/miraidon/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_MIRAIDON @@ -21691,10 +21707,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_WalkingWake[] = INCBIN_U8("graphics/pokemon/walking_wake/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_WalkingWake[] = INCBIN_COMP("graphics/pokemon/walking_wake/overworld.4bpp"); + const u32 gObjectEventPic_WalkingWake[] = INCBIN_COMP("graphics/pokemon/walking_wake/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_WalkingWake[] = INCBIN_U32("graphics/pokemon/walking_wake/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_WalkingWake[] = INCBIN_U32("graphics/pokemon/walking_wake/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_WalkingWake[] = INCBIN_U32("graphics/pokemon/walking_wake/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_WalkingWake[] = INCBIN_U32("graphics/pokemon/walking_wake/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_WALKING_WAKE @@ -21709,10 +21725,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_IronLeaves[] = INCBIN_U8("graphics/pokemon/iron_leaves/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_IronLeaves[] = INCBIN_COMP("graphics/pokemon/iron_leaves/overworld.4bpp"); + const u32 gObjectEventPic_IronLeaves[] = INCBIN_COMP("graphics/pokemon/iron_leaves/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_IronLeaves[] = INCBIN_U32("graphics/pokemon/iron_leaves/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_IronLeaves[] = INCBIN_U32("graphics/pokemon/iron_leaves/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_IronLeaves[] = INCBIN_U32("graphics/pokemon/iron_leaves/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_IronLeaves[] = INCBIN_U32("graphics/pokemon/iron_leaves/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_IRON_LEAVES @@ -21727,10 +21743,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Poltchageist[] = INCBIN_U8("graphics/pokemon/poltchageist/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Poltchageist[] = INCBIN_COMP("graphics/pokemon/poltchageist/overworld.4bpp"); + const u32 gObjectEventPic_Poltchageist[] = INCBIN_COMP("graphics/pokemon/poltchageist/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Poltchageist[] = INCBIN_U32("graphics/pokemon/poltchageist/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Poltchageist[] = INCBIN_U32("graphics/pokemon/poltchageist/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Poltchageist[] = INCBIN_U32("graphics/pokemon/poltchageist/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Poltchageist[] = INCBIN_U32("graphics/pokemon/poltchageist/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -21743,10 +21759,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Sinistcha[] = INCBIN_U8("graphics/pokemon/sinistcha/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Sinistcha[] = INCBIN_COMP("graphics/pokemon/sinistcha/overworld.4bpp"); + const u32 gObjectEventPic_Sinistcha[] = INCBIN_COMP("graphics/pokemon/sinistcha/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Sinistcha[] = INCBIN_U32("graphics/pokemon/sinistcha/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Sinistcha[] = INCBIN_U32("graphics/pokemon/sinistcha/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Sinistcha[] = INCBIN_U32("graphics/pokemon/sinistcha/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Sinistcha[] = INCBIN_U32("graphics/pokemon/sinistcha/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_POLTCHAGEIST @@ -21761,10 +21777,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Okidogi[] = INCBIN_U8("graphics/pokemon/okidogi/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Okidogi[] = INCBIN_COMP("graphics/pokemon/okidogi/overworld.4bpp"); + const u32 gObjectEventPic_Okidogi[] = INCBIN_COMP("graphics/pokemon/okidogi/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Okidogi[] = INCBIN_U32("graphics/pokemon/okidogi/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Okidogi[] = INCBIN_U32("graphics/pokemon/okidogi/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Okidogi[] = INCBIN_U32("graphics/pokemon/okidogi/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Okidogi[] = INCBIN_U32("graphics/pokemon/okidogi/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_OKIDOGI @@ -21779,10 +21795,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Munkidori[] = INCBIN_U8("graphics/pokemon/munkidori/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Munkidori[] = INCBIN_COMP("graphics/pokemon/munkidori/overworld.4bpp"); + const u32 gObjectEventPic_Munkidori[] = INCBIN_COMP("graphics/pokemon/munkidori/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Munkidori[] = INCBIN_U32("graphics/pokemon/munkidori/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Munkidori[] = INCBIN_U32("graphics/pokemon/munkidori/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Munkidori[] = INCBIN_U32("graphics/pokemon/munkidori/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Munkidori[] = INCBIN_U32("graphics/pokemon/munkidori/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_MUNKIDORI @@ -21797,10 +21813,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Fezandipiti[] = INCBIN_U8("graphics/pokemon/fezandipiti/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Fezandipiti[] = INCBIN_COMP("graphics/pokemon/fezandipiti/overworld.4bpp"); + const u32 gObjectEventPic_Fezandipiti[] = INCBIN_COMP("graphics/pokemon/fezandipiti/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Fezandipiti[] = INCBIN_U32("graphics/pokemon/fezandipiti/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Fezandipiti[] = INCBIN_U32("graphics/pokemon/fezandipiti/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Fezandipiti[] = INCBIN_U32("graphics/pokemon/fezandipiti/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Fezandipiti[] = INCBIN_U32("graphics/pokemon/fezandipiti/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_FEZANDIPITI @@ -21854,10 +21870,31 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u32 gMonShinyPalette_OgerponCornerstoneMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/tera/shiny.gbapal.lz"); #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_OgerponTealMask[] = INCBIN_COMP("graphics/pokemon/ogerpon/overworld.4bpp"); - // const u32 gObjectEventPic_OgerponWellspringMask[] = INCBIN_COMP("graphics/pokemon/ogerpon/wellspring/overworld.4bpp"); - // const u32 gObjectEventPic_OgerponHearthflameMask[] = INCBIN_COMP("graphics/pokemon/ogerpon/hearthflame/overworld.4bpp"); - // const u32 gObjectEventPic_OgerponCornerstoneMask[] = INCBIN_COMP("graphics/pokemon/ogerpon/cornerstone/overworld.4bpp"); + const u32 gObjectEventPic_OgerponTealMask[] = INCBIN_COMP("graphics/pokemon/ogerpon/overworld.4bpp"); + const u32 gObjectEventPic_OgerponWellspringMask[] = INCBIN_COMP("graphics/pokemon/ogerpon/wellspring/overworld.4bpp"); + const u32 gObjectEventPic_OgerponHearthflameMask[] = INCBIN_COMP("graphics/pokemon/ogerpon/hearthflame/overworld.4bpp"); + const u32 gObjectEventPic_OgerponCornerstoneMask[] = INCBIN_COMP("graphics/pokemon/ogerpon/cornerstone/overworld.4bpp"); + const u32 gOverworldPalette_OgerponWellspringMask[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_OgerponWellspringMask[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_OgerponHearthflameMask[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_OgerponHearthflameMask[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_OgerponCornerstoneMask[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_OgerponCornerstoneMask[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_OgerponTealMask[] = INCBIN_U32("graphics/pokemon/ogerpon/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_OgerponTealMask[] = INCBIN_U32("graphics/pokemon/ogerpon/overworld_shiny.gbapal.lz"); + + const u32 gObjectEventPic_OgerponTealMaskTeraTera[] = INCBIN_COMP("graphics/pokemon/ogerpon/overworld.4bpp"); + const u32 gObjectEventPic_OgerponWellspringMaskTera[] = INCBIN_COMP("graphics/pokemon/ogerpon/wellspring/overworld.4bpp"); + const u32 gObjectEventPic_OgerponHearthflameMaskTera[] = INCBIN_COMP("graphics/pokemon/ogerpon/hearthflame/overworld.4bpp"); + const u32 gObjectEventPic_OgerponCornerstoneMaskTera[] = INCBIN_COMP("graphics/pokemon/ogerpon/cornerstone/overworld.4bpp"); + const u32 gOverworldPalette_OgerponWellspringMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_OgerponWellspringMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_OgerponHearthflameMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_OgerponHearthflameMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_OgerponCornerstoneMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_OgerponCornerstoneMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_OgerponTealMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_OgerponTealMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/overworld_shiny.gbapal.lz"); #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_OGERPON @@ -21871,10 +21908,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_GougingFire[] = INCBIN_U8("graphics/pokemon/gouging_fire/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_GougingFire[] = INCBIN_COMP("graphics/pokemon/gouging_fire/overworld.4bpp"); + const u32 gObjectEventPic_GougingFire[] = INCBIN_COMP("graphics/pokemon/gouging_fire/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_GougingFire[] = INCBIN_U32("graphics/pokemon/gouging_fire/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_GougingFire[] = INCBIN_U32("graphics/pokemon/gouging_fire/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_GougingFire[] = INCBIN_U32("graphics/pokemon/gouging_fire/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_GougingFire[] = INCBIN_U32("graphics/pokemon/gouging_fire/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_GOUGING_FIRE @@ -21889,10 +21926,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_RagingBolt[] = INCBIN_U8("graphics/pokemon/raging_bolt/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_RagingBolt[] = INCBIN_COMP("graphics/pokemon/raging_bolt/overworld.4bpp"); + const u32 gObjectEventPic_RagingBolt[] = INCBIN_COMP("graphics/pokemon/raging_bolt/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_RagingBolt[] = INCBIN_U32("graphics/pokemon/raging_bolt/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_RagingBolt[] = INCBIN_U32("graphics/pokemon/raging_bolt/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_RagingBolt[] = INCBIN_U32("graphics/pokemon/raging_bolt/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_RagingBolt[] = INCBIN_U32("graphics/pokemon/raging_bolt/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_RAGING_BOLT @@ -21907,10 +21944,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_IronBoulder[] = INCBIN_U8("graphics/pokemon/iron_boulder/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_IronBoulder[] = INCBIN_COMP("graphics/pokemon/iron_boulder/overworld.4bpp"); + const u32 gObjectEventPic_IronBoulder[] = INCBIN_COMP("graphics/pokemon/iron_boulder/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_IronBoulder[] = INCBIN_U32("graphics/pokemon/iron_boulder/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_IronBoulder[] = INCBIN_U32("graphics/pokemon/iron_boulder/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_IronBoulder[] = INCBIN_U32("graphics/pokemon/iron_boulder/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_IronBoulder[] = INCBIN_U32("graphics/pokemon/iron_boulder/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_IRON_BOULDER @@ -21925,10 +21962,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_IronCrown[] = INCBIN_U8("graphics/pokemon/iron_crown/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_IronCrown[] = INCBIN_COMP("graphics/pokemon/iron_crown/overworld.4bpp"); + const u32 gObjectEventPic_IronCrown[] = INCBIN_COMP("graphics/pokemon/iron_crown/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_IronCrown[] = INCBIN_U32("graphics/pokemon/iron_crown/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_IronCrown[] = INCBIN_U32("graphics/pokemon/iron_crown/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_IronCrown[] = INCBIN_U32("graphics/pokemon/iron_crown/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_IronCrown[] = INCBIN_U32("graphics/pokemon/iron_crown/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_IRON_CROWN @@ -21943,10 +21980,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_TerapagosNormal[] = INCBIN_U8("graphics/pokemon/terapagos/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_TerapagosNormal[] = INCBIN_COMP("graphics/pokemon/terapagos/overworld.4bpp"); + const u32 gObjectEventPic_TerapagosNormal[] = INCBIN_COMP("graphics/pokemon/terapagos/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_TerapagosNormal[] = INCBIN_U32("graphics/pokemon/terapagos/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -21959,10 +21996,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_TerapagosTerastal[] = INCBIN_U8("graphics/pokemon/terapagos/terastal/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_TerapagosTerastal[] = INCBIN_COMP("graphics/pokemon/terapagos/terastal/overworld.4bpp"); + const u32 gObjectEventPic_TerapagosTerastal[] = INCBIN_COMP("graphics/pokemon/terapagos/terastal/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS @@ -21975,10 +22012,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_TerapagosStellar[] = INCBIN_U8("graphics/pokemon/terapagos/stellar/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_TerapagosStellar[] = INCBIN_COMP("graphics/pokemon/terapagos/stellar/overworld.4bpp"); +// const u32 gObjectEventPic_TerapagosStellar[] = INCBIN_COMP("graphics/pokemon/terapagos/stellar/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/overworld_shiny.gbapal.lz"); +// const u32 gOverworldPalette_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/overworld_normal.gbapal.lz"); +// const u32 gShinyOverworldPalette_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_TERAPAGOS @@ -21993,10 +22030,10 @@ const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_ const u8 gMonFootprint_Pecharunt[] = INCBIN_U8("graphics/pokemon/pecharunt/footprint.1bpp"); #endif //P_FOOTPRINTS #if OW_POKEMON_OBJECT_EVENTS - // const u32 gObjectEventPic_Pecharunt[] = INCBIN_COMP("graphics/pokemon/pecharunt/overworld.4bpp"); + const u32 gObjectEventPic_Pecharunt[] = INCBIN_COMP("graphics/pokemon/pecharunt/overworld.4bpp"); #if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE - // const u32 gOverworldPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/overworld_normal.gbapal.lz"); - // const u32 gShinyOverworldPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/overworld_shiny.gbapal.lz"); + const u32 gOverworldPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/overworld_normal.gbapal.lz"); + const u32 gShinyOverworldPalette_Pecharunt[] = INCBIN_U32("graphics/pokemon/pecharunt/overworld_shiny.gbapal.lz"); #endif //OW_PKMN_OBJECTS_SHARE_PALETTES #endif //OW_POKEMON_OBJECT_EVENTS #endif //P_FAMILY_PECHARUNT diff --git a/src/data/graphics/trainers.h b/src/data/graphics/trainers.h index 2a7baf1bc8..613e5fcb14 100644 --- a/src/data/graphics/trainers.h +++ b/src/data/graphics/trainers.h @@ -297,110 +297,110 @@ const u32 gTrainerBackPicPalette_Leaf[] = INCBIN_U32("graphics/trainers/back_pic // gTrainerFrontPic/gTrainerPalette pointers, (e.g "gTrainerFrontPic_Hiker" and "gTrainerPalette_Hiker"). // The last three parameters control the X and Y coordinates and rotation of the mugshot on the screen. // They default to 0, 0, and 0x200 which are default values used by the majority of the game's trainer sprites. -#define TRAINER_SPRITE(trainerPic, file, ...) \ - [TRAINER_PIC_##trainerPic] = \ - { \ - .frontPic = {gTrainerFrontPic_##file, TRAINER_PIC_SIZE, TRAINER_PIC_##trainerPic},\ - .palette = {gTrainerPalette_##file, TRAINER_PIC_##trainerPic}, \ - .mugshotCoords = {DEFAULT(0, __VA_ARGS__), DEFAULT_2(0, __VA_ARGS__)}, \ - .mugshotRotation = DEFAULT_3(0x200, __VA_ARGS__), \ +#define TRAINER_SPRITE(trainerPic, picFile, paletteFile, ...) \ + [trainerPic] = \ + { \ + .frontPic = {picFile, TRAINER_PIC_SIZE, trainerPic}, \ + .palette = {paletteFile, trainerPic}, \ + .mugshotCoords = {DEFAULT(0, __VA_ARGS__), DEFAULT_2(0, __VA_ARGS__)}, \ + .mugshotRotation = DEFAULT_3(0x200, __VA_ARGS__), \ } const struct TrainerSprite gTrainerSprites[] = { - TRAINER_SPRITE(HIKER, Hiker), - TRAINER_SPRITE(AQUA_GRUNT_M, AquaGruntM), - TRAINER_SPRITE(POKEMON_BREEDER_F, PokemonBreederF), - TRAINER_SPRITE(COOLTRAINER_M, CoolTrainerM), - TRAINER_SPRITE(BIRD_KEEPER, BirdKeeper), - TRAINER_SPRITE(COLLECTOR, Collector), - TRAINER_SPRITE(AQUA_GRUNT_F, AquaGruntF), - TRAINER_SPRITE(SWIMMER_M, SwimmerM), - TRAINER_SPRITE(MAGMA_GRUNT_M, MagmaGruntM), - TRAINER_SPRITE(EXPERT_M, ExpertM), - TRAINER_SPRITE(AQUA_ADMIN_M, AquaAdminM), - TRAINER_SPRITE(BLACK_BELT, BlackBelt), - TRAINER_SPRITE(AQUA_ADMIN_F, AquaAdminF), - TRAINER_SPRITE(AQUA_LEADER_ARCHIE, AquaLeaderArchie), - TRAINER_SPRITE(HEX_MANIAC, HexManiac), - TRAINER_SPRITE(AROMA_LADY, AromaLady), - TRAINER_SPRITE(RUIN_MANIAC, RuinManiac), - TRAINER_SPRITE(INTERVIEWER, Interviewer), - TRAINER_SPRITE(TUBER_F, TuberF), - TRAINER_SPRITE(TUBER_M, TuberM), - TRAINER_SPRITE(COOLTRAINER_F, CoolTrainerF), - TRAINER_SPRITE(LADY, Lady), - TRAINER_SPRITE(BEAUTY, Beauty), - TRAINER_SPRITE(RICH_BOY, RichBoy), - TRAINER_SPRITE(EXPERT_F, ExpertF), - TRAINER_SPRITE(POKEMANIAC, Pokemaniac), - TRAINER_SPRITE(MAGMA_GRUNT_F, MagmaGruntF), - TRAINER_SPRITE(GUITARIST, Guitarist), - TRAINER_SPRITE(KINDLER, Kindler), - TRAINER_SPRITE(CAMPER, Camper), - TRAINER_SPRITE(PICNICKER, Picnicker), - TRAINER_SPRITE(BUG_MANIAC, BugManiac), - TRAINER_SPRITE(POKEMON_BREEDER_M, PokemonBreederM), - TRAINER_SPRITE(PSYCHIC_M, PsychicM), - TRAINER_SPRITE(PSYCHIC_F, PsychicF), - TRAINER_SPRITE(GENTLEMAN, Gentleman), - TRAINER_SPRITE(ELITE_FOUR_SIDNEY, EliteFourSidney), - TRAINER_SPRITE(ELITE_FOUR_PHOEBE, EliteFourPhoebe), - TRAINER_SPRITE(ELITE_FOUR_GLACIA, EliteFourGlacia, -4, 4, 0x1B0), - TRAINER_SPRITE(ELITE_FOUR_DRAKE, EliteFourDrake, 0, 5, 0x1A0), - TRAINER_SPRITE(LEADER_ROXANNE, LeaderRoxanne), - TRAINER_SPRITE(LEADER_BRAWLY, LeaderBrawly), - TRAINER_SPRITE(LEADER_WATTSON, LeaderWattson), - TRAINER_SPRITE(LEADER_FLANNERY, LeaderFlannery), - TRAINER_SPRITE(LEADER_NORMAN, LeaderNorman), - TRAINER_SPRITE(LEADER_WINONA, LeaderWinona), - TRAINER_SPRITE(LEADER_TATE_AND_LIZA, LeaderTateAndLiza), - TRAINER_SPRITE(LEADER_JUAN, LeaderJuan), - TRAINER_SPRITE(SCHOOL_KID_M, SchoolKidM), - TRAINER_SPRITE(SCHOOL_KID_F, SchoolKidF), - TRAINER_SPRITE(SR_AND_JR, SrAndJr), - TRAINER_SPRITE(POKEFAN_M, PokefanM), - TRAINER_SPRITE(POKEFAN_F, PokefanF), - TRAINER_SPRITE(YOUNGSTER, Youngster), - TRAINER_SPRITE(CHAMPION_WALLACE, ChampionWallace, -8, 7, 0x188), - TRAINER_SPRITE(FISHERMAN, Fisherman), - TRAINER_SPRITE(CYCLING_TRIATHLETE_M, CyclingTriathleteM), - TRAINER_SPRITE(CYCLING_TRIATHLETE_F, CyclingTriathleteF), - TRAINER_SPRITE(RUNNING_TRIATHLETE_M, RunningTriathleteM), - TRAINER_SPRITE(RUNNING_TRIATHLETE_F, RunningTriathleteF), - TRAINER_SPRITE(SWIMMING_TRIATHLETE_M, SwimmingTriathleteM), - TRAINER_SPRITE(SWIMMING_TRIATHLETE_F, SwimmingTriathleteF), - TRAINER_SPRITE(DRAGON_TAMER, DragonTamer), - TRAINER_SPRITE(NINJA_BOY, NinjaBoy), - TRAINER_SPRITE(BATTLE_GIRL, BattleGirl), - TRAINER_SPRITE(PARASOL_LADY, ParasolLady), - TRAINER_SPRITE(SWIMMER_F, SwimmerF), - TRAINER_SPRITE(TWINS, Twins), - TRAINER_SPRITE(SAILOR, Sailor), - TRAINER_SPRITE(MAGMA_ADMIN, MagmaAdmin), - TRAINER_SPRITE(WALLY, Wally), - TRAINER_SPRITE(BRENDAN, Brendan), - TRAINER_SPRITE(MAY, May), - TRAINER_SPRITE(BUG_CATCHER, BugCatcher), - TRAINER_SPRITE(POKEMON_RANGER_M, PokemonRangerM), - TRAINER_SPRITE(POKEMON_RANGER_F, PokemonRangerF), - TRAINER_SPRITE(MAGMA_LEADER_MAXIE, MagmaLeaderMaxie), - TRAINER_SPRITE(LASS, Lass), - TRAINER_SPRITE(YOUNG_COUPLE, YoungCouple), - TRAINER_SPRITE(OLD_COUPLE, OldCouple), - TRAINER_SPRITE(SIS_AND_BRO, SisAndBro), - TRAINER_SPRITE(STEVEN, Steven, 0, 7, 0x188), - TRAINER_SPRITE(SALON_MAIDEN_ANABEL, SalonMaidenAnabel), - TRAINER_SPRITE(DOME_ACE_TUCKER, DomeAceTucker), - TRAINER_SPRITE(PALACE_MAVEN_SPENSER, PalaceMavenSpenser), - TRAINER_SPRITE(ARENA_TYCOON_GRETA, ArenaTycoonGreta), - TRAINER_SPRITE(FACTORY_HEAD_NOLAND, FactoryHeadNoland), - TRAINER_SPRITE(PIKE_QUEEN_LUCY, PikeQueenLucy), - TRAINER_SPRITE(PYRAMID_KING_BRANDON, PyramidKingBrandon), - TRAINER_SPRITE(RED, Red), - TRAINER_SPRITE(LEAF, Leaf), - TRAINER_SPRITE(RS_BRENDAN, RubySapphireBrendan), - TRAINER_SPRITE(RS_MAY, RubySapphireMay), + TRAINER_SPRITE(TRAINER_PIC_HIKER, gTrainerFrontPic_Hiker, gTrainerPalette_Hiker), + TRAINER_SPRITE(TRAINER_PIC_AQUA_GRUNT_M, gTrainerFrontPic_AquaGruntM, gTrainerPalette_AquaGruntM), + TRAINER_SPRITE(TRAINER_PIC_POKEMON_BREEDER_F, gTrainerFrontPic_PokemonBreederF, gTrainerPalette_PokemonBreederF), + TRAINER_SPRITE(TRAINER_PIC_COOLTRAINER_M, gTrainerFrontPic_CoolTrainerM, gTrainerPalette_CoolTrainerM), + TRAINER_SPRITE(TRAINER_PIC_BIRD_KEEPER, gTrainerFrontPic_BirdKeeper, gTrainerPalette_BirdKeeper), + TRAINER_SPRITE(TRAINER_PIC_COLLECTOR, gTrainerFrontPic_Collector, gTrainerPalette_Collector), + TRAINER_SPRITE(TRAINER_PIC_AQUA_GRUNT_F, gTrainerFrontPic_AquaGruntF, gTrainerPalette_AquaGruntF), + TRAINER_SPRITE(TRAINER_PIC_SWIMMER_M, gTrainerFrontPic_SwimmerM, gTrainerPalette_SwimmerM), + TRAINER_SPRITE(TRAINER_PIC_MAGMA_GRUNT_M, gTrainerFrontPic_MagmaGruntM, gTrainerPalette_MagmaGruntM), + TRAINER_SPRITE(TRAINER_PIC_EXPERT_M, gTrainerFrontPic_ExpertM, gTrainerPalette_ExpertM), + TRAINER_SPRITE(TRAINER_PIC_AQUA_ADMIN_M, gTrainerFrontPic_AquaAdminM, gTrainerPalette_AquaAdminM), + TRAINER_SPRITE(TRAINER_PIC_BLACK_BELT, gTrainerFrontPic_BlackBelt, gTrainerPalette_BlackBelt), + TRAINER_SPRITE(TRAINER_PIC_AQUA_ADMIN_F, gTrainerFrontPic_AquaAdminF, gTrainerPalette_AquaAdminF), + TRAINER_SPRITE(TRAINER_PIC_AQUA_LEADER_ARCHIE, gTrainerFrontPic_AquaLeaderArchie, gTrainerPalette_AquaLeaderArchie), + TRAINER_SPRITE(TRAINER_PIC_HEX_MANIAC, gTrainerFrontPic_HexManiac, gTrainerPalette_HexManiac), + TRAINER_SPRITE(TRAINER_PIC_AROMA_LADY, gTrainerFrontPic_AromaLady, gTrainerPalette_AromaLady), + TRAINER_SPRITE(TRAINER_PIC_RUIN_MANIAC, gTrainerFrontPic_RuinManiac, gTrainerPalette_RuinManiac), + TRAINER_SPRITE(TRAINER_PIC_INTERVIEWER, gTrainerFrontPic_Interviewer, gTrainerPalette_Interviewer), + TRAINER_SPRITE(TRAINER_PIC_TUBER_F, gTrainerFrontPic_TuberF, gTrainerPalette_TuberF), + TRAINER_SPRITE(TRAINER_PIC_TUBER_M, gTrainerFrontPic_TuberM, gTrainerPalette_TuberM), + TRAINER_SPRITE(TRAINER_PIC_COOLTRAINER_F, gTrainerFrontPic_CoolTrainerF, gTrainerPalette_CoolTrainerF), + TRAINER_SPRITE(TRAINER_PIC_LADY, gTrainerFrontPic_Lady, gTrainerPalette_Lady), + TRAINER_SPRITE(TRAINER_PIC_BEAUTY, gTrainerFrontPic_Beauty, gTrainerPalette_Beauty), + TRAINER_SPRITE(TRAINER_PIC_RICH_BOY, gTrainerFrontPic_RichBoy, gTrainerPalette_RichBoy), + TRAINER_SPRITE(TRAINER_PIC_EXPERT_F, gTrainerFrontPic_ExpertF, gTrainerPalette_ExpertF), + TRAINER_SPRITE(TRAINER_PIC_POKEMANIAC, gTrainerFrontPic_Pokemaniac, gTrainerPalette_Pokemaniac), + TRAINER_SPRITE(TRAINER_PIC_MAGMA_GRUNT_F, gTrainerFrontPic_MagmaGruntF, gTrainerPalette_MagmaGruntF), + TRAINER_SPRITE(TRAINER_PIC_GUITARIST, gTrainerFrontPic_Guitarist, gTrainerPalette_Guitarist), + TRAINER_SPRITE(TRAINER_PIC_KINDLER, gTrainerFrontPic_Kindler, gTrainerPalette_Kindler), + TRAINER_SPRITE(TRAINER_PIC_CAMPER, gTrainerFrontPic_Camper, gTrainerPalette_Camper), + TRAINER_SPRITE(TRAINER_PIC_PICNICKER, gTrainerFrontPic_Picnicker, gTrainerPalette_Picnicker), + TRAINER_SPRITE(TRAINER_PIC_BUG_MANIAC, gTrainerFrontPic_BugManiac, gTrainerPalette_BugManiac), + TRAINER_SPRITE(TRAINER_PIC_POKEMON_BREEDER_M, gTrainerFrontPic_PokemonBreederM, gTrainerPalette_PokemonBreederM), + TRAINER_SPRITE(TRAINER_PIC_PSYCHIC_M, gTrainerFrontPic_PsychicM, gTrainerPalette_PsychicM), + TRAINER_SPRITE(TRAINER_PIC_PSYCHIC_F, gTrainerFrontPic_PsychicF, gTrainerPalette_PsychicF), + TRAINER_SPRITE(TRAINER_PIC_GENTLEMAN, gTrainerFrontPic_Gentleman, gTrainerPalette_Gentleman), + TRAINER_SPRITE(TRAINER_PIC_ELITE_FOUR_SIDNEY, gTrainerFrontPic_EliteFourSidney, gTrainerPalette_EliteFourSidney), + TRAINER_SPRITE(TRAINER_PIC_ELITE_FOUR_PHOEBE, gTrainerFrontPic_EliteFourPhoebe, gTrainerPalette_EliteFourPhoebe), + TRAINER_SPRITE(TRAINER_PIC_ELITE_FOUR_GLACIA, gTrainerFrontPic_EliteFourGlacia, gTrainerPalette_EliteFourGlacia, -4, 4, 0x1B0), + TRAINER_SPRITE(TRAINER_PIC_ELITE_FOUR_DRAKE, gTrainerFrontPic_EliteFourDrake, gTrainerPalette_EliteFourDrake, 0, 5, 0x1A0), + TRAINER_SPRITE(TRAINER_PIC_LEADER_ROXANNE, gTrainerFrontPic_LeaderRoxanne, gTrainerPalette_LeaderRoxanne), + TRAINER_SPRITE(TRAINER_PIC_LEADER_BRAWLY, gTrainerFrontPic_LeaderBrawly, gTrainerPalette_LeaderBrawly), + TRAINER_SPRITE(TRAINER_PIC_LEADER_WATTSON, gTrainerFrontPic_LeaderWattson, gTrainerPalette_LeaderWattson), + TRAINER_SPRITE(TRAINER_PIC_LEADER_FLANNERY, gTrainerFrontPic_LeaderFlannery, gTrainerPalette_LeaderFlannery), + TRAINER_SPRITE(TRAINER_PIC_LEADER_NORMAN, gTrainerFrontPic_LeaderNorman, gTrainerPalette_LeaderNorman), + TRAINER_SPRITE(TRAINER_PIC_LEADER_WINONA, gTrainerFrontPic_LeaderWinona, gTrainerPalette_LeaderWinona), + TRAINER_SPRITE(TRAINER_PIC_LEADER_TATE_AND_LIZA, gTrainerFrontPic_LeaderTateAndLiza, gTrainerPalette_LeaderTateAndLiza), + TRAINER_SPRITE(TRAINER_PIC_LEADER_JUAN, gTrainerFrontPic_LeaderJuan, gTrainerPalette_LeaderJuan), + TRAINER_SPRITE(TRAINER_PIC_SCHOOL_KID_M, gTrainerFrontPic_SchoolKidM, gTrainerPalette_SchoolKidM), + TRAINER_SPRITE(TRAINER_PIC_SCHOOL_KID_F, gTrainerFrontPic_SchoolKidF, gTrainerPalette_SchoolKidF), + TRAINER_SPRITE(TRAINER_PIC_SR_AND_JR, gTrainerFrontPic_SrAndJr, gTrainerPalette_SrAndJr), + TRAINER_SPRITE(TRAINER_PIC_POKEFAN_M, gTrainerFrontPic_PokefanM, gTrainerPalette_PokefanM), + TRAINER_SPRITE(TRAINER_PIC_POKEFAN_F, gTrainerFrontPic_PokefanF, gTrainerPalette_PokefanF), + TRAINER_SPRITE(TRAINER_PIC_YOUNGSTER, gTrainerFrontPic_Youngster, gTrainerPalette_Youngster), + TRAINER_SPRITE(TRAINER_PIC_CHAMPION_WALLACE, gTrainerFrontPic_ChampionWallace, gTrainerPalette_ChampionWallace, -8, 7, 0x188), + TRAINER_SPRITE(TRAINER_PIC_FISHERMAN, gTrainerFrontPic_Fisherman, gTrainerPalette_Fisherman), + TRAINER_SPRITE(TRAINER_PIC_CYCLING_TRIATHLETE_M, gTrainerFrontPic_CyclingTriathleteM, gTrainerPalette_CyclingTriathleteM), + TRAINER_SPRITE(TRAINER_PIC_CYCLING_TRIATHLETE_F, gTrainerFrontPic_CyclingTriathleteF, gTrainerPalette_CyclingTriathleteF), + TRAINER_SPRITE(TRAINER_PIC_RUNNING_TRIATHLETE_M, gTrainerFrontPic_RunningTriathleteM, gTrainerPalette_RunningTriathleteM), + TRAINER_SPRITE(TRAINER_PIC_RUNNING_TRIATHLETE_F, gTrainerFrontPic_RunningTriathleteF, gTrainerPalette_RunningTriathleteF), + TRAINER_SPRITE(TRAINER_PIC_SWIMMING_TRIATHLETE_M, gTrainerFrontPic_SwimmingTriathleteM, gTrainerPalette_SwimmingTriathleteM), + TRAINER_SPRITE(TRAINER_PIC_SWIMMING_TRIATHLETE_F, gTrainerFrontPic_SwimmingTriathleteF, gTrainerPalette_SwimmingTriathleteF), + TRAINER_SPRITE(TRAINER_PIC_DRAGON_TAMER, gTrainerFrontPic_DragonTamer, gTrainerPalette_DragonTamer), + TRAINER_SPRITE(TRAINER_PIC_NINJA_BOY, gTrainerFrontPic_NinjaBoy, gTrainerPalette_NinjaBoy), + TRAINER_SPRITE(TRAINER_PIC_BATTLE_GIRL, gTrainerFrontPic_BattleGirl, gTrainerPalette_BattleGirl), + TRAINER_SPRITE(TRAINER_PIC_PARASOL_LADY, gTrainerFrontPic_ParasolLady, gTrainerPalette_ParasolLady), + TRAINER_SPRITE(TRAINER_PIC_SWIMMER_F, gTrainerFrontPic_SwimmerF, gTrainerPalette_SwimmerF), + TRAINER_SPRITE(TRAINER_PIC_TWINS, gTrainerFrontPic_Twins, gTrainerPalette_Twins), + TRAINER_SPRITE(TRAINER_PIC_SAILOR, gTrainerFrontPic_Sailor, gTrainerPalette_Sailor), + TRAINER_SPRITE(TRAINER_PIC_MAGMA_ADMIN, gTrainerFrontPic_MagmaAdmin, gTrainerPalette_MagmaAdmin), + TRAINER_SPRITE(TRAINER_PIC_WALLY, gTrainerFrontPic_Wally, gTrainerPalette_Wally), + TRAINER_SPRITE(TRAINER_PIC_BRENDAN, gTrainerFrontPic_Brendan, gTrainerPalette_Brendan), + TRAINER_SPRITE(TRAINER_PIC_MAY, gTrainerFrontPic_May, gTrainerPalette_May), + TRAINER_SPRITE(TRAINER_PIC_BUG_CATCHER, gTrainerFrontPic_BugCatcher, gTrainerPalette_BugCatcher), + TRAINER_SPRITE(TRAINER_PIC_POKEMON_RANGER_M, gTrainerFrontPic_PokemonRangerM, gTrainerPalette_PokemonRangerM), + TRAINER_SPRITE(TRAINER_PIC_POKEMON_RANGER_F, gTrainerFrontPic_PokemonRangerF, gTrainerPalette_PokemonRangerF), + TRAINER_SPRITE(TRAINER_PIC_MAGMA_LEADER_MAXIE, gTrainerFrontPic_MagmaLeaderMaxie, gTrainerPalette_MagmaLeaderMaxie), + TRAINER_SPRITE(TRAINER_PIC_LASS, gTrainerFrontPic_Lass, gTrainerPalette_Lass), + TRAINER_SPRITE(TRAINER_PIC_YOUNG_COUPLE, gTrainerFrontPic_YoungCouple, gTrainerPalette_YoungCouple), + TRAINER_SPRITE(TRAINER_PIC_OLD_COUPLE, gTrainerFrontPic_OldCouple, gTrainerPalette_OldCouple), + TRAINER_SPRITE(TRAINER_PIC_SIS_AND_BRO, gTrainerFrontPic_SisAndBro, gTrainerPalette_SisAndBro), + TRAINER_SPRITE(TRAINER_PIC_STEVEN, gTrainerFrontPic_Steven, gTrainerPalette_Steven, 0, 7, 0x188), + TRAINER_SPRITE(TRAINER_PIC_SALON_MAIDEN_ANABEL, gTrainerFrontPic_SalonMaidenAnabel, gTrainerPalette_SalonMaidenAnabel), + TRAINER_SPRITE(TRAINER_PIC_DOME_ACE_TUCKER, gTrainerFrontPic_DomeAceTucker, gTrainerPalette_DomeAceTucker), + TRAINER_SPRITE(TRAINER_PIC_PALACE_MAVEN_SPENSER, gTrainerFrontPic_PalaceMavenSpenser, gTrainerPalette_PalaceMavenSpenser), + TRAINER_SPRITE(TRAINER_PIC_ARENA_TYCOON_GRETA, gTrainerFrontPic_ArenaTycoonGreta, gTrainerPalette_ArenaTycoonGreta), + TRAINER_SPRITE(TRAINER_PIC_FACTORY_HEAD_NOLAND, gTrainerFrontPic_FactoryHeadNoland, gTrainerPalette_FactoryHeadNoland), + TRAINER_SPRITE(TRAINER_PIC_PIKE_QUEEN_LUCY, gTrainerFrontPic_PikeQueenLucy, gTrainerPalette_PikeQueenLucy), + TRAINER_SPRITE(TRAINER_PIC_PYRAMID_KING_BRANDON, gTrainerFrontPic_PyramidKingBrandon, gTrainerPalette_PyramidKingBrandon), + TRAINER_SPRITE(TRAINER_PIC_RED, gTrainerFrontPic_Red, gTrainerPalette_Red), + TRAINER_SPRITE(TRAINER_PIC_LEAF, gTrainerFrontPic_Leaf, gTrainerPalette_Leaf), + TRAINER_SPRITE(TRAINER_PIC_RS_BRENDAN, gTrainerFrontPic_RubySapphireBrendan, gTrainerPalette_RubySapphireBrendan), + TRAINER_SPRITE(TRAINER_PIC_RS_MAY, gTrainerFrontPic_RubySapphireMay, gTrainerPalette_RubySapphireMay), }; static const union AnimCmd sAnimCmd_Hoenn[] = @@ -526,23 +526,23 @@ const struct SpriteFrameImage gTrainerBackPicTable_Steven[] = // .backPic goes functionally unused, since none of these pics are compressed // and the place they would get extracted to gets overwritten later anyway // the casts are so they'll play nice with the strict struct definition -#define TRAINER_BACK_SPRITE(trainerPic, yOffset, sprite, pal, anim) \ - [TRAINER_BACK_PIC_##trainerPic] = \ - { \ - .coordinates = {.size = 8, .y_offset = yOffset}, \ - .backPic = {(const u32 *)gTrainerBackPic_##sprite, TRAINER_PIC_SIZE * ARRAY_COUNT(gTrainerBackPicTable_##sprite), TRAINER_BACK_PIC_##trainerPic}, \ - .palette = {gTrainer##pal, TRAINER_BACK_PIC_##trainerPic}, \ - .animation = sBackAnims_##anim, \ +#define TRAINER_BACK_SPRITE(trainerPic, yOffset, sprite, table, pal, anim) \ + [trainerPic] = \ + { \ + .coordinates = {.size = 8, .y_offset = yOffset}, \ + .backPic = {(const u32 *)sprite, TRAINER_PIC_SIZE * ARRAY_COUNT(table), trainerPic}, \ + .palette = {pal, trainerPic}, \ + .animation = anim, \ } const struct TrainerBacksprite gTrainerBacksprites[] = { - TRAINER_BACK_SPRITE(BRENDAN, 4, Brendan, Palette_Brendan, Hoenn), - TRAINER_BACK_SPRITE(MAY, 4, May, Palette_May, Hoenn), - TRAINER_BACK_SPRITE(RED, 5, Red, BackPicPalette_Red, Kanto), - TRAINER_BACK_SPRITE(LEAF, 5, Leaf, BackPicPalette_Leaf, Kanto), - TRAINER_BACK_SPRITE(RUBY_SAPPHIRE_BRENDAN, 4, RubySapphireBrendan, Palette_RubySapphireBrendan, Hoenn), - TRAINER_BACK_SPRITE(RUBY_SAPPHIRE_MAY, 4, RubySapphireMay, Palette_RubySapphireMay, Hoenn), - TRAINER_BACK_SPRITE(WALLY, 4, Wally, Palette_Wally, Hoenn), - TRAINER_BACK_SPRITE(STEVEN, 4, Steven, Palette_Steven, Hoenn), + TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_BRENDAN, 4, gTrainerBackPic_Brendan, gTrainerBackPicTable_Brendan, gTrainerPalette_Brendan, sBackAnims_Hoenn), + TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_MAY, 4, gTrainerBackPic_May, gTrainerBackPicTable_May, gTrainerPalette_May, sBackAnims_Hoenn), + TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_RED, 5, gTrainerBackPic_Red, gTrainerBackPicTable_Red, gTrainerBackPicPalette_Red, sBackAnims_Kanto), + TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_LEAF, 5, gTrainerBackPic_Leaf, gTrainerBackPicTable_Leaf, gTrainerBackPicPalette_Leaf, sBackAnims_Kanto), + TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN, 4, gTrainerBackPic_RubySapphireBrendan, gTrainerBackPicTable_RubySapphireBrendan, gTrainerPalette_RubySapphireBrendan, sBackAnims_Hoenn), + TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY, 4, gTrainerBackPic_RubySapphireMay, gTrainerBackPicTable_RubySapphireMay, gTrainerPalette_RubySapphireMay, sBackAnims_Hoenn), + TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_WALLY, 4, gTrainerBackPic_Wally, gTrainerBackPicTable_Wally, gTrainerPalette_Wally, sBackAnims_Hoenn), + TRAINER_BACK_SPRITE(TRAINER_BACK_PIC_STEVEN, 4, gTrainerBackPic_Steven, gTrainerBackPicTable_Steven, gTrainerPalette_Steven, sBackAnims_Hoenn), }; diff --git a/src/data/items.h b/src/data/items.h index daf1f9b957..27d9829899 100644 --- a/src/data/items.h +++ b/src/data/items.h @@ -1,9 +1,3 @@ -#if I_EXPANDED_ITEM_NAMES == TRUE -#define HANDLE_EXPANDED_ITEM_NAME(_name, ...) _(DEFAULT(_name, __VA_ARGS__)) -#else -#define HANDLE_EXPANDED_ITEM_NAME(_name, ...) _(_name) -#endif - #if I_USE_EVO_HELD_ITEMS_FROM_BAG == TRUE #define EVO_HELD_ITEM_TYPE ITEM_USE_PARTY_MENU #define EVO_HELD_ITEM_FIELD_FUNC ItemUseOutOfBattle_EvolutionStone @@ -1159,8 +1153,8 @@ const struct Item gItemsInfo[] = [ITEM_PEWTER_CRUNCHIES] = { - .name = HANDLE_EXPANDED_ITEM_NAME("PewtrCrnches", "Pewter Crunchies"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("PewtrCrnches", "Pewter Crunchies"), + .name = _("Pewter Crunchies"), + .pluralName = _("Pewter Crunchies"), .price = 250, .description = sFullHealDesc, .pocket = POCKET_ITEMS, @@ -1175,7 +1169,7 @@ const struct Item gItemsInfo[] = [ITEM_RAGE_CANDY_BAR] = { - .name = HANDLE_EXPANDED_ITEM_NAME("RageCandyBar", "Rage Candy Bar"), + .name = _("Rage Candy Bar"), .price = (I_PRICE >= GEN_7) ? 350 : 300, .description = sFullHealDesc, .pocket = POCKET_ITEMS, @@ -1239,7 +1233,7 @@ const struct Item gItemsInfo[] = [ITEM_LUMIOSE_GALETTE] = { - .name = HANDLE_EXPANDED_ITEM_NAME("LumioseGlete", "Lumiose Galette"), + .name = _("Lumiose Galette"), .price = (I_PRICE >= GEN_7) ? 350 : 200, .description = sFullHealDesc, .pocket = POCKET_ITEMS, @@ -1254,7 +1248,7 @@ const struct Item gItemsInfo[] = [ITEM_SHALOUR_SABLE] = { - .name = HANDLE_EXPANDED_ITEM_NAME("ShalourSable", "Shalour Sable"), + .name = _("Shalour Sable"), .price = (I_PRICE >= GEN_7) ? 350 : 200, .description = sFullHealDesc, .pocket = POCKET_ITEMS, @@ -1425,7 +1419,7 @@ const struct Item gItemsInfo[] = [ITEM_HEALTH_FEATHER] = { - .name = HANDLE_EXPANDED_ITEM_NAME("HealthFeather", "Health Feather"), + .name = _("Health Feather"), .price = (I_PRICE >= GEN_7) ? 300 : 3000, .description = sHealthFeatherDesc, .pocket = POCKET_ITEMS, @@ -1439,7 +1433,7 @@ const struct Item gItemsInfo[] = [ITEM_MUSCLE_FEATHER] = { - .name = HANDLE_EXPANDED_ITEM_NAME("MuscleFeather", "Muscle Feather"), + .name = _("Muscle Feather"), .price = (I_PRICE >= GEN_7) ? 300 : 3000, .description = sMuscleFeatherDesc, .pocket = POCKET_ITEMS, @@ -1453,7 +1447,7 @@ const struct Item gItemsInfo[] = [ITEM_RESIST_FEATHER] = { - .name = HANDLE_EXPANDED_ITEM_NAME("ResistFeather", "Resist Feather"), + .name = _("Resist Feather"), .price = (I_PRICE >= GEN_7) ? 300 : 3000, .description = sResistFeatherDesc, .pocket = POCKET_ITEMS, @@ -1467,7 +1461,7 @@ const struct Item gItemsInfo[] = [ITEM_GENIUS_FEATHER] = { - .name = HANDLE_EXPANDED_ITEM_NAME("GeniusFeather", "Genius Feather"), + .name = _("Genius Feather"), .price = (I_PRICE >= GEN_7) ? 300 : 3000, .description = sGeniusFeatherDesc, .pocket = POCKET_ITEMS, @@ -1481,7 +1475,7 @@ const struct Item gItemsInfo[] = [ITEM_CLEVER_FEATHER] = { - .name = HANDLE_EXPANDED_ITEM_NAME("CleverFeather", "Clever Feather"), + .name = _("Clever Feather"), .price = (I_PRICE >= GEN_7) ? 300 : 3000, .description = sCleverFeatherDesc, .pocket = POCKET_ITEMS, @@ -1495,7 +1489,7 @@ const struct Item gItemsInfo[] = [ITEM_SWIFT_FEATHER] = { - .name = HANDLE_EXPANDED_ITEM_NAME("SwiftFeather", "Swift Feather"), + .name = _("Swift Feather"), .price = (I_PRICE >= GEN_7) ? 300 : 3000, .description = sSwiftFeatherDesc, .pocket = POCKET_ITEMS, @@ -1511,7 +1505,7 @@ const struct Item gItemsInfo[] = [ITEM_ABILITY_CAPSULE] = { - .name = HANDLE_EXPANDED_ITEM_NAME("AbilityCapsle", "Ability Capsule"), + .name = _("Ability Capsule"), .price = (I_PRICE < GEN_7) ? 1000 : ((I_PRICE < GEN_9) ? 10000 : 100000), .holdEffectParam = 0, .description = COMPOUND_STRING( @@ -1526,8 +1520,8 @@ const struct Item gItemsInfo[] = [ITEM_ABILITY_PATCH] = { - .name = HANDLE_EXPANDED_ITEM_NAME("AbilityPatch", "Ability Patch"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("AbilityPatches", "Ability Patches"), + .name = _("Ability Patch"), + .pluralName = _("Ability Patches"), .price = (I_PRICE >= GEN_9) ? 250000 : 20, .holdEffectParam = 0, .description = COMPOUND_STRING( @@ -1922,8 +1916,8 @@ const struct Item gItemsInfo[] = [ITEM_EXP_CANDY_XS] = { - .name = HANDLE_EXPANDED_ITEM_NAME("Exp.Candy XS", "Exp. Candy XS"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("Exp.Candies XS", "Exp. Candies XS"), + .name = _("Exp. Candy XS"), + .pluralName = _("Exp. Candies XS"), .price = 20, .holdEffectParam = EXP_100, .description = COMPOUND_STRING( @@ -1941,8 +1935,8 @@ const struct Item gItemsInfo[] = [ITEM_EXP_CANDY_S] = { - .name = HANDLE_EXPANDED_ITEM_NAME("Exp.Candy S", "Exp. Candy S"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("Exp.Candies S", "Exp. Candies S"), + .name = _("Exp. Candy S"), + .pluralName = _("Exp. Candies S"), .price = 240, .holdEffectParam = EXP_800, .description = COMPOUND_STRING( @@ -1960,8 +1954,8 @@ const struct Item gItemsInfo[] = [ITEM_EXP_CANDY_M] = { - .name = HANDLE_EXPANDED_ITEM_NAME("Exp.Candy M", "Exp. Candy M"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("Exp.Candies M", "Exp. Candies M"), + .name = _("Exp. Candy M"), + .pluralName = _("Exp. Candies M"), .price = 1000, .holdEffectParam = EXP_3000, .description = COMPOUND_STRING( @@ -1979,8 +1973,8 @@ const struct Item gItemsInfo[] = [ITEM_EXP_CANDY_L] = { - .name = HANDLE_EXPANDED_ITEM_NAME("Exp.Candy L", "Exp. Candy L"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("Exp.Candies L", "Exp. Candies L"), + .name = _("Exp. Candy L"), + .pluralName = _("Exp. Candies L"), .price = 3000, .holdEffectParam = EXP_10000, .description = COMPOUND_STRING( @@ -1998,8 +1992,8 @@ const struct Item gItemsInfo[] = [ITEM_EXP_CANDY_XL] = { - .name = HANDLE_EXPANDED_ITEM_NAME("Exp.Candy XL", "Exp. Candy XL"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("Exp.Candies XL", "Exp. Candies XL"), + .name = _("Exp. Candy XL"), + .pluralName = _("Exp. Candies XL"), .price = 10000, .holdEffectParam = EXP_30000, .description = COMPOUND_STRING( @@ -2017,8 +2011,8 @@ const struct Item gItemsInfo[] = [ITEM_DYNAMAX_CANDY] = { - .name = HANDLE_EXPANDED_ITEM_NAME("DynamaxCandy", "Dynamax Candy"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("DynamaxCandies", "Dynamax Candies"), + .name = _("Dynamax Candy"), + .pluralName = _("Dynamax Candies"), .price = 0, .description = COMPOUND_STRING( "Raises the Dynamax\n" @@ -2486,8 +2480,8 @@ const struct Item gItemsInfo[] = [ITEM_MAX_MUSHROOMS] = { - .name = HANDLE_EXPANDED_ITEM_NAME("MaxMushrooms", "Max Mushrooms"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("MaxMushrooms", "Max Mushrooms"), + .name = _("Max Mushrooms"), + .pluralName = _("Max Mushrooms"), .price = 8000, .description = COMPOUND_STRING( "Raises every stat\n" @@ -2522,7 +2516,7 @@ const struct Item gItemsInfo[] = [ITEM_GOLD_BOTTLE_CAP] = { - .name = HANDLE_EXPANDED_ITEM_NAME("GoldBottlCap", "Gold Bottle Cap"), + .name = _("Gold Bottle Cap"), .price = (I_PRICE >= GEN_9) ? 60000 : 10000, .description = COMPOUND_STRING( "A beautiful bottle\n" @@ -2859,7 +2853,7 @@ const struct Item gItemsInfo[] = [ITEM_PRETTY_FEATHER] = { - .name = HANDLE_EXPANDED_ITEM_NAME("PrettyFeather", "Pretty Feather"), + .name = _("Pretty Feather"), .price = (I_PRICE >= GEN_7) ? 1000 * TREASURE_FACTOR: 200, .description = COMPOUND_STRING( "A beautiful yet\n" @@ -2987,7 +2981,7 @@ const struct Item gItemsInfo[] = [ITEM_STRANGE_SOUVENIR] = { - .name = HANDLE_EXPANDED_ITEM_NAME("StrngeSouvnr", "Strange Souvenir"), + .name = _("Strange Souvenir"), .price = (I_PRICE >= GEN_7) ? 3000 : 10, .description = COMPOUND_STRING( "An ornament that\n" @@ -3205,7 +3199,7 @@ const struct Item gItemsInfo[] = [ITEM_FOSSILIZED_BIRD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("FosslzedBird", "Fossilized Bird"), + .name = _("Fossilized Bird"), .price = 5000, .description = COMPOUND_STRING( "A fossil of an\n" @@ -3221,8 +3215,8 @@ const struct Item gItemsInfo[] = [ITEM_FOSSILIZED_FISH] = { - .name = HANDLE_EXPANDED_ITEM_NAME("FosslzedFish", "Fossilized Fish"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("FosslzedFishes", "Fossilized Fishes"), + .name = _("Fossilized Fish"), + .pluralName = _("Fossilized Fishes"), .price = 5000, .description = sFossilizedFishDesc, .pocket = POCKET_ITEMS, @@ -3235,7 +3229,7 @@ const struct Item gItemsInfo[] = [ITEM_FOSSILIZED_DRAKE] = { - .name = HANDLE_EXPANDED_ITEM_NAME("FosslzedDrke", "Fossilized Drake"), + .name = _("Fossilized Drake"), .price = 5000, .description = COMPOUND_STRING( "A fossil of an\n" @@ -3251,7 +3245,7 @@ const struct Item gItemsInfo[] = [ITEM_FOSSILIZED_DINO] = { - .name = HANDLE_EXPANDED_ITEM_NAME("FosslzedDino", "Fossilized Dino"), + .name = _("Fossilized Dino"), .price = 5000, .description = sFossilizedFishDesc, .pocket = POCKET_ITEMS, @@ -3376,8 +3370,8 @@ const struct Item gItemsInfo[] = [ITEM_SURPRISE_MULCH] = { - .name = HANDLE_EXPANDED_ITEM_NAME("SurprseMulch", "Surprise Mulch"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("SurprseMulch", "Surprise Mulch"), + .name = _("Surprise Mulch"), + .pluralName = _("Surprise Mulch"), .price = 200, #if OW_BERRY_MULCH_USAGE == TRUE .description = COMPOUND_STRING( @@ -3474,7 +3468,7 @@ const struct Item gItemsInfo[] = [ITEM_YELLOW_APRICORN] = { - .name = HANDLE_EXPANDED_ITEM_NAME("YellwApricorn", "Yellow Apricorn"), + .name = _("Yellow Apricorn"), .price = (I_PRICE == GEN_4) ? 0 : ((I_PRICE >= GEN_5 && I_PRICE <= GEN_7) ? 20 : 200), .description = COMPOUND_STRING( "A yellow apricorn.\n" @@ -3489,7 +3483,7 @@ const struct Item gItemsInfo[] = [ITEM_GREEN_APRICORN] = { - .name = HANDLE_EXPANDED_ITEM_NAME("GreenApricorn", "Green Apricorn"), + .name = _("Green Apricorn"), .price = (I_PRICE == GEN_4) ? 0 : ((I_PRICE >= GEN_5 && I_PRICE <= GEN_7) ? 20 : 200), .description = COMPOUND_STRING( "A green apricorn.\n" @@ -3519,7 +3513,7 @@ const struct Item gItemsInfo[] = [ITEM_WHITE_APRICORN] = { - .name = HANDLE_EXPANDED_ITEM_NAME("WhiteApricorn", "White Apricorn"), + .name = _("White Apricorn"), .price = (I_PRICE == GEN_4) ? 0 : ((I_PRICE >= GEN_5 && I_PRICE <= GEN_7) ? 20 : 200), .description = COMPOUND_STRING( "A white apricorn.\n" @@ -3534,7 +3528,7 @@ const struct Item gItemsInfo[] = [ITEM_BLACK_APRICORN] = { - .name = HANDLE_EXPANDED_ITEM_NAME("BlackApricorn", "Black Apricorn"), + .name = _("Black Apricorn"), .price = (I_PRICE == GEN_4) ? 0 : ((I_PRICE >= GEN_5 && I_PRICE <= GEN_7) ? 20 : 200), .description = COMPOUND_STRING( "A black apricorn.\n" @@ -3549,7 +3543,7 @@ const struct Item gItemsInfo[] = [ITEM_WISHING_PIECE] = { - .name = HANDLE_EXPANDED_ITEM_NAME("WishingPiece", "Wishing Piece"), + .name = _("Wishing Piece"), .price = 20, .description = COMPOUND_STRING( "Throw into a\n" @@ -3565,7 +3559,7 @@ const struct Item gItemsInfo[] = [ITEM_GALARICA_TWIG] = { - .name = HANDLE_EXPANDED_ITEM_NAME("GalaricaTwig", "Galarica Twig"), + .name = _("Galarica Twig"), .price = 20 * TREASURE_FACTOR, .description = COMPOUND_STRING( "A twig from a tree\n" @@ -4025,7 +4019,7 @@ const struct Item gItemsInfo[] = [ITEM_GALARICA_CUFF] = { - .name = HANDLE_EXPANDED_ITEM_NAME("GalaricaCuff", "Galarica Cuff"), + .name = _("Galarica Cuff"), .price = (I_PRICE >= GEN_9) ? 3000 : 6000, .description = COMPOUND_STRING( "A cuff from Galar\n" @@ -4042,8 +4036,8 @@ const struct Item gItemsInfo[] = [ITEM_GALARICA_WREATH] = { - .name = HANDLE_EXPANDED_ITEM_NAME("GalrcaWreath", "Galarica Wreath"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("GalrcaWreathes", "Galarica Wreathes"), + .name = _("Galarica Wreath"), + .pluralName = _("Galarica Wreathes"), .price = (I_PRICE >= GEN_9) ? 3000 : 6000, .description = COMPOUND_STRING( "A wreath made in\n" @@ -4251,7 +4245,7 @@ const struct Item gItemsInfo[] = [ITEM_STRAWBERRY_SWEET] = { - .name = HANDLE_EXPANDED_ITEM_NAME("StrwbrySweet", "Strawberry Sweet"), + .name = _("Strawberry Sweet"), .price = 500 * TREASURE_FACTOR, .description = COMPOUND_STRING( "Strawberry-shaped\n" @@ -4879,8 +4873,8 @@ const struct Item gItemsInfo[] = [ITEM_ELECTRIC_MEMORY] = { - .name = HANDLE_EXPANDED_ITEM_NAME("ElectrcMemory", "Electric Memory"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("ElectrcMemories", "Electric Memories"), + .name = _("Electric Memory"), + .pluralName = _("Electric Memories"), .price = 1000, .holdEffect = HOLD_EFFECT_MEMORY, .holdEffectParam = 0, @@ -4939,8 +4933,8 @@ const struct Item gItemsInfo[] = [ITEM_FIGHTING_MEMORY] = { - .name = HANDLE_EXPANDED_ITEM_NAME("FightngMemory", "Fighting Memory"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("FightngMemories", "Fighting Memories"), + .name = _("Fighting Memory"), + .pluralName = _("Fighting Memories"), .price = 1000, .holdEffect = HOLD_EFFECT_MEMORY, .holdEffectParam = 0, @@ -5019,8 +5013,8 @@ const struct Item gItemsInfo[] = [ITEM_PSYCHIC_MEMORY] = { - .name = HANDLE_EXPANDED_ITEM_NAME("PsychicMemory", "Psychic Memory"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("PsychicMemories", "Psychic Memories"), + .name = _("Psychic Memory"), + .pluralName = _("Psychic Memories"), .price = 1000, .holdEffect = HOLD_EFFECT_MEMORY, .holdEffectParam = 0, @@ -5179,7 +5173,7 @@ const struct Item gItemsInfo[] = [ITEM_RUSTED_SWORD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("RustedSword", "Rusted Sword"), + .name = _("Rusted Sword"), .price = 0, .description = COMPOUND_STRING( "A rusty sword. A\n" @@ -5194,7 +5188,7 @@ const struct Item gItemsInfo[] = [ITEM_RUSTED_SHIELD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("RustedShield", "Rusted Shield"), + .name = _("Rusted Shield"), .price = 0, .description = COMPOUND_STRING( "A rusty shield. A\n" @@ -5262,7 +5256,7 @@ const struct Item gItemsInfo[] = [ITEM_CHARIZARDITE_X] = { - .name = HANDLE_EXPANDED_ITEM_NAME("CharizarditeX", "Charizardite X"), + .name = _("Charizardite X"), .pluralName = _("Charizardites X"), .price = 0, .holdEffect = HOLD_EFFECT_MEGA_STONE, @@ -5277,7 +5271,7 @@ const struct Item gItemsInfo[] = [ITEM_CHARIZARDITE_Y] = { - .name = HANDLE_EXPANDED_ITEM_NAME("CharizarditeY", "Charizardite Y"), + .name = _("Charizardite Y"), .pluralName = _("Charizardites Y"), .price = 0, .holdEffect = HOLD_EFFECT_MEGA_STONE, @@ -6942,7 +6936,7 @@ const struct Item gItemsInfo[] = [ITEM_ULTRANECROZIUM_Z] = { - .name = HANDLE_EXPANDED_ITEM_NAME("U-Necrozium Z", "Ultranecrozium Z"), + .name = _("Ultranecrozium Z"), .price = 0, .holdEffect = HOLD_EFFECT_Z_CRYSTAL, .description = COMPOUND_STRING( @@ -7066,7 +7060,7 @@ const struct Item gItemsInfo[] = [ITEM_DEEP_SEA_SCALE] = { - .name = HANDLE_EXPANDED_ITEM_NAME("DeepSeaScale", "Deep Sea Scale"), + .name = _("Deep Sea Scale"), .price = (I_PRICE >= GEN_7) ? 2000 : 200, .holdEffect = HOLD_EFFECT_DEEP_SEA_SCALE, .description = COMPOUND_STRING( @@ -7084,7 +7078,7 @@ const struct Item gItemsInfo[] = [ITEM_DEEP_SEA_TOOTH] = { - .name = HANDLE_EXPANDED_ITEM_NAME("DeepSeaTooth", "Deep Sea Tooth"), + .name = _("Deep Sea Tooth"), .pluralName = _("Deep Sea Teeth"), .price = (I_PRICE >= GEN_7) ? 2000 : 200, .holdEffect = HOLD_EFFECT_DEEP_SEA_TOOTH, @@ -7631,8 +7625,8 @@ const struct Item gItemsInfo[] = [ITEM_NEVER_MELT_ICE] = { - .name = HANDLE_EXPANDED_ITEM_NAME("Never-MeltIce", "Never-Melt Ice"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("Never-MeltIce", "Never-Melt Ice"), + .name = _("Never-Melt Ice"), + .pluralName = _("Never-Melt Ice"), .price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100), .holdEffect = HOLD_EFFECT_ICE_POWER, .holdEffectParam = TYPE_BOOST_PARAM, @@ -8921,8 +8915,8 @@ const struct Item gItemsInfo[] = [ITEM_WEAKNESS_POLICY] = { - .name = HANDLE_EXPANDED_ITEM_NAME("WeaknssPolicy", "Weakness Policy"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("WeaknssPolicies", "Weakness Policies"), + .name = _("Weakness Policy"), + .pluralName = _("Weakness Policies"), .price = (I_PRICE >= GEN_9) ? 50000 : 1000, .holdEffect = HOLD_EFFECT_WEAKNESS_POLICY, .holdEffectParam = 0, @@ -8958,8 +8952,8 @@ const struct Item gItemsInfo[] = [ITEM_SAFETY_GOGGLES] = { - .name = HANDLE_EXPANDED_ITEM_NAME("SafetyGoggles", "Safety Goggles"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("SafetyGoggles", "Safety Goggles"), + .name = _("Safety Goggles"), + .pluralName = _("Safety Goggles"), .price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 1000), .holdEffect = HOLD_EFFECT_SAFETY_GOGGLES, .description = COMPOUND_STRING( @@ -8976,7 +8970,7 @@ const struct Item gItemsInfo[] = [ITEM_ADRENALINE_ORB] = { - .name = HANDLE_EXPANDED_ITEM_NAME("AdrenalineOrb", "Adrenaline Orb"), + .name = _("Adrenaline Orb"), .price = (I_PRICE >= GEN_9) ? 5000 : ((I_PRICE >= GEN_8) ? 4000 : 300), .holdEffect = HOLD_EFFECT_ADRENALINE_ORB, .description = COMPOUND_STRING( @@ -8993,7 +8987,7 @@ const struct Item gItemsInfo[] = [ITEM_TERRAIN_EXTENDER] = { - .name = HANDLE_EXPANDED_ITEM_NAME("TerainExtendr", "Terrain Extender"), + .name = _("Terrain Extender"), .price = (I_PRICE >= GEN_9) ? 15000 : 4000, .holdEffect = HOLD_EFFECT_TERRAIN_EXTENDER, .description = COMPOUND_STRING( @@ -9010,8 +9004,8 @@ const struct Item gItemsInfo[] = [ITEM_PROTECTIVE_PADS] = { - .name = HANDLE_EXPANDED_ITEM_NAME("ProtectvePads", "Protective Pads"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("ProtectvePads", "Protective Pads"), + .name = _("Protective Pads"), + .pluralName = _("Protective Pads"), .price = (I_PRICE >= GEN_9) ? 15000 : 4000, .holdEffect = HOLD_EFFECT_PROTECTIVE_PADS, .description = COMPOUND_STRING( @@ -9062,8 +9056,8 @@ const struct Item gItemsInfo[] = [ITEM_HEAVY_DUTY_BOOTS] = { - .name = HANDLE_EXPANDED_ITEM_NAME("Heavy-DtyBts", "Heavy-Duty Boots"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("Heavy-DtyBts", "Heavy-Duty Boots"), + .name = _("Heavy-Duty Boots"), + .pluralName = _("Heavy-Duty Boots"), .price = (I_PRICE >= GEN_9) ? 20000 : 4000, .holdEffect = HOLD_EFFECT_HEAVY_DUTY_BOOTS, .description = COMPOUND_STRING( @@ -9080,8 +9074,8 @@ const struct Item gItemsInfo[] = [ITEM_BLUNDER_POLICY] = { - .name = HANDLE_EXPANDED_ITEM_NAME("BlundrPolicy", "Blunder Policy"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("BlundrPolicies", "Blunder Policies"), + .name = _("Blunder Policy"), + .pluralName = _("Blunder Policies"), .price = (I_PRICE >= GEN_9) ? 30000 : 4000, .holdEffect = HOLD_EFFECT_BLUNDER_POLICY, .description = COMPOUND_STRING( @@ -9115,7 +9109,7 @@ const struct Item gItemsInfo[] = [ITEM_UTILITY_UMBRELLA] = { - .name = HANDLE_EXPANDED_ITEM_NAME("UtltyUmbrlla", "Utility Umbrella"), + .name = _("Utility Umbrella"), .price = (I_PRICE >= GEN_9) ? 15000 : 4000, .holdEffect = HOLD_EFFECT_UTILITY_UMBRELLA, .description = COMPOUND_STRING( @@ -11910,7 +11904,7 @@ const struct Item gItemsInfo[] = [ITEM_CATCHING_CHARM] = { - .name = HANDLE_EXPANDED_ITEM_NAME("CatchngCharm", "Catching Charm"), + .name = _("Catching Charm"), .price = 0, .importance = 1, .description = COMPOUND_STRING( @@ -11944,7 +11938,7 @@ const struct Item gItemsInfo[] = [ITEM_ROTOM_CATALOG] = { - .name = HANDLE_EXPANDED_ITEM_NAME("RotomCatalog", "Rotom Catalog"), + .name = _("Rotom Catalog"), .price = 0, .importance = 1, .description = COMPOUND_STRING( @@ -12074,8 +12068,8 @@ const struct Item gItemsInfo[] = [ITEM_REINS_OF_UNITY] = { - .name = HANDLE_EXPANDED_ITEM_NAME("ReinsOfUnity", "Reins of Unity"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("ReinsOfUnity", "Reins of Unity"), + .name = _("Reins of Unity"), + .pluralName = _("Reins of Unity"), .price = 0, .importance = 1, .description = COMPOUND_STRING( @@ -12243,7 +12237,7 @@ const struct Item gItemsInfo[] = [ITEM_DOWSING_MACHINE] = { - .name = _("Dowsing MCHN"), + .name = _("Dowsing Machine"), .price = 0, .description = COMPOUND_STRING( "A device that\n" @@ -12985,7 +12979,7 @@ const struct Item gItemsInfo[] = [ITEM_ABILITY_SHIELD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("AbilityShield", "Ability Shield"), + .name = _("Ability Shield"), .price = 20000, .holdEffect = HOLD_EFFECT_ABILITY_SHIELD, .description = COMPOUND_STRING( @@ -13021,7 +13015,7 @@ const struct Item gItemsInfo[] = [ITEM_PUNCHING_GLOVE] = { - .name = HANDLE_EXPANDED_ITEM_NAME("PunchingGlove", "Punching Glove"), + .name = _("Punching Glove"), .price = 15000, .holdEffect = HOLD_EFFECT_PUNCHING_GLOVE, .description = COMPOUND_STRING( @@ -13073,7 +13067,7 @@ const struct Item gItemsInfo[] = [ITEM_AUSPICIOUS_ARMOR] = { - .name = HANDLE_EXPANDED_ITEM_NAME("AuspciousArmr", "Auspicious Armor"), + .name = _("Auspicious Armor"), .price = 3000, .description = COMPOUND_STRING( "Armor inhabited by\n" @@ -13090,8 +13084,8 @@ const struct Item gItemsInfo[] = [ITEM_BOOSTER_ENERGY] = { - .name = HANDLE_EXPANDED_ITEM_NAME("BoosterEnergy", "Booster Energy"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("BoosterEnergies", "Booster Energies"), + .name = _("Booster Energy"), + .pluralName = _("Booster Energies"), .price = 0, .holdEffect = HOLD_EFFECT_BOOSTER_ENERGY, .description = COMPOUND_STRING( @@ -13108,7 +13102,7 @@ const struct Item gItemsInfo[] = [ITEM_BIG_BAMBOO_SHOOT] = { - .name = HANDLE_EXPANDED_ITEM_NAME("BigBmbooShoot", "Big Bamboo Shoot"), + .name = _("Big Bamboo Shoot"), .price = 3000, .description = COMPOUND_STRING( "A large and rare\n" @@ -13124,7 +13118,7 @@ const struct Item gItemsInfo[] = [ITEM_GIMMIGHOUL_COIN] = { - .name = HANDLE_EXPANDED_ITEM_NAME("GimighoulCoin", "Gimmighoul Coin"), + .name = _("Gimmighoul Coin"), .price = 400, .description = COMPOUND_STRING( "Gimmighoul hoard\n" @@ -13139,7 +13133,7 @@ const struct Item gItemsInfo[] = [ITEM_LEADERS_CREST] = { - .name = HANDLE_EXPANDED_ITEM_NAME("Leader'sCrest", "Leader's Crest"), + .name = _("Leader's Crest"), .price = 3000, .description = COMPOUND_STRING( "A shard of an old\n" @@ -13154,7 +13148,7 @@ const struct Item gItemsInfo[] = [ITEM_MALICIOUS_ARMOR] = { - .name = HANDLE_EXPANDED_ITEM_NAME("MaliciousArmr", "Malicious Armor"), + .name = _("Malicious Armor"), .price = 3000, .description = COMPOUND_STRING( "Armor inhabited by\n" @@ -13188,8 +13182,8 @@ const struct Item gItemsInfo[] = [ITEM_SCROLL_OF_DARKNESS] = { - .name = HANDLE_EXPANDED_ITEM_NAME("ScrllOfDrknss", "Scroll of Darkness"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("ScrllsOfDrknss", "Scrolls of Darkness"), + .name = _("Scroll of Darkness"), + .pluralName = _("Scrolls of Darkness"), .price = 0, .description = COMPOUND_STRING( "A peculiar scroll\n" @@ -13206,8 +13200,8 @@ const struct Item gItemsInfo[] = [ITEM_SCROLL_OF_WATERS] = { - .name = HANDLE_EXPANDED_ITEM_NAME("ScrollOfWatrs", "Scroll of Waters"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("ScrollsOfWatrs", "Scrolls of Waters"), + .name = _("Scroll of Waters"), + .pluralName = _("Scrolls of Waters"), .price = 0, .description = COMPOUND_STRING( "A peculiar scroll\n" @@ -13240,7 +13234,7 @@ const struct Item gItemsInfo[] = [ITEM_TINY_BAMBOO_SHOOT] = { - .name = HANDLE_EXPANDED_ITEM_NAME("TinyBmbooShot", "Tiny Bamboo Shoot"), + .name = _("Tiny Bamboo Shoot"), .price = 750, .description = COMPOUND_STRING( "A small and rare\n" @@ -13256,7 +13250,7 @@ const struct Item gItemsInfo[] = [ITEM_BUG_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("Bug TeraShard", "Bug Tera Shard"), + .name = _("Bug Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13268,7 +13262,7 @@ const struct Item gItemsInfo[] = [ITEM_DARK_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("DarkTeraShard", "Dark Tera Shard"), + .name = _("Dark Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13280,7 +13274,7 @@ const struct Item gItemsInfo[] = [ITEM_DRAGON_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("DragnTeraShrd", "Dragon Tera Shard"), + .name = _("Dragon Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13292,7 +13286,7 @@ const struct Item gItemsInfo[] = [ITEM_ELECTRIC_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("EltrcTeraShrd", "Electric Tera Shard"), + .name = _("Electric Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13304,7 +13298,7 @@ const struct Item gItemsInfo[] = [ITEM_FAIRY_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("FairyTeraShrd", "Fairy Tera Shard"), + .name = _("Fairy Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13316,7 +13310,7 @@ const struct Item gItemsInfo[] = [ITEM_FIGHTING_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("FghtngTerShrd", "Fighting Tera Shard"), + .name = _("Fighting Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13328,7 +13322,7 @@ const struct Item gItemsInfo[] = [ITEM_FIRE_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("FireTeraShard", "Fire Tera Shard"), + .name = _("Fire Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13340,7 +13334,7 @@ const struct Item gItemsInfo[] = [ITEM_FLYING_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("FlyngTeraShrd", "Flying Tera Shard"), + .name = _("Flying Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13352,7 +13346,7 @@ const struct Item gItemsInfo[] = [ITEM_GHOST_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("GhostTeraShrd", "Ghost Tera Shard"), + .name = _("Ghost Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13364,7 +13358,7 @@ const struct Item gItemsInfo[] = [ITEM_GRASS_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("GrassTeraShrd", "Grass Tera Shard"), + .name = _("Grass Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13376,7 +13370,7 @@ const struct Item gItemsInfo[] = [ITEM_GROUND_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("GrondTeraShrd", "Ground Tera Shard"), + .name = _("Ground Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13388,7 +13382,7 @@ const struct Item gItemsInfo[] = [ITEM_ICE_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("Ice TeraShard", "Ice Tera Shard"), + .name = _("Ice Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13400,7 +13394,7 @@ const struct Item gItemsInfo[] = [ITEM_NORMAL_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("NormlTeraShrd", "Normal Tera Shard"), + .name = _("Normal Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13412,7 +13406,7 @@ const struct Item gItemsInfo[] = [ITEM_POISON_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("PoisnTeraShrd", "Poison Tera Shard"), + .name = _("Poison Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13424,7 +13418,7 @@ const struct Item gItemsInfo[] = [ITEM_PSYCHIC_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("PschcTeraShrd", "Psychic Tera Shard"), + .name = _("Psychic Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13436,7 +13430,7 @@ const struct Item gItemsInfo[] = [ITEM_ROCK_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("RockTeraShard", "Rock Tera Shard"), + .name = _("Rock Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13448,7 +13442,7 @@ const struct Item gItemsInfo[] = [ITEM_STEEL_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("SteelTeraShrd", "Steel Tera Shard"), + .name = _("Steel Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13460,7 +13454,7 @@ const struct Item gItemsInfo[] = [ITEM_WATER_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("WaterTeraShrd", "Water Tera Shard"), + .name = _("Water Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13472,7 +13466,7 @@ const struct Item gItemsInfo[] = [ITEM_ADAMANT_CRYSTAL] = { - .name = HANDLE_EXPANDED_ITEM_NAME("AdamantCrystl", "Adamant Crystal"), + .name = _("Adamant Crystal"), .price = 0, .description = COMPOUND_STRING( "A large, glowing gem\n" @@ -13504,7 +13498,7 @@ const struct Item gItemsInfo[] = [ITEM_LUSTROUS_GLOBE] = { - .name = HANDLE_EXPANDED_ITEM_NAME("LustrousGlobe", "Lustrous Globe"), + .name = _("Lustrous Globe"), .price = 0, .description = COMPOUND_STRING( "A large, glowing gem\n" @@ -13520,7 +13514,7 @@ const struct Item gItemsInfo[] = [ITEM_BLACK_AUGURITE] = { - .name = HANDLE_EXPANDED_ITEM_NAME("BlackAugurite", "Black Augurite"), + .name = _("Black Augurite"), .price = 8000, .description = COMPOUND_STRING( "A black stone that\n" @@ -13623,7 +13617,7 @@ const struct Item gItemsInfo[] = [ITEM_UNREMARKABLE_TEACUP] = { - .name = HANDLE_EXPANDED_ITEM_NAME("UnrmkblTeacup", "Unremarkable Teacup"), + .name = _("Unremarkable Teacup"), .price = 1600, .description = COMPOUND_STRING( "A cracked teacup\n" @@ -13640,7 +13634,7 @@ const struct Item gItemsInfo[] = [ITEM_MASTERPIECE_TEACUP] = { - .name = HANDLE_EXPANDED_ITEM_NAME("MstrpceTeacup", "Masterpiece Teacup"), + .name = _("Masterpiece Teacup"), .price = 38000, .description = COMPOUND_STRING( "A chipped teacup\n" @@ -13657,7 +13651,7 @@ const struct Item gItemsInfo[] = [ITEM_CORNERSTONE_MASK] = { - .name = HANDLE_EXPANDED_ITEM_NAME("CornrstneMask", "Cornerstone Mask"), + .name = _("Cornerstone Mask"), .price = 0, .description = COMPOUND_STRING( "Allows Ogerpon to\n" @@ -13672,7 +13666,7 @@ const struct Item gItemsInfo[] = [ITEM_WELLSPRING_MASK] = { - .name = HANDLE_EXPANDED_ITEM_NAME("WellsprngMask", "Wellspring Mask"), + .name = _("Wellspring Mask"), .price = 0, .description = COMPOUND_STRING( "Allows Ogerpon to\n" @@ -13687,7 +13681,7 @@ const struct Item gItemsInfo[] = [ITEM_HEARTHFLAME_MASK] = { - .name = HANDLE_EXPANDED_ITEM_NAME("HrthflameMask", "Hearthflame Mask"), + .name = _("Hearthflame Mask"), .price = 0, .description = COMPOUND_STRING( "Allows Ogerpon to\n" @@ -13792,8 +13786,8 @@ const struct Item gItemsInfo[] = [ITEM_FRESH_START_MOCHI] = { - .name = HANDLE_EXPANDED_ITEM_NAME("FrshStrtMochi", "Fresh Start Mochi"), - .pluralName = HANDLE_EXPANDED_ITEM_NAME("FrshStrtMochi", "Fresh Start Mochi"), + .name = _("Fresh Start Mochi"), + .pluralName = _("Fresh Start Mochi"), .price = 300, .description = COMPOUND_STRING( "An item that resets\n" @@ -13810,7 +13804,7 @@ const struct Item gItemsInfo[] = [ITEM_GLIMMERING_CHARM] = { - .name = HANDLE_EXPANDED_ITEM_NAME("GlmmringCharm", "Glimmering Charm"), + .name = _("Glimmering Charm"), .price = 0, .importance = 1, .description = COMPOUND_STRING( @@ -13842,7 +13836,7 @@ const struct Item gItemsInfo[] = [ITEM_STELLAR_TERA_SHARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("StllrTeraShrd", "Stellar Tera Shard"), + .name = _("Stellar Tera Shard"), .price = 0, .description = sTeraShardDesc, .pocket = POCKET_ITEMS, @@ -13854,7 +13848,7 @@ const struct Item gItemsInfo[] = [ITEM_JUBILIFE_MUFFIN] = { - .name = HANDLE_EXPANDED_ITEM_NAME("JublifeMuffin", "Jubilife Muffin"), + .name = _("Jubilife Muffin"), .price = 250, .description = sFullHealDesc, .pocket = POCKET_ITEMS, @@ -13996,7 +13990,7 @@ const struct Item gItemsInfo[] = [ITEM_AUX_POWERGUARD] = { - .name = HANDLE_EXPANDED_ITEM_NAME("AuxPowerguard", "Aux Powerguard"), + .name = _("Aux Powerguard"), .price = 1200, .holdEffectParam = X_ITEM_STAGES, .description = COMPOUND_STRING( @@ -14019,7 +14013,7 @@ const struct Item gItemsInfo[] = [ITEM_CHOICE_DUMPLING] = { - .name = HANDLE_EXPANDED_ITEM_NAME("ChoiceDumplng", "Choice Dumpling"), + .name = _("Choice Dumpling"), .price = 1200, .description = sQuestionMarksDesc, .pocket = POCKET_ITEMS, @@ -14045,7 +14039,7 @@ const struct Item gItemsInfo[] = [ITEM_TWICE_SPICED_RADISH] = { - .name = HANDLE_EXPANDED_ITEM_NAME("2xSpicedRadsh", "Twice-Spiced Radish"), + .name = _("Twice-Spiced Radish"), .price = 1600, .description = sQuestionMarksDesc, .pocket = POCKET_ITEMS, diff --git a/src/data/moves_info.h b/src/data/moves_info.h index e79f804bb1..6dac60de27 100644 --- a/src/data/moves_info.h +++ b/src/data/moves_info.h @@ -11,12 +11,6 @@ // The Gen. 4+ contest data comes from urpg's contest movedex. -#if B_EXPANDED_MOVE_NAMES == TRUE -#define HANDLE_EXPANDED_MOVE_NAME(_name, ...) COMPOUND_STRING(DEFAULT(_name, __VA_ARGS__)) -#else -#define HANDLE_EXPANDED_MOVE_NAME(_name, ...) COMPOUND_STRING(_name) -#endif - #if B_BINDING_TURNS >= GEN_5 #define BINDING_TURNS "4 or 5" #else @@ -134,7 +128,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .mirrorMoveBanned = TRUE, .sketchBanned = TRUE, .assistBanned = TRUE, - .battleAnimScript = Move_NONE, + .battleAnimScript = gBattleAnimMove_None, }, [MOVE_POUND] = @@ -157,7 +151,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_POUND, .contestComboMoves = {0}, - .battleAnimScript = Move_POUND, + .battleAnimScript = gBattleAnimMove_Pound, }, [MOVE_KARATE_CHOP] = @@ -180,7 +174,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, - .battleAnimScript = Move_KARATE_CHOP, + .battleAnimScript = gBattleAnimMove_KarateChop, }, [MOVE_DOUBLE_SLAP] = @@ -202,7 +196,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_POUND}, - .battleAnimScript = Move_DOUBLE_SLAP, + .battleAnimScript = gBattleAnimMove_DoubleSlap, }, [MOVE_COMET_PUNCH] = @@ -225,7 +219,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_COMET_PUNCH, + .battleAnimScript = gBattleAnimMove_CometPunch, }, [MOVE_MEGA_PUNCH] = @@ -248,7 +242,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_MIND_READER}, - .battleAnimScript = Move_MEGA_PUNCH, + .battleAnimScript = gBattleAnimMove_MegaPunch, }, [MOVE_PAY_DAY] = @@ -272,7 +266,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PAY_DAY, + .battleAnimScript = gBattleAnimMove_PayDay, }, [MOVE_FIRE_PUNCH] = @@ -299,7 +293,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_FIRE_PUNCH, .contestComboMoves = {COMBO_STARTER_ICE_PUNCH, COMBO_STARTER_SUNNY_DAY, COMBO_STARTER_THUNDER_PUNCH}, - .battleAnimScript = Move_FIRE_PUNCH, + .battleAnimScript = gBattleAnimMove_FirePunch, }, [MOVE_ICE_PUNCH] = @@ -330,12 +324,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_ICE_PUNCH, .contestComboMoves = {COMBO_STARTER_FIRE_PUNCH, COMBO_STARTER_THUNDER_PUNCH}, - .battleAnimScript = Move_ICE_PUNCH, + .battleAnimScript = gBattleAnimMove_IcePunch, }, [MOVE_THUNDER_PUNCH] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ThunderPunch", "Thunder Punch"), + .name = COMPOUND_STRING("Thunder Punch"), .description = COMPOUND_STRING( "An electrified punch that\n" "may paralyze the foe."), @@ -357,7 +351,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_THUNDER_PUNCH, .contestComboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_FIRE_PUNCH, COMBO_STARTER_ICE_PUNCH}, - .battleAnimScript = Move_THUNDER_PUNCH, + .battleAnimScript = gBattleAnimMove_ThunderPunch, }, [MOVE_SCRATCH] = @@ -379,7 +373,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SCRATCH, .contestComboMoves = {COMBO_STARTER_LEER}, - .battleAnimScript = Move_SCRATCH, + .battleAnimScript = gBattleAnimMove_Scratch, }, [MOVE_VISE_GRIP] = @@ -401,7 +395,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_VICE_GRIP, .contestComboMoves = {0}, - .battleAnimScript = Move_VISE_GRIP, + .battleAnimScript = gBattleAnimMove_ViseGrip, }, [MOVE_GUILLOTINE] = @@ -423,7 +417,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_VICE_GRIP}, - .battleAnimScript = Move_GUILLOTINE, + .battleAnimScript = gBattleAnimMove_Guillotine, }, [MOVE_RAZOR_WIND] = @@ -449,7 +443,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_RAZOR_WIND, + .battleAnimScript = gBattleAnimMove_RazorWind, }, [MOVE_SWORDS_DANCE] = @@ -473,7 +467,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_SWORDS_DANCE, .contestComboMoves = {0}, - .battleAnimScript = Move_SWORDS_DANCE, + .battleAnimScript = gBattleAnimMove_SwordsDance, }, [MOVE_CUT] = @@ -496,7 +490,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWORDS_DANCE}, - .battleAnimScript = Move_CUT, + .battleAnimScript = gBattleAnimMove_Cut, }, [MOVE_GUST] = @@ -520,7 +514,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GUST, + .battleAnimScript = gBattleAnimMove_Gust, }, [MOVE_WING_ATTACK] = @@ -542,7 +536,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WING_ATTACK, + .battleAnimScript = gBattleAnimMove_WingAttack, }, [MOVE_WHIRLWIND] = @@ -570,7 +564,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WHIRLWIND, + .battleAnimScript = gBattleAnimMove_Whirlwind, }, [MOVE_FLY] = @@ -597,7 +591,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FLY, + .battleAnimScript = gBattleAnimMove_Fly, }, [MOVE_BIND] = @@ -623,7 +617,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_VICE_GRIP}, - .battleAnimScript = Move_BIND, + .battleAnimScript = gBattleAnimMove_Bind, }, [MOVE_SLAM] = @@ -646,7 +640,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_POUND}, - .battleAnimScript = Move_SLAM, + .battleAnimScript = gBattleAnimMove_Slam, }, [MOVE_VINE_WHIP] = @@ -674,7 +668,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_VINE_WHIP, + .battleAnimScript = gBattleAnimMove_VineWhip, }, [MOVE_STOMP] = @@ -702,7 +696,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LEER}, - .battleAnimScript = Move_STOMP, + .battleAnimScript = gBattleAnimMove_Stomp, }, [MOVE_DOUBLE_KICK] = @@ -725,7 +719,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DOUBLE_KICK, + .battleAnimScript = gBattleAnimMove_DoubleKick, }, [MOVE_MEGA_KICK] = @@ -747,7 +741,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_MIND_READER}, - .battleAnimScript = Move_MEGA_KICK, + .battleAnimScript = gBattleAnimMove_MegaKick, }, [MOVE_JUMP_KICK] = @@ -776,7 +770,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MIND_READER}, - .battleAnimScript = Move_JUMP_KICK, + .battleAnimScript = gBattleAnimMove_JumpKick, }, [MOVE_ROLLING_KICK] = @@ -803,7 +797,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ROLLING_KICK, + .battleAnimScript = gBattleAnimMove_RollingKick, }, [MOVE_SAND_ATTACK] = @@ -826,7 +820,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_SAND_ATTACK, .contestComboMoves = {COMBO_STARTER_MUD_SLAP, COMBO_STARTER_SANDSTORM}, - .battleAnimScript = Move_SAND_ATTACK, + .battleAnimScript = gBattleAnimMove_SandAttack, }, [MOVE_HEADBUTT] = @@ -852,7 +846,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, - .battleAnimScript = Move_HEADBUTT, + .battleAnimScript = gBattleAnimMove_Headbutt, }, [MOVE_HORN_ATTACK] = @@ -874,7 +868,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_HORN_ATTACK, .contestComboMoves = {COMBO_STARTER_LEER}, - .battleAnimScript = Move_HORN_ATTACK, + .battleAnimScript = gBattleAnimMove_HornAttack, }, [MOVE_FURY_ATTACK] = @@ -896,7 +890,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HORN_ATTACK, COMBO_STARTER_PECK}, - .battleAnimScript = Move_FURY_ATTACK, + .battleAnimScript = gBattleAnimMove_FuryAttack, }, [MOVE_HORN_DRILL] = @@ -918,7 +912,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HORN_ATTACK}, - .battleAnimScript = Move_HORN_DRILL, + .battleAnimScript = gBattleAnimMove_HornDrill, }, [MOVE_TACKLE] = @@ -946,7 +940,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DEFENSE_CURL, COMBO_STARTER_HARDEN, COMBO_STARTER_LEER}, - .battleAnimScript = Move_TACKLE, + .battleAnimScript = gBattleAnimMove_Tackle, }, [MOVE_BODY_SLAM] = @@ -974,7 +968,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BODY_SLAM, + .battleAnimScript = gBattleAnimMove_BodySlam, }, [MOVE_WRAP] = @@ -999,7 +993,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WRAP, + .battleAnimScript = gBattleAnimMove_Wrap, }, [MOVE_TAKE_DOWN] = @@ -1022,7 +1016,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_HARDEN}, - .battleAnimScript = Move_TAKE_DOWN, + .battleAnimScript = gBattleAnimMove_TakeDown, }, [MOVE_THRASH] = @@ -1049,7 +1043,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAGE}, - .battleAnimScript = Move_THRASH, + .battleAnimScript = gBattleAnimMove_Thrash, }, [MOVE_DOUBLE_EDGE] = @@ -1072,7 +1066,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_HARDEN}, - .battleAnimScript = Move_DOUBLE_EDGE, + .battleAnimScript = gBattleAnimMove_DoubleEdge, }, [MOVE_TAIL_WHIP] = @@ -1095,7 +1089,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARM}, - .battleAnimScript = Move_TAIL_WHIP, + .battleAnimScript = gBattleAnimMove_TailWhip, }, [MOVE_POISON_STING] = @@ -1120,7 +1114,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POISON_STING, + .battleAnimScript = gBattleAnimMove_PoisonSting, }, [MOVE_TWINEEDLE] = @@ -1147,7 +1141,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TWINEEDLE, + .battleAnimScript = gBattleAnimMove_Twineedle, }, [MOVE_PIN_MISSILE] = @@ -1168,7 +1162,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PIN_MISSILE, + .battleAnimScript = gBattleAnimMove_PinMissile, }, [MOVE_LEER] = @@ -1191,7 +1185,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_LEER, .contestComboMoves = {COMBO_STARTER_RAGE, COMBO_STARTER_SCARY_FACE}, - .battleAnimScript = Move_LEER, + .battleAnimScript = gBattleAnimMove_Leer, }, [MOVE_BITE] = @@ -1218,7 +1212,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LEER, COMBO_STARTER_SCARY_FACE}, - .battleAnimScript = Move_BITE, + .battleAnimScript = gBattleAnimMove_Bite, }, [MOVE_GROWL] = @@ -1243,7 +1237,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARM}, - .battleAnimScript = Move_GROWL, + .battleAnimScript = gBattleAnimMove_Growl, }, [MOVE_ROAR] = @@ -1271,7 +1265,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ROAR, + .battleAnimScript = gBattleAnimMove_Roar, }, [MOVE_SING] = @@ -1296,7 +1290,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_SING, .contestComboMoves = {0}, - .battleAnimScript = Move_SING, + .battleAnimScript = gBattleAnimMove_Sing, }, [MOVE_SUPERSONIC] = @@ -1321,7 +1315,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SUPERSONIC, + .battleAnimScript = gBattleAnimMove_Supersonic, }, [MOVE_SONIC_BOOM] = @@ -1343,7 +1337,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SONIC_BOOM, + .battleAnimScript = gBattleAnimMove_SonicBoom, }, [MOVE_DISABLE] = @@ -1373,7 +1367,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DISABLE, + .battleAnimScript = gBattleAnimMove_Disable, }, [MOVE_ACID] = @@ -1402,7 +1396,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ACID, + .battleAnimScript = gBattleAnimMove_Acid, }, [MOVE_EMBER] = @@ -1427,7 +1421,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_EMBER, + .battleAnimScript = gBattleAnimMove_Ember, }, [MOVE_FLAMETHROWER] = @@ -1452,7 +1446,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_FLAMETHROWER, + .battleAnimScript = gBattleAnimMove_Flamethrower, }, [MOVE_MIST] = @@ -1477,7 +1471,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MIST, + .battleAnimScript = gBattleAnimMove_Mist, }, [MOVE_WATER_GUN] = @@ -1498,7 +1492,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MUD_SPORT, COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_WATER_SPORT}, - .battleAnimScript = Move_WATER_GUN, + .battleAnimScript = gBattleAnimMove_WaterGun, }, [MOVE_HYDRO_PUMP] = @@ -1519,7 +1513,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_HYDRO_PUMP, + .battleAnimScript = gBattleAnimMove_HydroPump, }, [MOVE_SURF] = @@ -1542,7 +1536,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_SURF, .contestComboMoves = {COMBO_STARTER_DIVE, COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_SURF, + .battleAnimScript = gBattleAnimMove_Surf, }, [MOVE_ICE_BEAM] = @@ -1564,7 +1558,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .additionalEffects = ADDITIONAL_EFFECTS({ - // The following effect is also relevant in battle_pike.c + // The following effect is also relevant in battle_Pike.c // If you cherry-pick this to use something other than the config, make sure to update it there too .moveEffect = MOVE_EFFECT_FREEZE_OR_FROSTBITE, .chance = 10, @@ -1573,7 +1567,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, - .battleAnimScript = Move_ICE_BEAM, + .battleAnimScript = gBattleAnimMove_IceBeam, }, [MOVE_BLIZZARD] = @@ -1603,7 +1597,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL, COMBO_STARTER_POWDER_SNOW}, - .battleAnimScript = Move_BLIZZARD, + .battleAnimScript = gBattleAnimMove_Blizzard, }, [MOVE_PSYBEAM] = @@ -1628,7 +1622,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, - .battleAnimScript = Move_PSYBEAM, + .battleAnimScript = gBattleAnimMove_Psybeam, }, [MOVE_BUBBLE_BEAM] = @@ -1653,7 +1647,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_BUBBLE_BEAM, + .battleAnimScript = gBattleAnimMove_BubbleBeam, }, [MOVE_AURORA_BEAM] = @@ -1678,7 +1672,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, - .battleAnimScript = Move_AURORA_BEAM, + .battleAnimScript = gBattleAnimMove_AuroraBeam, }, [MOVE_HYPER_BEAM] = @@ -1702,7 +1696,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HYPER_BEAM, + .battleAnimScript = gBattleAnimMove_HyperBeam, }, [MOVE_PECK] = @@ -1724,7 +1718,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_PECK, .contestComboMoves = {0}, - .battleAnimScript = Move_PECK, + .battleAnimScript = gBattleAnimMove_Peck, }, [MOVE_DRILL_PECK] = @@ -1746,7 +1740,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_PECK}, - .battleAnimScript = Move_DRILL_PECK, + .battleAnimScript = gBattleAnimMove_DrillPeck, }, [MOVE_SUBMISSION] = @@ -1769,7 +1763,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MIND_READER}, - .battleAnimScript = Move_SUBMISSION, + .battleAnimScript = gBattleAnimMove_Submission, }, [MOVE_LOW_KICK] = @@ -1791,7 +1785,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LOW_KICK, + .battleAnimScript = gBattleAnimMove_LowKick, }, [MOVE_COUNTER] = @@ -1818,7 +1812,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TAUNT}, - .battleAnimScript = Move_COUNTER, + .battleAnimScript = gBattleAnimMove_Counter, }, [MOVE_SEISMIC_TOSS] = @@ -1841,7 +1835,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT}, - .battleAnimScript = Move_SEISMIC_TOSS, + .battleAnimScript = gBattleAnimMove_SeismicToss, }, [MOVE_STRENGTH] = @@ -1863,7 +1857,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STRENGTH, + .battleAnimScript = gBattleAnimMove_Strength, }, [MOVE_ABSORB] = @@ -1886,7 +1880,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_ABSORB, + .battleAnimScript = gBattleAnimMove_Absorb, }, [MOVE_MEGA_DRAIN] = @@ -1908,7 +1902,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_MEGA_DRAIN, + .battleAnimScript = gBattleAnimMove_MegaDrain, }, [MOVE_LEECH_SEED] = @@ -1931,7 +1925,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_LEECH_SEED, .contestComboMoves = {COMBO_STARTER_GROWTH, COMBO_STARTER_WORRY_SEED}, - .battleAnimScript = Move_LEECH_SEED, + .battleAnimScript = gBattleAnimMove_LeechSeed, }, [MOVE_GROWTH] = @@ -1956,7 +1950,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_GROWTH, .contestComboMoves = {0}, - .battleAnimScript = Move_GROWTH, + .battleAnimScript = gBattleAnimMove_Growth, }, [MOVE_RAZOR_LEAF] = @@ -1979,7 +1973,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_RAZOR_LEAF, + .battleAnimScript = gBattleAnimMove_RazorLeaf, }, [MOVE_SOLAR_BEAM] = @@ -2003,12 +1997,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH, COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_SOLAR_BEAM, + .battleAnimScript = gBattleAnimMove_SolarBeam, }, [MOVE_POISON_POWDER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PoisonPowder", "Poison Powder"), + .name = COMPOUND_STRING("Poison Powder"), .description = COMPOUND_STRING( "Scatters a toxic powder\n" "that may poison the foe."), @@ -2027,7 +2021,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWEET_SCENT}, - .battleAnimScript = Move_POISON_POWDER, + .battleAnimScript = gBattleAnimMove_PoisonPowder, }, [MOVE_STUN_SPORE] = @@ -2051,7 +2045,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWEET_SCENT}, - .battleAnimScript = Move_STUN_SPORE, + .battleAnimScript = gBattleAnimMove_StunSpore, }, [MOVE_SLEEP_POWDER] = @@ -2075,7 +2069,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWEET_SCENT}, - .battleAnimScript = Move_SLEEP_POWDER, + .battleAnimScript = gBattleAnimMove_SleepPowder, }, [MOVE_PETAL_DANCE] = @@ -2109,7 +2103,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_PETAL_DANCE, + .battleAnimScript = gBattleAnimMove_PetalDance, }, [MOVE_STRING_SHOT] = @@ -2132,7 +2126,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_STRING_SHOT, .contestComboMoves = {0}, - .battleAnimScript = Move_STRING_SHOT, + .battleAnimScript = gBattleAnimMove_StringShot, }, [MOVE_DRAGON_RAGE] = @@ -2155,7 +2149,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DRAGON_RAGE, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, - .battleAnimScript = Move_DRAGON_RAGE, + .battleAnimScript = gBattleAnimMove_DragonRage, }, [MOVE_FIRE_SPIN] = @@ -2180,12 +2174,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_FIRE_SPIN, + .battleAnimScript = gBattleAnimMove_FireSpin, }, [MOVE_THUNDER_SHOCK] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ThunderShock", "Thunder Shock"), + .name = COMPOUND_STRING("Thunder Shock"), .description = COMPOUND_STRING( "An electrical attack that\n" "may paralyze the foe."), @@ -2205,7 +2199,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, - .battleAnimScript = Move_THUNDER_SHOCK, + .battleAnimScript = gBattleAnimMove_ThunderShock, }, [MOVE_THUNDERBOLT] = @@ -2230,7 +2224,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, - .battleAnimScript = Move_THUNDERBOLT, + .battleAnimScript = gBattleAnimMove_Thunderbolt, }, [MOVE_THUNDER_WAVE] = @@ -2253,7 +2247,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, - .battleAnimScript = Move_THUNDER_WAVE, + .battleAnimScript = gBattleAnimMove_ThunderWave, }, [MOVE_THUNDER] = @@ -2279,7 +2273,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_LOCK_ON, COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_THUNDER, + .battleAnimScript = gBattleAnimMove_Thunder, }, [MOVE_ROCK_THROW] = @@ -2300,7 +2294,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_ROCK_THROW, .contestComboMoves = {0}, - .battleAnimScript = Move_ROCK_THROW, + .battleAnimScript = gBattleAnimMove_RockThrow, }, [MOVE_EARTHQUAKE] = @@ -2324,7 +2318,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_EARTHQUAKE, .contestComboMoves = {0}, - .battleAnimScript = Move_EARTHQUAKE, + .battleAnimScript = gBattleAnimMove_Earthquake, }, [MOVE_FISSURE] = @@ -2347,7 +2341,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_EARTHQUAKE}, - .battleAnimScript = Move_FISSURE, + .battleAnimScript = gBattleAnimMove_Fissure, }, [MOVE_DIG] = @@ -2374,7 +2368,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DIG, + .battleAnimScript = gBattleAnimMove_Dig, }, [MOVE_TOXIC] = @@ -2397,7 +2391,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_TOXIC, .contestComboMoves = {0}, - .battleAnimScript = Move_TOXIC, + .battleAnimScript = gBattleAnimMove_Toxic, }, [MOVE_CONFUSION] = @@ -2422,7 +2416,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_CONFUSION, .contestComboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_KINESIS, COMBO_STARTER_PSYCHIC}, - .battleAnimScript = Move_CONFUSION, + .battleAnimScript = gBattleAnimMove_Confusion, }, [MOVE_PSYCHIC] = @@ -2447,7 +2441,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_PSYCHIC, .contestComboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_CONFUSION, COMBO_STARTER_KINESIS}, - .battleAnimScript = Move_PSYCHIC, + .battleAnimScript = gBattleAnimMove_Psychic, }, [MOVE_HYPNOSIS] = @@ -2470,7 +2464,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_HYPNOSIS, .contestComboMoves = {0}, - .battleAnimScript = Move_HYPNOSIS, + .battleAnimScript = gBattleAnimMove_Hypnosis, }, [MOVE_MEDITATE] = @@ -2495,7 +2489,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, - .battleAnimScript = Move_MEDITATE, + .battleAnimScript = gBattleAnimMove_Meditate, }, [MOVE_AGILITY] = @@ -2520,7 +2514,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DOUBLE_TEAM}, - .battleAnimScript = Move_AGILITY, + .battleAnimScript = gBattleAnimMove_Agility, }, [MOVE_QUICK_ATTACK] = @@ -2542,7 +2536,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DOUBLE_TEAM}, - .battleAnimScript = Move_QUICK_ATTACK, + .battleAnimScript = gBattleAnimMove_QuickAttack, }, [MOVE_RAGE] = @@ -2564,7 +2558,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_RAGE, .contestComboMoves = {0}, - .battleAnimScript = Move_RAGE, + .battleAnimScript = gBattleAnimMove_Rage, }, [MOVE_TELEPORT] = @@ -2588,7 +2582,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CONFUSION, COMBO_STARTER_DOUBLE_TEAM, COMBO_STARTER_KINESIS, COMBO_STARTER_PSYCHIC}, - .battleAnimScript = Move_TELEPORT, + .battleAnimScript = gBattleAnimMove_Teleport, }, [MOVE_NIGHT_SHADE] = @@ -2609,7 +2603,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NIGHT_SHADE, + .battleAnimScript = gBattleAnimMove_NightShade, }, [MOVE_MIMIC] = @@ -2639,7 +2633,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MIMIC, + .battleAnimScript = gBattleAnimMove_Mimic, }, [MOVE_SCREECH] = @@ -2664,7 +2658,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SCREECH, + .battleAnimScript = gBattleAnimMove_Screech, }, [MOVE_DOUBLE_TEAM] = @@ -2689,7 +2683,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DOUBLE_TEAM, .contestComboMoves = {0}, - .battleAnimScript = Move_DOUBLE_TEAM, + .battleAnimScript = gBattleAnimMove_DoubleTeam, }, [MOVE_RECOVER] = @@ -2721,7 +2715,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_RECOVER, + .battleAnimScript = gBattleAnimMove_Recover, }, [MOVE_HARDEN] = @@ -2746,7 +2740,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_HARDEN, .contestComboMoves = {0}, - .battleAnimScript = Move_HARDEN, + .battleAnimScript = gBattleAnimMove_Harden, }, [MOVE_MINIMIZE] = @@ -2771,7 +2765,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MINIMIZE, + .battleAnimScript = gBattleAnimMove_Minimize, }, [MOVE_SMOKESCREEN] = @@ -2794,7 +2788,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SMOG}, - .battleAnimScript = Move_SMOKESCREEN, + .battleAnimScript = gBattleAnimMove_Smokescreen, }, [MOVE_CONFUSE_RAY] = @@ -2817,7 +2811,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CONFUSE_RAY, + .battleAnimScript = gBattleAnimMove_ConfuseRay, }, [MOVE_WITHDRAW] = @@ -2842,7 +2836,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_WITHDRAW, + .battleAnimScript = gBattleAnimMove_Withdraw, }, [MOVE_DEFENSE_CURL] = @@ -2867,7 +2861,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_DEFENSE_CURL, .contestComboMoves = {0}, - .battleAnimScript = Move_DEFENSE_CURL, + .battleAnimScript = gBattleAnimMove_DefenseCurl, }, [MOVE_BARRIER] = @@ -2892,7 +2886,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BARRIER, + .battleAnimScript = gBattleAnimMove_Barrier, }, [MOVE_LIGHT_SCREEN] = @@ -2917,7 +2911,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, - .battleAnimScript = Move_LIGHT_SCREEN, + .battleAnimScript = gBattleAnimMove_LightScreen, }, [MOVE_HAZE] = @@ -2942,7 +2936,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, - .battleAnimScript = Move_HAZE, + .battleAnimScript = gBattleAnimMove_Haze, }, [MOVE_REFLECT] = @@ -2967,7 +2961,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, - .battleAnimScript = Move_REFLECT, + .battleAnimScript = gBattleAnimMove_Reflect, }, [MOVE_FOCUS_ENERGY] = @@ -2993,7 +2987,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_FOCUS_ENERGY, .contestComboMoves = {0}, - .battleAnimScript = Move_FOCUS_ENERGY, + .battleAnimScript = gBattleAnimMove_FocusEnergy, }, [MOVE_BIDE] = @@ -3018,7 +3012,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BIDE, + .battleAnimScript = gBattleAnimMove_Bide, }, [MOVE_METRONOME] = @@ -3048,7 +3042,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_METRONOME, + .battleAnimScript = gBattleAnimMove_Metronome, }, [MOVE_MIRROR_MOVE] = @@ -3077,12 +3071,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MIRROR_MOVE, + .battleAnimScript = gBattleAnimMove_MirrorMove, }, [MOVE_SELF_DESTRUCT] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SelfDestruct", "Self-Destruct"), + .name = COMPOUND_STRING("Self-Destruct"), .description = COMPOUND_STRING( "Inflicts severe damage but\n" "makes the user faint."), @@ -3099,7 +3093,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SELF_DESTRUCT, + .battleAnimScript = gBattleAnimMove_SelfDestruct, }, [MOVE_EGG_BOMB] = @@ -3121,7 +3115,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SOFT_BOILED}, - .battleAnimScript = Move_EGG_BOMB, + .battleAnimScript = gBattleAnimMove_EggBomb, }, [MOVE_LICK] = @@ -3147,7 +3141,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LICK, + .battleAnimScript = gBattleAnimMove_Lick, }, [MOVE_SMOG] = @@ -3172,7 +3166,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SMOG, .contestComboMoves = {0}, - .battleAnimScript = Move_SMOG, + .battleAnimScript = gBattleAnimMove_Smog, }, [MOVE_SLUDGE] = @@ -3197,7 +3191,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SLUDGE, .contestComboMoves = {COMBO_STARTER_SLUDGE_BOMB}, - .battleAnimScript = Move_SLUDGE, + .battleAnimScript = gBattleAnimMove_Sludge, }, [MOVE_BONE_CLUB] = @@ -3222,7 +3216,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_BONE_CLUB, .contestComboMoves = {COMBO_STARTER_BONEMERANG, COMBO_STARTER_BONE_RUSH, COMBO_STARTER_SHADOW_BONE}, - .battleAnimScript = Move_BONE_CLUB, + .battleAnimScript = gBattleAnimMove_BoneClub, }, [MOVE_FIRE_BLAST] = @@ -3247,7 +3241,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_FIRE_BLAST, + .battleAnimScript = gBattleAnimMove_FireBlast, }, [MOVE_WATERFALL] = @@ -3275,7 +3269,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_WATERFALL, + .battleAnimScript = gBattleAnimMove_Waterfall, }, [MOVE_CLAMP] = @@ -3301,7 +3295,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_CLAMP, + .battleAnimScript = gBattleAnimMove_Clamp, }, [MOVE_SWIFT] = @@ -3322,7 +3316,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SWIFT, + .battleAnimScript = gBattleAnimMove_Swift, }, [MOVE_SKULL_BASH] = @@ -3352,7 +3346,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SKULL_BASH, + .battleAnimScript = gBattleAnimMove_SkullBash, }, [MOVE_SPIKE_CANNON] = @@ -3373,7 +3367,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SPIKE_CANNON, + .battleAnimScript = gBattleAnimMove_SpikeCannon, }, [MOVE_CONSTRICT] = @@ -3399,7 +3393,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CONSTRICT, + .battleAnimScript = gBattleAnimMove_Constrict, }, [MOVE_AMNESIA] = @@ -3424,7 +3418,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AMNESIA, + .battleAnimScript = gBattleAnimMove_Amnesia, }, [MOVE_KINESIS] = @@ -3447,7 +3441,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_KINESIS, .contestComboMoves = {COMBO_STARTER_CONFUSION, COMBO_STARTER_PSYCHIC}, - .battleAnimScript = Move_KINESIS, + .battleAnimScript = gBattleAnimMove_Kinesis, }, [MOVE_SOFT_BOILED] = @@ -3473,12 +3467,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_SOFT_BOILED, .contestComboMoves = {0}, - .battleAnimScript = Move_SOFT_BOILED, + .battleAnimScript = gBattleAnimMove_SoftBoiled, }, [MOVE_HIGH_JUMP_KICK] = { - .name = HANDLE_EXPANDED_MOVE_NAME("HighJumpKick", "High Jump Kick"), + .name = COMPOUND_STRING("High Jump Kick"), .description = COMPOUND_STRING( "A jumping knee kick. If it\n" "misses, the user is hurt."), @@ -3502,7 +3496,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MIND_READER}, - .battleAnimScript = Move_HIGH_JUMP_KICK, + .battleAnimScript = gBattleAnimMove_HighJumpKick, }, [MOVE_GLARE] = @@ -3531,7 +3525,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LEER}, - .battleAnimScript = Move_GLARE, + .battleAnimScript = gBattleAnimMove_Glare, }, [MOVE_DREAM_EATER] = @@ -3553,7 +3547,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_HYPNOSIS}, - .battleAnimScript = Move_DREAM_EATER, + .battleAnimScript = gBattleAnimMove_DreamEater, }, [MOVE_POISON_GAS] = @@ -3582,7 +3576,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POISON_GAS, + .battleAnimScript = gBattleAnimMove_PoisonGas, }, [MOVE_BARRAGE] = @@ -3604,7 +3598,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BARRAGE, + .battleAnimScript = gBattleAnimMove_Barrage, }, [MOVE_LEECH_LIFE] = @@ -3628,7 +3622,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LEECH_LIFE, + .battleAnimScript = gBattleAnimMove_LeechLife, }, [MOVE_LOVELY_KISS] = @@ -3651,7 +3645,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LOVELY_KISS, + .battleAnimScript = gBattleAnimMove_LovelyKiss, }, [MOVE_SKY_ATTACK] = @@ -3682,7 +3676,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SKY_ATTACK, + .battleAnimScript = gBattleAnimMove_SkyAttack, }, [MOVE_TRANSFORM] = @@ -3712,7 +3706,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TRANSFORM, + .battleAnimScript = gBattleAnimMove_Transform, }, [MOVE_BUBBLE] = @@ -3737,7 +3731,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_BUBBLE, + .battleAnimScript = gBattleAnimMove_Bubble, }, [MOVE_DIZZY_PUNCH] = @@ -3764,7 +3758,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DIZZY_PUNCH, + .battleAnimScript = gBattleAnimMove_DizzyPunch, }, [MOVE_SPORE] = @@ -3788,7 +3782,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SPORE, + .battleAnimScript = gBattleAnimMove_Spore, }, [MOVE_FLASH] = @@ -3811,7 +3805,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FLASH, + .battleAnimScript = gBattleAnimMove_Flash, }, [MOVE_PSYWAVE] = @@ -3832,7 +3826,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, - .battleAnimScript = Move_PSYWAVE, + .battleAnimScript = gBattleAnimMove_Psywave, }, [MOVE_SPLASH] = @@ -3857,7 +3851,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SPLASH, + .battleAnimScript = gBattleAnimMove_Splash, }, [MOVE_ACID_ARMOR] = @@ -3882,7 +3876,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ACID_ARMOR, + .battleAnimScript = gBattleAnimMove_AcidArmor, }, [MOVE_CRABHAMMER] = @@ -3905,7 +3899,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_SWORDS_DANCE}, - .battleAnimScript = Move_CRABHAMMER, + .battleAnimScript = gBattleAnimMove_Crabhammer, }, [MOVE_EXPLOSION] = @@ -3927,7 +3921,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_EXPLOSION, + .battleAnimScript = gBattleAnimMove_Explosion, }, [MOVE_FURY_SWIPES] = @@ -3949,7 +3943,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCRATCH}, - .battleAnimScript = Move_FURY_SWIPES, + .battleAnimScript = gBattleAnimMove_FurySwipes, }, [MOVE_BONEMERANG] = @@ -3971,7 +3965,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_BONEMERANG, .contestComboMoves = {COMBO_STARTER_BONE_CLUB, COMBO_STARTER_BONE_RUSH, COMBO_STARTER_SHADOW_BONE}, - .battleAnimScript = Move_BONEMERANG, + .battleAnimScript = gBattleAnimMove_Bonemerang, }, [MOVE_REST] = @@ -3997,7 +3991,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_REST, .contestComboMoves = {COMBO_STARTER_BELLY_DRUM, COMBO_STARTER_CHARM, COMBO_STARTER_YAWN}, - .battleAnimScript = Move_REST, + .battleAnimScript = gBattleAnimMove_Rest, }, [MOVE_ROCK_SLIDE] = @@ -4022,7 +4016,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ROCK_THROW}, - .battleAnimScript = Move_ROCK_SLIDE, + .battleAnimScript = gBattleAnimMove_RockSlide, }, [MOVE_HYPER_FANG] = @@ -4049,7 +4043,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HYPER_FANG, + .battleAnimScript = gBattleAnimMove_HyperFang, }, [MOVE_SHARPEN] = @@ -4074,7 +4068,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SHARPEN, + .battleAnimScript = gBattleAnimMove_Sharpen, }, [MOVE_CONVERSION] = @@ -4099,7 +4093,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CONVERSION, + .battleAnimScript = gBattleAnimMove_Conversion, }, [MOVE_TRI_ATTACK] = @@ -4124,7 +4118,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LOCK_ON}, - .battleAnimScript = Move_TRI_ATTACK, + .battleAnimScript = gBattleAnimMove_TriAttack, }, [MOVE_SUPER_FANG] = @@ -4147,7 +4141,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCARY_FACE}, - .battleAnimScript = Move_SUPER_FANG, + .battleAnimScript = gBattleAnimMove_SuperFang, }, [MOVE_SLASH] = @@ -4171,7 +4165,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCRATCH, COMBO_STARTER_SWORDS_DANCE}, - .battleAnimScript = Move_SLASH, + .battleAnimScript = gBattleAnimMove_Slash, }, [MOVE_SUBSTITUTE] = @@ -4197,7 +4191,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SUBSTITUTE, + .battleAnimScript = gBattleAnimMove_Substitute, }, [MOVE_STRUGGLE] = @@ -4235,7 +4229,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .encoreBanned = TRUE, .assistBanned = TRUE, .sketchBanned = TRUE, - .battleAnimScript = Move_STRUGGLE, + .battleAnimScript = gBattleAnimMove_Struggle, }, [MOVE_SKETCH] = @@ -4268,7 +4262,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SKETCH, + .battleAnimScript = gBattleAnimMove_Sketch, }, [MOVE_TRIPLE_KICK] = @@ -4291,7 +4285,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, - .battleAnimScript = Move_TRIPLE_KICK, + .battleAnimScript = gBattleAnimMove_TripleKick, }, [MOVE_THIEF] = @@ -4321,7 +4315,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_THIEF, + .battleAnimScript = gBattleAnimMove_Thief, }, [MOVE_SPIDER_WEB] = @@ -4345,7 +4339,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_STRING_SHOT}, - .battleAnimScript = Move_SPIDER_WEB, + .battleAnimScript = gBattleAnimMove_SpiderWeb, }, [MOVE_MIND_READER] = @@ -4367,7 +4361,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_MIND_READER, .contestComboMoves = {0}, - .battleAnimScript = Move_MIND_READER, + .battleAnimScript = gBattleAnimMove_MindReader, }, [MOVE_NIGHTMARE] = @@ -4390,7 +4384,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NIGHTMARE, + .battleAnimScript = gBattleAnimMove_Nightmare, }, [MOVE_FLAME_WHEEL] = @@ -4417,7 +4411,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_FLAME_WHEEL, + .battleAnimScript = gBattleAnimMove_FlameWheel, }, [MOVE_SNORE] = @@ -4445,7 +4439,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_REST}, - .battleAnimScript = Move_SNORE, + .battleAnimScript = gBattleAnimMove_Snore, }, [MOVE_CURSE] = @@ -4470,7 +4464,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_CURSE, .contestComboMoves = {0}, - .battleAnimScript = Move_CURSE, + .battleAnimScript = gBattleAnimMove_Curse, }, [MOVE_FLAIL] = @@ -4492,7 +4486,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ENDURE}, - .battleAnimScript = Move_FLAIL, + .battleAnimScript = gBattleAnimMove_Flail, }, [MOVE_CONVERSION_2] = @@ -4517,7 +4511,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CONVERSION_2, + .battleAnimScript = gBattleAnimMove_Conversion2, }, [MOVE_AEROBLAST] = @@ -4540,7 +4534,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AEROBLAST, + .battleAnimScript = gBattleAnimMove_Aeroblast, }, [MOVE_COTTON_SPORE] = @@ -4564,7 +4558,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_COTTON_SPORE, + .battleAnimScript = gBattleAnimMove_CottonSpore, }, [MOVE_REVERSAL] = @@ -4586,7 +4580,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ENDURE}, - .battleAnimScript = Move_REVERSAL, + .battleAnimScript = gBattleAnimMove_Reversal, }, [MOVE_SPITE] = @@ -4610,7 +4604,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CURSE}, - .battleAnimScript = Move_SPITE, + .battleAnimScript = gBattleAnimMove_Spite, }, [MOVE_POWDER_SNOW] = @@ -4639,7 +4633,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_POWDER_SNOW, .contestComboMoves = {COMBO_STARTER_HAIL}, - .battleAnimScript = Move_POWDER_SNOW, + .battleAnimScript = gBattleAnimMove_PowderSnow, }, [MOVE_PROTECT] = @@ -4664,7 +4658,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HARDEN}, - .battleAnimScript = Move_PROTECT, + .battleAnimScript = gBattleAnimMove_Protect, }, [MOVE_MACH_PUNCH] = @@ -4687,7 +4681,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MACH_PUNCH, + .battleAnimScript = gBattleAnimMove_MachPunch, }, [MOVE_SCARY_FACE] = @@ -4710,7 +4704,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SCARY_FACE, .contestComboMoves = {COMBO_STARTER_LEER, COMBO_STARTER_RAGE}, - .battleAnimScript = Move_SCARY_FACE, + .battleAnimScript = gBattleAnimMove_ScaryFace, }, [MOVE_FEINT_ATTACK] = @@ -4732,7 +4726,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT, COMBO_STARTER_LEER, COMBO_STARTER_POUND}, - .battleAnimScript = Move_FEINT_ATTACK, + .battleAnimScript = gBattleAnimMove_FeintAttack, }, [MOVE_SWEET_KISS] = @@ -4755,7 +4749,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARM}, - .battleAnimScript = Move_SWEET_KISS, + .battleAnimScript = gBattleAnimMove_SweetKiss, }, [MOVE_BELLY_DRUM] = @@ -4780,7 +4774,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_BELLY_DRUM, .contestComboMoves = {0}, - .battleAnimScript = Move_BELLY_DRUM, + .battleAnimScript = gBattleAnimMove_BellyDrum, }, [MOVE_SLUDGE_BOMB] = @@ -4806,7 +4800,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SLUDGE_BOMB, .contestComboMoves = {COMBO_STARTER_SLUDGE}, - .battleAnimScript = Move_SLUDGE_BOMB, + .battleAnimScript = gBattleAnimMove_SludgeBomb, }, [MOVE_MUD_SLAP] = @@ -4831,7 +4825,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_MUD_SLAP, .contestComboMoves = {COMBO_STARTER_MUD_SPORT, COMBO_STARTER_SAND_ATTACK, COMBO_STARTER_SANDSTORM}, - .battleAnimScript = Move_MUD_SLAP, + .battleAnimScript = gBattleAnimMove_MudSlap, }, [MOVE_OCTAZOOKA] = @@ -4857,7 +4851,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LOCK_ON, COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_OCTAZOOKA, + .battleAnimScript = gBattleAnimMove_Octazooka, }, [MOVE_SPIKES] = @@ -4884,7 +4878,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SPIKES, + .battleAnimScript = gBattleAnimMove_Spikes, }, [MOVE_ZAP_CANNON] = @@ -4910,7 +4904,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_LOCK_ON}, - .battleAnimScript = Move_ZAP_CANNON, + .battleAnimScript = gBattleAnimMove_ZapCannon, }, [MOVE_FORESIGHT] = @@ -4934,7 +4928,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FORESIGHT, + .battleAnimScript = gBattleAnimMove_Foresight, }, [MOVE_DESTINY_BOND] = @@ -4962,7 +4956,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CURSE, COMBO_STARTER_ENDURE, COMBO_STARTER_MEAN_LOOK}, - .battleAnimScript = Move_DESTINY_BOND, + .battleAnimScript = gBattleAnimMove_DestinyBond, }, [MOVE_PERISH_SONG] = @@ -4988,7 +4982,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MEAN_LOOK, COMBO_STARTER_SING}, - .battleAnimScript = Move_PERISH_SONG, + .battleAnimScript = gBattleAnimMove_PerishSong, }, [MOVE_ICY_WIND] = @@ -5014,7 +5008,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, - .battleAnimScript = Move_ICY_WIND, + .battleAnimScript = gBattleAnimMove_IcyWind, }, [MOVE_DETECT] = @@ -5041,7 +5035,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TAUNT}, - .battleAnimScript = Move_DETECT, + .battleAnimScript = gBattleAnimMove_Detect, }, [MOVE_BONE_RUSH] = @@ -5062,7 +5056,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_BONE_RUSH, .contestComboMoves = {COMBO_STARTER_BONE_CLUB, COMBO_STARTER_BONEMERANG, COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_SHADOW_BONE}, - .battleAnimScript = Move_BONE_RUSH, + .battleAnimScript = gBattleAnimMove_BoneRush, }, [MOVE_LOCK_ON] = @@ -5084,7 +5078,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_LOCK_ON, .contestComboMoves = {0}, - .battleAnimScript = Move_LOCK_ON, + .battleAnimScript = gBattleAnimMove_LockOn, }, [MOVE_OUTRAGE] = @@ -5111,7 +5105,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_OUTRAGE, + .battleAnimScript = gBattleAnimMove_Outrage, }, [MOVE_SANDSTORM] = @@ -5136,7 +5130,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SANDSTORM, .contestComboMoves = {0}, - .battleAnimScript = Move_SANDSTORM, + .battleAnimScript = gBattleAnimMove_Sandstorm, }, [MOVE_GIGA_DRAIN] = @@ -5159,7 +5153,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_GIGA_DRAIN, + .battleAnimScript = gBattleAnimMove_GigaDrain, }, [MOVE_ENDURE] = @@ -5186,7 +5180,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_ENDURE, .contestComboMoves = {0}, - .battleAnimScript = Move_ENDURE, + .battleAnimScript = gBattleAnimMove_Endure, }, [MOVE_CHARM] = @@ -5209,7 +5203,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_CHARM, .contestComboMoves = {0}, - .battleAnimScript = Move_CHARM, + .battleAnimScript = gBattleAnimMove_Charm, }, [MOVE_ROLLOUT] = @@ -5233,7 +5227,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DEFENSE_CURL, COMBO_STARTER_HARDEN}, - .battleAnimScript = Move_ROLLOUT, + .battleAnimScript = gBattleAnimMove_Rollout, }, [MOVE_FALSE_SWIPE] = @@ -5253,7 +5247,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWORDS_DANCE}, - .battleAnimScript = Move_FALSE_SWIPE, + .battleAnimScript = gBattleAnimMove_FalseSwipe, }, [MOVE_SWAGGER] = @@ -5276,7 +5270,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SWAGGER, + .battleAnimScript = gBattleAnimMove_Swagger, }, [MOVE_MILK_DRINK] = @@ -5302,7 +5296,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MILK_DRINK, + .battleAnimScript = gBattleAnimMove_MilkDrink, }, [MOVE_SPARK] = @@ -5328,7 +5322,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, - .battleAnimScript = Move_SPARK, + .battleAnimScript = gBattleAnimMove_Spark, }, [MOVE_FURY_CUTTER] = @@ -5357,7 +5351,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWORDS_DANCE}, - .battleAnimScript = Move_FURY_CUTTER, + .battleAnimScript = gBattleAnimMove_FuryCutter, }, [MOVE_STEEL_WING] = @@ -5384,7 +5378,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STEEL_WING, + .battleAnimScript = gBattleAnimMove_SteelWing, }, [MOVE_MEAN_LOOK] = @@ -5408,7 +5402,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_MEAN_LOOK, .contestComboMoves = {COMBO_STARTER_CURSE}, - .battleAnimScript = Move_MEAN_LOOK, + .battleAnimScript = gBattleAnimMove_MeanLook, }, [MOVE_ATTRACT] = @@ -5432,7 +5426,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ATTRACT, + .battleAnimScript = gBattleAnimMove_Attract, }, [MOVE_SLEEP_TALK] = @@ -5463,7 +5457,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_REST}, - .battleAnimScript = Move_SLEEP_TALK, + .battleAnimScript = gBattleAnimMove_SleepTalk, }, [MOVE_HEAL_BELL] = @@ -5490,7 +5484,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_HEAL_BELL, .contestComboMoves = {COMBO_STARTER_LUCKY_CHANT}, - .battleAnimScript = Move_HEAL_BELL, + .battleAnimScript = gBattleAnimMove_HealBell, }, [MOVE_RETURN] = @@ -5512,7 +5506,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_RETURN, + .battleAnimScript = gBattleAnimMove_Return, }, [MOVE_PRESENT] = @@ -5534,7 +5528,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PRESENT, + .battleAnimScript = gBattleAnimMove_Present, }, [MOVE_FRUSTRATION] = @@ -5556,7 +5550,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FRUSTRATION, + .battleAnimScript = gBattleAnimMove_Frustration, }, [MOVE_SAFEGUARD] = @@ -5581,7 +5575,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SAFEGUARD, + .battleAnimScript = gBattleAnimMove_Safeguard, }, [MOVE_PAIN_SPLIT] = @@ -5603,7 +5597,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ENDURE}, - .battleAnimScript = Move_PAIN_SPLIT, + .battleAnimScript = gBattleAnimMove_PainSplit, }, [MOVE_SACRED_FIRE] = @@ -5629,7 +5623,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_SACRED_FIRE, + .battleAnimScript = gBattleAnimMove_SacredFire, }, [MOVE_MAGNITUDE] = @@ -5652,12 +5646,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MAGNITUDE, + .battleAnimScript = gBattleAnimMove_Magnitude, }, [MOVE_DYNAMIC_PUNCH] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DynamicPunch", "Dynamic Punch"), + .name = COMPOUND_STRING("Dynamic Punch"), .description = COMPOUND_STRING( "Powerful and sure to cause\n" "confusion, but inaccurate."), @@ -5679,7 +5673,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_MIND_READER}, - .battleAnimScript = Move_DYNAMIC_PUNCH, + .battleAnimScript = gBattleAnimMove_DynamicPunch, }, [MOVE_MEGAHORN] = @@ -5701,12 +5695,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MEGAHORN, + .battleAnimScript = gBattleAnimMove_Megahorn, }, [MOVE_DRAGON_BREATH] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DragonBreath", "Dragon Breath"), + .name = COMPOUND_STRING("Dragon Breath"), .description = COMPOUND_STRING( "Strikes the foe with an\n" "incredible blast of breath."), @@ -5727,7 +5721,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DRAGON_BREATH, .contestComboMoves = {COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, - .battleAnimScript = Move_DRAGON_BREATH, + .battleAnimScript = gBattleAnimMove_DragonBreath, }, [MOVE_BATON_PASS] = @@ -5751,7 +5745,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BATON_PASS, + .battleAnimScript = gBattleAnimMove_BatonPass, }, [MOVE_ENCORE] = @@ -5776,7 +5770,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ENCORE, + .battleAnimScript = gBattleAnimMove_Encore, }, [MOVE_PURSUIT] = @@ -5799,7 +5793,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PURSUIT, + .battleAnimScript = gBattleAnimMove_Pursuit, }, [MOVE_RAPID_SPIN] = @@ -5833,7 +5827,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_RAPID_SPIN, + .battleAnimScript = gBattleAnimMove_RapidSpin, }, [MOVE_SWEET_SCENT] = @@ -5856,7 +5850,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_SWEET_SCENT, .contestComboMoves = {0}, - .battleAnimScript = Move_SWEET_SCENT, + .battleAnimScript = gBattleAnimMove_SweetScent, }, [MOVE_IRON_TAIL] = @@ -5882,7 +5876,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_IRON_TAIL, + .battleAnimScript = gBattleAnimMove_IronTail, }, [MOVE_METAL_CLAW] = @@ -5909,7 +5903,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_METAL_SOUND}, - .battleAnimScript = Move_METAL_CLAW, + .battleAnimScript = gBattleAnimMove_MetalClaw, }, [MOVE_VITAL_THROW] = @@ -5931,7 +5925,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT}, - .battleAnimScript = Move_VITAL_THROW, + .battleAnimScript = gBattleAnimMove_VitalThrow, }, [MOVE_MORNING_SUN] = @@ -5957,7 +5951,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_MORNING_SUN, + .battleAnimScript = gBattleAnimMove_MorningSun, }, [MOVE_SYNTHESIS] = @@ -5983,7 +5977,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_SYNTHESIS, + .battleAnimScript = gBattleAnimMove_Synthesis, }, [MOVE_MOONLIGHT] = @@ -6009,7 +6003,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_MOONLIGHT, + .battleAnimScript = gBattleAnimMove_Moonlight, }, [MOVE_HIDDEN_POWER] = @@ -6030,7 +6024,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HIDDEN_POWER, + .battleAnimScript = gBattleAnimMove_HiddenPower, }, [MOVE_CROSS_CHOP] = @@ -6053,7 +6047,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, - .battleAnimScript = Move_CROSS_CHOP, + .battleAnimScript = gBattleAnimMove_CrossChop, }, [MOVE_TWISTER] = @@ -6080,7 +6074,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TWISTER, + .battleAnimScript = gBattleAnimMove_Twister, }, [MOVE_RAIN_DANCE] = @@ -6104,7 +6098,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_RAIN_DANCE, .contestComboMoves = {0}, - .battleAnimScript = Move_RAIN_DANCE, + .battleAnimScript = gBattleAnimMove_RainDance, }, [MOVE_SUNNY_DAY] = @@ -6128,7 +6122,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_SUNNY_DAY, .contestComboMoves = {0}, - .battleAnimScript = Move_SUNNY_DAY, + .battleAnimScript = gBattleAnimMove_SunnyDay, }, [MOVE_CRUNCH] = @@ -6163,7 +6157,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCARY_FACE}, - .battleAnimScript = Move_CRUNCH, + .battleAnimScript = gBattleAnimMove_Crunch, }, [MOVE_MIRROR_COAT] = @@ -6188,7 +6182,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TAUNT}, - .battleAnimScript = Move_MIRROR_COAT, + .battleAnimScript = gBattleAnimMove_MirrorCoat, }, [MOVE_PSYCH_UP] = @@ -6214,12 +6208,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PSYCH_UP, + .battleAnimScript = gBattleAnimMove_PsychUp, }, [MOVE_EXTREME_SPEED] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ExtremeSpeed", "Extreme Speed"), + .name = COMPOUND_STRING("Extreme Speed"), .description = COMPOUND_STRING( "An extremely fast and\n" "powerful attack."), @@ -6236,12 +6230,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_EXTREME_SPEED, + .battleAnimScript = gBattleAnimMove_ExtremeSpeed, }, [MOVE_ANCIENT_POWER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("AncientPower", "Ancient Power"), + .name = COMPOUND_STRING("Ancient Power"), .description = COMPOUND_STRING( "An attack that may raise\n" "all stats."), @@ -6263,7 +6257,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ANCIENT_POWER, + .battleAnimScript = gBattleAnimMove_AncientPower, }, [MOVE_SHADOW_BALL] = @@ -6289,7 +6283,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SHADOW_BALL, + .battleAnimScript = gBattleAnimMove_ShadowBall, }, [MOVE_FUTURE_SIGHT] = @@ -6318,7 +6312,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND, COMBO_STARTER_CONFUSION, COMBO_STARTER_KINESIS, COMBO_STARTER_PSYCHIC}, - .battleAnimScript = Move_FUTURE_SIGHT, + .battleAnimScript = gBattleAnimMove_FutureSight, }, [MOVE_ROCK_SMASH] = @@ -6344,7 +6338,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ROCK_SMASH, + .battleAnimScript = gBattleAnimMove_RockSmash, }, [MOVE_WHIRLPOOL] = @@ -6369,7 +6363,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_WHIRLPOOL, + .battleAnimScript = gBattleAnimMove_Whirlpool, }, [MOVE_BEAT_UP] = @@ -6390,7 +6384,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BEAT_UP, + .battleAnimScript = gBattleAnimMove_BeatUp, }, [MOVE_FAKE_OUT] = @@ -6416,7 +6410,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_FAKE_OUT, .contestComboMoves = {0}, - .battleAnimScript = Move_FAKE_OUT, + .battleAnimScript = gBattleAnimMove_FakeOut, }, [MOVE_UPROAR] = @@ -6449,7 +6443,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_UPROAR, + .battleAnimScript = gBattleAnimMove_Uproar, }, [MOVE_STOCKPILE] = @@ -6474,7 +6468,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_STOCKPILE, .contestComboMoves = {0}, - .battleAnimScript = Move_STOCKPILE, + .battleAnimScript = gBattleAnimMove_Stockpile, }, [MOVE_SPIT_UP] = @@ -6496,7 +6490,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_STOCKPILE}, - .battleAnimScript = Move_SPIT_UP, + .battleAnimScript = gBattleAnimMove_SpitUp, }, [MOVE_SWALLOW] = @@ -6522,7 +6516,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_STOCKPILE}, - .battleAnimScript = Move_SWALLOW, + .battleAnimScript = gBattleAnimMove_Swallow, }, [MOVE_HEAT_WAVE] = @@ -6548,7 +6542,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_HEAT_WAVE, + .battleAnimScript = gBattleAnimMove_HeatWave, }, [MOVE_HAIL] = @@ -6572,7 +6566,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_HAIL, .contestComboMoves = {0}, - .battleAnimScript = Move_HAIL, + .battleAnimScript = gBattleAnimMove_Hail, }, [MOVE_TORMENT] = @@ -6595,7 +6589,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TORMENT, + .battleAnimScript = gBattleAnimMove_Torment, }, [MOVE_FLATTER] = @@ -6618,7 +6612,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARM}, - .battleAnimScript = Move_FLATTER, + .battleAnimScript = gBattleAnimMove_Flatter, }, [MOVE_WILL_O_WISP] = @@ -6641,7 +6635,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_WILL_O_WISP, + .battleAnimScript = gBattleAnimMove_WillOWisp, }, [MOVE_MEMENTO] = @@ -6663,7 +6657,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MEMENTO, + .battleAnimScript = gBattleAnimMove_Memento, }, [MOVE_FACADE] = @@ -6685,7 +6679,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FACADE, + .battleAnimScript = gBattleAnimMove_Facade, }, [MOVE_FOCUS_PUNCH] = @@ -6715,12 +6709,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, - .battleAnimScript = Move_FOCUS_PUNCH, + .battleAnimScript = gBattleAnimMove_FocusPunch, }, [MOVE_SMELLING_SALTS] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SmellngSalts", "Smelling Salts"), + .name = COMPOUND_STRING("Smelling Salts"), .description = COMPOUND_STRING( "Powerful against paralyzed\n" "foes, but also heals them."), @@ -6741,7 +6735,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SMELLING_SALTS, + .battleAnimScript = gBattleAnimMove_SmellingSalts, }, [MOVE_FOLLOW_ME] = @@ -6768,7 +6762,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FOLLOW_ME, + .battleAnimScript = gBattleAnimMove_FollowMe, }, [MOVE_NATURE_POWER] = @@ -6796,7 +6790,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NATURE_POWER, + .battleAnimScript = gBattleAnimMove_NaturePower, }, [MOVE_CHARGE] = @@ -6821,7 +6815,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_CHARGE, .contestComboMoves = {0}, - .battleAnimScript = Move_CHARGE, + .battleAnimScript = gBattleAnimMove_Charge, }, [MOVE_TAUNT] = @@ -6845,7 +6839,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_TAUNT, .contestComboMoves = {0}, - .battleAnimScript = Move_TAUNT, + .battleAnimScript = gBattleAnimMove_Taunt, }, [MOVE_HELPING_HAND] = @@ -6873,7 +6867,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HELPING_HAND, + .battleAnimScript = gBattleAnimMove_HelpingHand, }, [MOVE_TRICK] = @@ -6898,7 +6892,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TRICK, + .battleAnimScript = gBattleAnimMove_Trick, }, [MOVE_ROLE_PLAY] = @@ -6923,7 +6917,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ROLE_PLAY, + .battleAnimScript = gBattleAnimMove_RolePlay, }, [MOVE_WISH] = @@ -6949,7 +6943,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WISH, + .battleAnimScript = gBattleAnimMove_Wish, }, [MOVE_ASSIST] = @@ -6979,7 +6973,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ASSIST, + .battleAnimScript = gBattleAnimMove_Assist, }, [MOVE_INGRAIN] = @@ -7005,7 +6999,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_INGRAIN, + .battleAnimScript = gBattleAnimMove_Ingrain, }, [MOVE_SUPERPOWER] = @@ -7031,7 +7025,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_LOCK_ON, COMBO_STARTER_MIND_READER}, - .battleAnimScript = Move_SUPERPOWER, + .battleAnimScript = gBattleAnimMove_Superpower, }, [MOVE_MAGIC_COAT] = @@ -7055,7 +7049,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MAGIC_COAT, + .battleAnimScript = gBattleAnimMove_MagicCoat, }, [MOVE_RECYCLE] = @@ -7080,7 +7074,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_RECYCLE, + .battleAnimScript = gBattleAnimMove_Recycle, }, [MOVE_REVENGE] = @@ -7100,7 +7094,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_REVENGE, .contestComboMoves = {COMBO_STARTER_PAYBACK}, - .battleAnimScript = Move_REVENGE, + .battleAnimScript = gBattleAnimMove_Revenge, }, [MOVE_BRICK_BREAK] = @@ -7122,7 +7116,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, - .battleAnimScript = Move_BRICK_BREAK, + .battleAnimScript = gBattleAnimMove_BrickBreak, }, [MOVE_YAWN] = @@ -7145,7 +7139,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_YAWN, .contestComboMoves = {0}, - .battleAnimScript = Move_YAWN, + .battleAnimScript = gBattleAnimMove_Yawn, }, [MOVE_KNOCK_OFF] = @@ -7170,7 +7164,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT}, - .battleAnimScript = Move_KNOCK_OFF, + .battleAnimScript = gBattleAnimMove_KnockOff, }, [MOVE_ENDEAVOR] = @@ -7193,7 +7187,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ENDURE}, - .battleAnimScript = Move_ENDEAVOR, + .battleAnimScript = gBattleAnimMove_Endeavor, }, [MOVE_ERUPTION] = @@ -7214,7 +7208,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_EARTHQUAKE, COMBO_STARTER_ENDURE, COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_ERUPTION, + .battleAnimScript = gBattleAnimMove_Eruption, }, [MOVE_SKILL_SWAP] = @@ -7237,7 +7231,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SKILL_SWAP, + .battleAnimScript = gBattleAnimMove_SkillSwap, }, [MOVE_IMPRISON] = @@ -7264,7 +7258,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_IMPRISON, + .battleAnimScript = gBattleAnimMove_Imprison, }, [MOVE_REFRESH] = @@ -7289,7 +7283,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SING, COMBO_STARTER_WATER_SPORT}, - .battleAnimScript = Move_REFRESH, + .battleAnimScript = gBattleAnimMove_Refresh, }, [MOVE_GRUDGE] = @@ -7314,7 +7308,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CURSE}, - .battleAnimScript = Move_GRUDGE, + .battleAnimScript = gBattleAnimMove_Grudge, }, [MOVE_SNATCH] = @@ -7341,7 +7335,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SNATCH, + .battleAnimScript = gBattleAnimMove_Snatch, }, [MOVE_SECRET_POWER] = @@ -7366,7 +7360,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SECRET_POWER, + .battleAnimScript = gBattleAnimMove_SecretPower, }, [MOVE_DIVE] = @@ -7393,7 +7387,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_DIVE, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_SURF}, - .battleAnimScript = Move_DIVE, + .battleAnimScript = gBattleAnimMove_Dive, }, [MOVE_ARM_THRUST] = @@ -7415,7 +7409,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FAKE_OUT, COMBO_STARTER_FOCUS_ENERGY}, - .battleAnimScript = Move_ARM_THRUST, + .battleAnimScript = gBattleAnimMove_ArmThrust, }, [MOVE_CAMOUFLAGE] = @@ -7440,7 +7434,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CAMOUFLAGE, + .battleAnimScript = gBattleAnimMove_Camouflage, }, [MOVE_TAIL_GLOW] = @@ -7465,7 +7459,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TAIL_GLOW, + .battleAnimScript = gBattleAnimMove_TailGlow, }, [MOVE_LUSTER_PURGE] = @@ -7490,7 +7484,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, - .battleAnimScript = Move_LUSTER_PURGE, + .battleAnimScript = gBattleAnimMove_LusterPurge, }, [MOVE_MIST_BALL] = @@ -7516,12 +7510,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, - .battleAnimScript = Move_MIST_BALL, + .battleAnimScript = gBattleAnimMove_MistBall, }, [MOVE_FEATHER_DANCE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("FeatherDance", "Feather Dance"), + .name = COMPOUND_STRING("Feather Dance"), .description = COMPOUND_STRING( "Envelops the foe with down\n" "to sharply reduce Attack."), @@ -7540,7 +7534,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FEATHER_DANCE, + .battleAnimScript = gBattleAnimMove_FeatherDance, }, [MOVE_TEETER_DANCE] = @@ -7564,7 +7558,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TEETER_DANCE, + .battleAnimScript = gBattleAnimMove_TeeterDance, }, [MOVE_BLAZE_KICK] = @@ -7591,7 +7585,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_BLAZE_KICK, + .battleAnimScript = gBattleAnimMove_BlazeKick, }, [MOVE_MUD_SPORT] = @@ -7616,7 +7610,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_MUD_SPORT, .contestComboMoves = {COMBO_STARTER_MUD_SLAP, COMBO_STARTER_SANDSTORM, COMBO_STARTER_WATER_SPORT}, - .battleAnimScript = Move_MUD_SPORT, + .battleAnimScript = gBattleAnimMove_MudSport, }, [MOVE_ICE_BALL] = @@ -7641,7 +7635,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, - .battleAnimScript = Move_ICE_BALL, + .battleAnimScript = gBattleAnimMove_IceBall, }, [MOVE_NEEDLE_ARM] = @@ -7668,7 +7662,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NEEDLE_ARM, + .battleAnimScript = gBattleAnimMove_NeedleArm, }, [MOVE_SLACK_OFF] = @@ -7694,7 +7688,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SLACK_OFF, + .battleAnimScript = gBattleAnimMove_SlackOff, }, [MOVE_HYPER_VOICE] = @@ -7717,7 +7711,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HYPER_VOICE, + .battleAnimScript = gBattleAnimMove_HyperVoice, }, [MOVE_POISON_FANG] = @@ -7744,7 +7738,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POISON_FANG, + .battleAnimScript = gBattleAnimMove_PoisonFang, }, [MOVE_CRUSH_CLAW] = @@ -7770,7 +7764,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWORDS_DANCE}, - .battleAnimScript = Move_CRUSH_CLAW, + .battleAnimScript = gBattleAnimMove_CrushClaw, }, [MOVE_BLAST_BURN] = @@ -7795,7 +7789,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_BLAST_BURN, + .battleAnimScript = gBattleAnimMove_BlastBurn, }, [MOVE_HYDRO_CANNON] = @@ -7820,7 +7814,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_HYDRO_CANNON, + .battleAnimScript = gBattleAnimMove_HydroCannon, }, [MOVE_METEOR_MASH] = @@ -7848,7 +7842,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_METEOR_MASH, + .battleAnimScript = gBattleAnimMove_MeteorMash, }, [MOVE_ASTONISH] = @@ -7875,7 +7869,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ASTONISH, + .battleAnimScript = gBattleAnimMove_Astonish, }, [MOVE_WEATHER_BALL] = @@ -7898,7 +7892,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL, COMBO_STARTER_RAIN_DANCE, COMBO_STARTER_SANDSTORM, COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_WEATHER_BALL, + .battleAnimScript = gBattleAnimMove_WeatherBall, }, [MOVE_AROMATHERAPY] = @@ -7923,7 +7917,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AROMATHERAPY, + .battleAnimScript = gBattleAnimMove_Aromatherapy, }, [MOVE_FAKE_TEARS] = @@ -7946,7 +7940,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FAKE_TEARS, + .battleAnimScript = gBattleAnimMove_FakeTears, }, [MOVE_AIR_CUTTER] = @@ -7970,7 +7964,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AIR_CUTTER, + .battleAnimScript = gBattleAnimMove_AirCutter, }, [MOVE_OVERHEAT] = @@ -7996,7 +7990,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_OVERHEAT, + .battleAnimScript = gBattleAnimMove_Overheat, }, [MOVE_ODOR_SLEUTH] = @@ -8020,7 +8014,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ODOR_SLEUTH, + .battleAnimScript = gBattleAnimMove_OdorSleuth, }, [MOVE_ROCK_TOMB] = @@ -8045,7 +8039,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ROCK_THROW}, - .battleAnimScript = Move_ROCK_TOMB, + .battleAnimScript = gBattleAnimMove_RockTomb, }, [MOVE_SILVER_WIND] = @@ -8072,7 +8066,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SILVER_WIND, + .battleAnimScript = gBattleAnimMove_SilverWind, }, [MOVE_METAL_SOUND] = @@ -8097,12 +8091,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_METAL_SOUND, .contestComboMoves = {0}, - .battleAnimScript = Move_METAL_SOUND, + .battleAnimScript = gBattleAnimMove_MetalSound, }, [MOVE_GRASS_WHISTLE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("GrassWhistle", "Grass Whistle"), + .name = COMPOUND_STRING("Grass Whistle"), .description = COMPOUND_STRING( "Lulls the foe into sleep\n" "with a pleasant melody."), @@ -8122,7 +8116,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GRASS_WHISTLE, + .battleAnimScript = gBattleAnimMove_GrassWhistle, }, [MOVE_TICKLE] = @@ -8145,7 +8139,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TICKLE, + .battleAnimScript = gBattleAnimMove_Tickle, }, [MOVE_COSMIC_POWER] = @@ -8170,7 +8164,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_COSMIC_POWER, + .battleAnimScript = gBattleAnimMove_CosmicPower, }, [MOVE_WATER_SPOUT] = @@ -8191,7 +8185,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_WATER_SPOUT, + .battleAnimScript = gBattleAnimMove_WaterSpout, }, [MOVE_SIGNAL_BEAM] = @@ -8216,7 +8210,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SIGNAL_BEAM, + .battleAnimScript = gBattleAnimMove_SignalBeam, }, [MOVE_SHADOW_PUNCH] = @@ -8239,7 +8233,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SHADOW_PUNCH, + .battleAnimScript = gBattleAnimMove_ShadowPunch, }, [MOVE_EXTRASENSORY] = @@ -8265,7 +8259,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_EXTRASENSORY, + .battleAnimScript = gBattleAnimMove_Extrasensory, }, [MOVE_SKY_UPPERCUT] = @@ -8289,7 +8283,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, - .battleAnimScript = Move_SKY_UPPERCUT, + .battleAnimScript = gBattleAnimMove_SkyUppercut, }, [MOVE_SAND_TOMB] = @@ -8313,7 +8307,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SANDSTORM}, - .battleAnimScript = Move_SAND_TOMB, + .battleAnimScript = gBattleAnimMove_SandTomb, }, [MOVE_SHEER_COLD] = @@ -8334,7 +8328,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL, COMBO_STARTER_MIND_READER}, - .battleAnimScript = Move_SHEER_COLD, + .battleAnimScript = gBattleAnimMove_SheerCold, }, [MOVE_MUDDY_WATER] = @@ -8360,7 +8354,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_MUDDY_WATER, + .battleAnimScript = gBattleAnimMove_MuddyWater, }, [MOVE_BULLET_SEED] = @@ -8382,7 +8376,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_BULLET_SEED, + .battleAnimScript = gBattleAnimMove_BulletSeed, }, [MOVE_AERIAL_ACE] = @@ -8405,7 +8399,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AERIAL_ACE, + .battleAnimScript = gBattleAnimMove_AerialAce, }, [MOVE_ICICLE_SPEAR] = @@ -8426,7 +8420,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ICICLE_SPEAR, + .battleAnimScript = gBattleAnimMove_IcicleSpear, }, [MOVE_IRON_DEFENSE] = @@ -8451,7 +8445,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_IRON_DEFENSE, + .battleAnimScript = gBattleAnimMove_IronDefense, }, [MOVE_BLOCK] = @@ -8475,7 +8469,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BLOCK, + .battleAnimScript = gBattleAnimMove_Block, }, [MOVE_HOWL] = @@ -8501,7 +8495,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HOWL, + .battleAnimScript = gBattleAnimMove_Howl, }, [MOVE_DRAGON_CLAW] = @@ -8523,7 +8517,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, - .battleAnimScript = Move_DRAGON_CLAW, + .battleAnimScript = gBattleAnimMove_DragonClaw, }, [MOVE_FRENZY_PLANT] = @@ -8549,7 +8543,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_FRENZY_PLANT, + .battleAnimScript = gBattleAnimMove_FrenzyPlant, }, [MOVE_BULK_UP] = @@ -8574,7 +8568,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BULK_UP, + .battleAnimScript = gBattleAnimMove_BulkUp, }, [MOVE_BOUNCE] = @@ -8605,7 +8599,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BOUNCE, + .battleAnimScript = gBattleAnimMove_Bounce, }, [MOVE_MUD_SHOT] = @@ -8630,7 +8624,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SANDSTORM}, - .battleAnimScript = Move_MUD_SHOT, + .battleAnimScript = gBattleAnimMove_MudShot, }, [MOVE_POISON_TAIL] = @@ -8657,7 +8651,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POISON_TAIL, + .battleAnimScript = gBattleAnimMove_PoisonTail, }, [MOVE_COVET] = @@ -8686,7 +8680,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_COVET, + .battleAnimScript = gBattleAnimMove_Covet, }, [MOVE_VOLT_TACKLE] = @@ -8715,7 +8709,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_VOLT_TACKLE, + .battleAnimScript = gBattleAnimMove_VoltTackle, }, [MOVE_MAGICAL_LEAF] = @@ -8736,7 +8730,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_MAGICAL_LEAF, + .battleAnimScript = gBattleAnimMove_MagicalLeaf, }, [MOVE_WATER_SPORT] = @@ -8761,7 +8755,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_WATER_SPORT, .contestComboMoves = {COMBO_STARTER_MUD_SPORT, COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_WATER_SPORT, + .battleAnimScript = gBattleAnimMove_WaterSport, }, [MOVE_CALM_MIND] = @@ -8786,7 +8780,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_CALM_MIND, .contestComboMoves = {0}, - .battleAnimScript = Move_CALM_MIND, + .battleAnimScript = gBattleAnimMove_CalmMind, }, [MOVE_LEAF_BLADE] = @@ -8810,7 +8804,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LEAF_BLADE, + .battleAnimScript = gBattleAnimMove_LeafBlade, }, [MOVE_DRAGON_DANCE] = @@ -8836,7 +8830,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DRAGON_DANCE, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, - .battleAnimScript = Move_DRAGON_DANCE, + .battleAnimScript = gBattleAnimMove_DragonDance, }, [MOVE_ROCK_BLAST] = @@ -8858,7 +8852,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ROCK_BLAST, + .battleAnimScript = gBattleAnimMove_RockBlast, }, [MOVE_SHOCK_WAVE] = @@ -8879,7 +8873,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, - .battleAnimScript = Move_SHOCK_WAVE, + .battleAnimScript = gBattleAnimMove_ShockWave, }, [MOVE_WATER_PULSE] = @@ -8905,7 +8899,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_WATER_PULSE, + .battleAnimScript = gBattleAnimMove_WaterPulse, }, [MOVE_DOOM_DESIRE] = @@ -8928,7 +8922,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DOOM_DESIRE, + .battleAnimScript = gBattleAnimMove_DoomDesire, }, [MOVE_PSYCHO_BOOST] = @@ -8953,7 +8947,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CALM_MIND}, - .battleAnimScript = Move_PSYCHO_BOOST, + .battleAnimScript = gBattleAnimMove_PsychoBoost, }, [MOVE_ROOST] = @@ -8979,7 +8973,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_BRAVE_BIRD}, - .battleAnimScript = Move_ROOST, + .battleAnimScript = gBattleAnimMove_Roost, }, [MOVE_GRAVITY] = @@ -9004,7 +8998,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GRAVITY, + .battleAnimScript = gBattleAnimMove_Gravity, }, [MOVE_MIRACLE_EYE] = @@ -9028,7 +9022,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MIRACLE_EYE, + .battleAnimScript = gBattleAnimMove_MiracleEye, }, [MOVE_WAKE_UP_SLAP] = @@ -9054,7 +9048,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WAKE_UP_SLAP, + .battleAnimScript = gBattleAnimMove_WakeUpSlap, }, [MOVE_HAMMER_ARM] = @@ -9081,7 +9075,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, - .battleAnimScript = Move_HAMMER_ARM, + .battleAnimScript = gBattleAnimMove_HammerArm, }, [MOVE_GYRO_BALL] = @@ -9104,7 +9098,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GYRO_BALL, + .battleAnimScript = gBattleAnimMove_GyroBall, }, [MOVE_HEALING_WISH] = @@ -9127,7 +9121,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HEALING_WISH, + .battleAnimScript = gBattleAnimMove_HealingWish, }, [MOVE_BRINE] = @@ -9148,7 +9142,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_BRINE, + .battleAnimScript = gBattleAnimMove_Brine, }, [MOVE_NATURAL_GIFT] = @@ -9169,7 +9163,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NATURAL_GIFT, + .battleAnimScript = gBattleAnimMove_NaturalGift, }, [MOVE_FEINT] = @@ -9196,7 +9190,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FEINT, + .battleAnimScript = gBattleAnimMove_Feint, }, [MOVE_PLUCK] = @@ -9219,7 +9213,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PLUCK, + .battleAnimScript = gBattleAnimMove_Pluck, }, [MOVE_TAILWIND] = @@ -9245,7 +9239,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TAILWIND, + .battleAnimScript = gBattleAnimMove_Tailwind, }, [MOVE_ACUPRESSURE] = @@ -9270,7 +9264,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ACUPRESSURE, + .battleAnimScript = gBattleAnimMove_Acupressure, }, [MOVE_METAL_BURST] = @@ -9292,7 +9286,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_METAL_SOUND}, - .battleAnimScript = Move_METAL_BURST, + .battleAnimScript = gBattleAnimMove_MetalBurst, }, [MOVE_U_TURN] = @@ -9312,7 +9306,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_U_TURN, + .battleAnimScript = gBattleAnimMove_UTurn, }, [MOVE_CLOSE_COMBAT] = @@ -9336,7 +9330,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY, COMBO_STARTER_MIND_READER}, - .battleAnimScript = Move_CLOSE_COMBAT, + .battleAnimScript = gBattleAnimMove_CloseCombat, }, [MOVE_PAYBACK] = @@ -9358,7 +9352,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_PAYBACK, .contestComboMoves = {COMBO_STARTER_REVENGE}, - .battleAnimScript = Move_PAYBACK, + .battleAnimScript = gBattleAnimMove_Payback, }, [MOVE_ASSURANCE] = @@ -9380,7 +9374,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_PAYBACK, COMBO_STARTER_REVENGE}, - .battleAnimScript = Move_ASSURANCE, + .battleAnimScript = gBattleAnimMove_Assurance, }, [MOVE_EMBARGO] = @@ -9403,7 +9397,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_EMBARGO, + .battleAnimScript = gBattleAnimMove_Embargo, }, [MOVE_FLING] = @@ -9425,7 +9419,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FLING, + .battleAnimScript = gBattleAnimMove_Fling, }, [MOVE_PSYCHO_SHIFT] = @@ -9447,7 +9441,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PSYCHO_SHIFT, + .battleAnimScript = gBattleAnimMove_PsychoShift, }, [MOVE_TRUMP_CARD] = @@ -9469,7 +9463,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TRUMP_CARD, + .battleAnimScript = gBattleAnimMove_TrumpCard, }, [MOVE_HEAL_BLOCK] = @@ -9492,7 +9486,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HEAL_BLOCK, + .battleAnimScript = gBattleAnimMove_HealBlock, }, [MOVE_WRING_OUT] = @@ -9513,7 +9507,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WRING_OUT, + .battleAnimScript = gBattleAnimMove_WringOut, }, [MOVE_POWER_TRICK] = @@ -9538,7 +9532,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POWER_TRICK, + .battleAnimScript = gBattleAnimMove_PowerTrick, }, [MOVE_GASTRO_ACID] = @@ -9561,7 +9555,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GASTRO_ACID, + .battleAnimScript = gBattleAnimMove_GastroAcid, }, [MOVE_LUCKY_CHANT] = @@ -9586,7 +9580,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_LUCKY_CHANT, .contestComboMoves = {COMBO_STARTER_HEAL_BELL}, - .battleAnimScript = Move_LUCKY_CHANT, + .battleAnimScript = gBattleAnimMove_LuckyChant, }, [MOVE_ME_FIRST] = @@ -9618,7 +9612,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ME_FIRST, + .battleAnimScript = gBattleAnimMove_MeFirst, }, [MOVE_COPYCAT] = @@ -9649,7 +9643,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_COPYCAT, + .battleAnimScript = gBattleAnimMove_Copycat, }, [MOVE_POWER_SWAP] = @@ -9672,7 +9666,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POWER_SWAP, + .battleAnimScript = gBattleAnimMove_PowerSwap, }, [MOVE_GUARD_SWAP] = @@ -9695,7 +9689,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GUARD_SWAP, + .battleAnimScript = gBattleAnimMove_GuardSwap, }, [MOVE_PUNISHMENT] = @@ -9717,7 +9711,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PUNISHMENT, + .battleAnimScript = gBattleAnimMove_Punishment, }, [MOVE_LAST_RESORT] = @@ -9739,7 +9733,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LAST_RESORT, + .battleAnimScript = gBattleAnimMove_LastResort, }, [MOVE_WORRY_SEED] = @@ -9762,7 +9756,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_WORRY_SEED, .contestComboMoves = {COMBO_STARTER_LEECH_SEED}, - .battleAnimScript = Move_WORRY_SEED, + .battleAnimScript = gBattleAnimMove_WorrySeed, }, [MOVE_SUCKER_PUNCH] = @@ -9782,7 +9776,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SUCKER_PUNCH, + .battleAnimScript = gBattleAnimMove_SuckerPunch, }, [MOVE_TOXIC_SPIKES] = @@ -9809,7 +9803,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TOXIC_SPIKES, + .battleAnimScript = gBattleAnimMove_ToxicSpikes, }, [MOVE_HEART_SWAP] = @@ -9832,7 +9826,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HEART_SWAP, + .battleAnimScript = gBattleAnimMove_HeartSwap, }, [MOVE_AQUA_RING] = @@ -9857,7 +9851,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AQUA_RING, + .battleAnimScript = gBattleAnimMove_AquaRing, }, [MOVE_MAGNET_RISE] = @@ -9883,7 +9877,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MAGNET_RISE, + .battleAnimScript = gBattleAnimMove_MagnetRise, }, [MOVE_FLARE_BLITZ] = @@ -9911,7 +9905,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_FLARE_BLITZ, + .battleAnimScript = gBattleAnimMove_FlareBlitz, }, [MOVE_FORCE_PALM] = @@ -9937,7 +9931,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FORCE_PALM, + .battleAnimScript = gBattleAnimMove_ForcePalm, }, [MOVE_AURA_SPHERE] = @@ -9960,7 +9954,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AURA_SPHERE, + .battleAnimScript = gBattleAnimMove_AuraSphere, }, [MOVE_ROCK_POLISH] = @@ -9985,7 +9979,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ROCK_POLISH, + .battleAnimScript = gBattleAnimMove_RockPolish, }, [MOVE_POISON_JAB] = @@ -10011,7 +10005,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POISON_JAB, + .battleAnimScript = gBattleAnimMove_PoisonJab, }, [MOVE_DARK_PULSE] = @@ -10037,7 +10031,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DARK_PULSE, + .battleAnimScript = gBattleAnimMove_DarkPulse, }, [MOVE_NIGHT_SLASH] = @@ -10061,7 +10055,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NIGHT_SLASH, + .battleAnimScript = gBattleAnimMove_NightSlash, }, [MOVE_AQUA_TAIL] = @@ -10083,7 +10077,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_AQUA_TAIL, + .battleAnimScript = gBattleAnimMove_AquaTail, }, [MOVE_SEED_BOMB] = @@ -10105,7 +10099,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SEED_BOMB, + .battleAnimScript = gBattleAnimMove_SeedBomb, }, [MOVE_AIR_SLASH] = @@ -10131,7 +10125,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AIR_SLASH, + .battleAnimScript = gBattleAnimMove_AirSlash, }, [MOVE_X_SCISSOR] = @@ -10154,7 +10148,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SWORDS_DANCE}, - .battleAnimScript = Move_X_SCISSOR, + .battleAnimScript = gBattleAnimMove_XScissor, }, [MOVE_BUG_BUZZ] = @@ -10181,7 +10175,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BUG_BUZZ, + .battleAnimScript = gBattleAnimMove_BugBuzz, }, [MOVE_DRAGON_PULSE] = @@ -10203,7 +10197,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DRAGON_PULSE, + .battleAnimScript = gBattleAnimMove_DragonPulse, }, [MOVE_DRAGON_RUSH] = @@ -10230,7 +10224,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DRAGON_RUSH, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_TAIL}, - .battleAnimScript = Move_DRAGON_RUSH, + .battleAnimScript = gBattleAnimMove_DragonRush, }, [MOVE_POWER_GEM] = @@ -10251,7 +10245,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POWER_GEM, + .battleAnimScript = gBattleAnimMove_PowerGem, }, [MOVE_DRAIN_PUNCH] = @@ -10273,7 +10267,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, - .battleAnimScript = Move_DRAIN_PUNCH, + .battleAnimScript = gBattleAnimMove_DrainPunch, }, [MOVE_VACUUM_WAVE] = @@ -10294,7 +10288,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_VACUUM_WAVE, + .battleAnimScript = gBattleAnimMove_VacuumWave, }, [MOVE_FOCUS_BLAST] = @@ -10320,7 +10314,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY}, - .battleAnimScript = Move_FOCUS_BLAST, + .battleAnimScript = gBattleAnimMove_FocusBlast, }, [MOVE_ENERGY_BALL] = @@ -10346,7 +10340,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_ENERGY_BALL, + .battleAnimScript = gBattleAnimMove_EnergyBall, }, [MOVE_BRAVE_BIRD] = @@ -10369,7 +10363,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_BRAVE_BIRD, .contestComboMoves = {0}, - .battleAnimScript = Move_BRAVE_BIRD, + .battleAnimScript = gBattleAnimMove_BraveBird, }, [MOVE_EARTH_POWER] = @@ -10395,7 +10389,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_EARTH_POWER, + .battleAnimScript = gBattleAnimMove_EarthPower, }, [MOVE_SWITCHEROO] = @@ -10420,7 +10414,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SWITCHEROO, + .battleAnimScript = gBattleAnimMove_Switcheroo, }, [MOVE_GIGA_IMPACT] = @@ -10444,7 +10438,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GIGA_IMPACT, + .battleAnimScript = gBattleAnimMove_GigaImpact, }, [MOVE_NASTY_PLOT] = @@ -10469,7 +10463,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NASTY_PLOT, + .battleAnimScript = gBattleAnimMove_NastyPlot, }, [MOVE_BULLET_PUNCH] = @@ -10492,7 +10486,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BULLET_PUNCH, + .battleAnimScript = gBattleAnimMove_BulletPunch, }, [MOVE_AVALANCHE] = @@ -10512,7 +10506,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AVALANCHE, + .battleAnimScript = gBattleAnimMove_Avalanche, }, [MOVE_ICE_SHARD] = @@ -10533,7 +10527,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ICE_SHARD, + .battleAnimScript = gBattleAnimMove_IceShard, }, [MOVE_SHADOW_CLAW] = @@ -10556,7 +10550,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SHADOW_CLAW, + .battleAnimScript = gBattleAnimMove_ShadowClaw, }, [MOVE_THUNDER_FANG] = @@ -10587,7 +10581,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_THUNDER_FANG, .contestComboMoves = {COMBO_STARTER_CHARGE, COMBO_STARTER_FIRE_FANG, COMBO_STARTER_ICE_FANG}, - .battleAnimScript = Move_THUNDER_FANG, + .battleAnimScript = gBattleAnimMove_ThunderFang, }, [MOVE_ICE_FANG] = @@ -10596,9 +10590,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .description = COMPOUND_STRING( "May cause flinching or\n" #if B_USE_FROSTBITE == TRUE - "leave the foe frozen."), - #else "leave the foe with frostbite."), + #else + "leave the foe frozen."), #endif .effect = EFFECT_HIT, .power = 65, @@ -10622,7 +10616,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_ICE_FANG, .contestComboMoves = {COMBO_STARTER_FIRE_FANG, COMBO_STARTER_THUNDER_FANG}, - .battleAnimScript = Move_ICE_FANG, + .battleAnimScript = gBattleAnimMove_IceFang, }, [MOVE_FIRE_FANG] = @@ -10653,7 +10647,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_FIRE_FANG, .contestComboMoves = {COMBO_STARTER_ICE_FANG, COMBO_STARTER_THUNDER_FANG}, - .battleAnimScript = Move_FIRE_FANG, + .battleAnimScript = gBattleAnimMove_FireFang, }, [MOVE_SHADOW_SNEAK] = @@ -10675,7 +10669,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SHADOW_SNEAK, + .battleAnimScript = gBattleAnimMove_ShadowSneak, }, [MOVE_MUD_BOMB] = @@ -10701,7 +10695,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MUD_BOMB, + .battleAnimScript = gBattleAnimMove_MudBomb, }, [MOVE_PSYCHO_CUT] = @@ -10724,7 +10718,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PSYCHO_CUT, + .battleAnimScript = gBattleAnimMove_PsychoCut, }, [MOVE_ZEN_HEADBUTT] = @@ -10750,7 +10744,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ZEN_HEADBUTT, + .battleAnimScript = gBattleAnimMove_ZenHeadbutt, }, [MOVE_MIRROR_SHOT] = @@ -10775,7 +10769,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MIRROR_SHOT, + .battleAnimScript = gBattleAnimMove_MirrorShot, }, [MOVE_FLASH_CANNON] = @@ -10800,7 +10794,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FLASH_CANNON, + .battleAnimScript = gBattleAnimMove_FlashCannon, }, [MOVE_ROCK_CLIMB] = @@ -10826,7 +10820,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ROCK_CLIMB, + .battleAnimScript = gBattleAnimMove_RockClimb, }, [MOVE_DEFOG] = @@ -10850,7 +10844,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DEFOG, + .battleAnimScript = gBattleAnimMove_Defog, }, [MOVE_TRICK_ROOM] = @@ -10873,7 +10867,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TRICK_ROOM, + .battleAnimScript = gBattleAnimMove_TrickRoom, }, [MOVE_DRACO_METEOR] = @@ -10898,7 +10892,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DRACO_METEOR, + .battleAnimScript = gBattleAnimMove_DracoMeteor, }, [MOVE_DISCHARGE] = @@ -10923,7 +10917,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, - .battleAnimScript = Move_DISCHARGE, + .battleAnimScript = gBattleAnimMove_Discharge, }, [MOVE_LAVA_PLUME] = @@ -10946,7 +10940,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_LAVA_PLUME, + .battleAnimScript = gBattleAnimMove_LavaPlume, }, [MOVE_LEAF_STORM] = @@ -10971,7 +10965,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LEAF_STORM, + .battleAnimScript = gBattleAnimMove_LeafStorm, }, [MOVE_POWER_WHIP] = @@ -10993,7 +10987,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_POWER_WHIP, + .battleAnimScript = gBattleAnimMove_PowerWhip, }, [MOVE_ROCK_WRECKER] = @@ -11017,7 +11011,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ROCK_WRECKER, + .battleAnimScript = gBattleAnimMove_RockWrecker, }, [MOVE_CROSS_POISON] = @@ -11045,7 +11039,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CROSS_POISON, + .battleAnimScript = gBattleAnimMove_CrossPoison, }, [MOVE_GUNK_SHOT] = @@ -11070,7 +11064,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GUNK_SHOT, + .battleAnimScript = gBattleAnimMove_GunkShot, }, [MOVE_IRON_HEAD] = @@ -11096,7 +11090,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_IRON_HEAD, + .battleAnimScript = gBattleAnimMove_IronHead, }, [MOVE_MAGNET_BOMB] = @@ -11118,7 +11112,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MAGNET_BOMB, + .battleAnimScript = gBattleAnimMove_MagnetBomb, }, [MOVE_STONE_EDGE] = @@ -11140,7 +11134,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STONE_EDGE, + .battleAnimScript = gBattleAnimMove_StoneEdge, }, [MOVE_CAPTIVATE] = @@ -11163,7 +11157,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARM}, - .battleAnimScript = Move_CAPTIVATE, + .battleAnimScript = gBattleAnimMove_Captivate, }, [MOVE_STEALTH_ROCK] = @@ -11189,7 +11183,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STEALTH_ROCK, + .battleAnimScript = gBattleAnimMove_StealthRock, }, [MOVE_GRASS_KNOT] = @@ -11212,7 +11206,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GRASS_KNOT, + .battleAnimScript = gBattleAnimMove_GrassKnot, }, [MOVE_CHATTER] = @@ -11252,7 +11246,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CHATTER, + .battleAnimScript = gBattleAnimMove_Chatter, }, [MOVE_JUDGMENT] = @@ -11274,7 +11268,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_JUDGMENT, + .battleAnimScript = gBattleAnimMove_Judgment, }, [MOVE_BUG_BITE] = @@ -11297,7 +11291,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BUG_BITE, + .battleAnimScript = gBattleAnimMove_BugBite, }, [MOVE_CHARGE_BEAM] = @@ -11323,7 +11317,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, - .battleAnimScript = Move_CHARGE_BEAM, + .battleAnimScript = gBattleAnimMove_ChargeBeam, }, [MOVE_WOOD_HAMMER] = @@ -11346,7 +11340,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WOOD_HAMMER, + .battleAnimScript = gBattleAnimMove_WoodHammer, }, [MOVE_AQUA_JET] = @@ -11368,7 +11362,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_AQUA_JET, + .battleAnimScript = gBattleAnimMove_AquaJet, }, [MOVE_ATTACK_ORDER] = @@ -11390,7 +11384,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_ATTACK_ORDER, .contestComboMoves = {COMBO_STARTER_DEFEND_ORDER, COMBO_STARTER_HEAL_ORDER}, - .battleAnimScript = Move_ATTACK_ORDER, + .battleAnimScript = gBattleAnimMove_AttackOrder, }, [MOVE_DEFEND_ORDER] = @@ -11415,7 +11409,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_DEFEND_ORDER, .contestComboMoves = {COMBO_STARTER_ATTACK_ORDER, COMBO_STARTER_HEAL_ORDER}, - .battleAnimScript = Move_DEFEND_ORDER, + .battleAnimScript = gBattleAnimMove_DefendOrder, }, [MOVE_HEAL_ORDER] = @@ -11441,7 +11435,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_HEAL_ORDER, .contestComboMoves = {COMBO_STARTER_ATTACK_ORDER, COMBO_STARTER_DEFEND_ORDER}, - .battleAnimScript = Move_HEAL_ORDER, + .battleAnimScript = gBattleAnimMove_HealOrder, }, [MOVE_HEAD_SMASH] = @@ -11464,7 +11458,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HEAD_SMASH, + .battleAnimScript = gBattleAnimMove_HeadSmash, }, [MOVE_DOUBLE_HIT] = @@ -11487,7 +11481,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DOUBLE_HIT, + .battleAnimScript = gBattleAnimMove_DoubleHit, }, [MOVE_ROAR_OF_TIME] = @@ -11512,7 +11506,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ROAR_OF_TIME, + .battleAnimScript = gBattleAnimMove_RoarOfTime, }, [MOVE_SPACIAL_REND] = @@ -11534,7 +11528,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SPACIAL_REND, + .battleAnimScript = gBattleAnimMove_SpacialRend, }, [MOVE_LUNAR_DANCE] = @@ -11558,7 +11552,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LUNAR_DANCE, + .battleAnimScript = gBattleAnimMove_LunarDance, }, [MOVE_CRUSH_GRIP] = @@ -11579,7 +11573,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CRUSH_GRIP, + .battleAnimScript = gBattleAnimMove_CrushGrip, }, [MOVE_MAGMA_STORM] = @@ -11603,7 +11597,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_MAGMA_STORM, + .battleAnimScript = gBattleAnimMove_MagmaStorm, }, [MOVE_DARK_VOID] = @@ -11627,7 +11621,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DARK_VOID, + .battleAnimScript = gBattleAnimMove_DarkVoid, }, [MOVE_SEED_FLARE] = @@ -11652,7 +11646,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SEED_FLARE, + .battleAnimScript = gBattleAnimMove_SeedFlare, }, [MOVE_OMINOUS_WIND] = @@ -11679,7 +11673,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_OMINOUS_WIND, + .battleAnimScript = gBattleAnimMove_OminousWind, }, [MOVE_SHADOW_FORCE] = @@ -11708,7 +11702,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SHADOW_FORCE, + .battleAnimScript = gBattleAnimMove_ShadowForce, }, [MOVE_HONE_CLAWS] = @@ -11733,7 +11727,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HONE_CLAWS, + .battleAnimScript = gBattleAnimMove_HoneClaws, }, [MOVE_WIDE_GUARD] = @@ -11760,7 +11754,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WIDE_GUARD, + .battleAnimScript = gBattleAnimMove_WideGuard, }, [MOVE_GUARD_SPLIT] = @@ -11783,7 +11777,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GUARD_SPLIT, + .battleAnimScript = gBattleAnimMove_GuardSplit, }, [MOVE_POWER_SPLIT] = @@ -11806,7 +11800,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POWER_SPLIT, + .battleAnimScript = gBattleAnimMove_PowerSplit, }, [MOVE_WONDER_ROOM] = @@ -11829,7 +11823,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WONDER_ROOM, + .battleAnimScript = gBattleAnimMove_WonderRoom, }, [MOVE_PSYSHOCK] = @@ -11848,7 +11842,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PSYSHOCK, + .battleAnimScript = gBattleAnimMove_Psyshock, }, [MOVE_VENOSHOCK] = @@ -11870,7 +11864,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TOXIC}, - .battleAnimScript = Move_VENOSHOCK, + .battleAnimScript = gBattleAnimMove_Venoshock, }, [MOVE_AUTOTOMIZE] = @@ -11895,7 +11889,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AUTOTOMIZE, + .battleAnimScript = gBattleAnimMove_Autotomize, }, [MOVE_RAGE_POWDER] = @@ -11923,7 +11917,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_RAGE_POWDER, + .battleAnimScript = gBattleAnimMove_RagePowder, }, [MOVE_TELEKINESIS] = @@ -11947,7 +11941,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TELEKINESIS, + .battleAnimScript = gBattleAnimMove_Telekinesis, }, [MOVE_MAGIC_ROOM] = @@ -11970,7 +11964,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MAGIC_ROOM, + .battleAnimScript = gBattleAnimMove_MagicRoom, }, [MOVE_SMACK_DOWN] = @@ -11996,7 +11990,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SMACK_DOWN, + .battleAnimScript = gBattleAnimMove_SmackDown, }, [MOVE_STORM_THROW] = @@ -12017,7 +12011,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STORM_THROW, + .battleAnimScript = gBattleAnimMove_StormThrow, }, [MOVE_FLAME_BURST] = @@ -12042,7 +12036,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FLAME_BURST, + .battleAnimScript = gBattleAnimMove_FlameBurst, }, [MOVE_SLUDGE_WAVE] = @@ -12067,7 +12061,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SLUDGE_WAVE, + .battleAnimScript = gBattleAnimMove_SludgeWave, }, [MOVE_QUIVER_DANCE] = @@ -12093,7 +12087,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_QUIVER_DANCE, + .battleAnimScript = gBattleAnimMove_QuiverDance, }, [MOVE_HEAVY_SLAM] = @@ -12115,7 +12109,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HEAVY_SLAM, + .battleAnimScript = gBattleAnimMove_HeavySlam, }, [MOVE_SYNCHRONOISE] = @@ -12136,7 +12130,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SYNCHRONOISE, + .battleAnimScript = gBattleAnimMove_Synchronoise, }, [MOVE_ELECTRO_BALL] = @@ -12158,7 +12152,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ELECTRO_BALL, + .battleAnimScript = gBattleAnimMove_ElectroBall, }, [MOVE_SOAK] = @@ -12181,7 +12175,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SOAK, + .battleAnimScript = gBattleAnimMove_Soak, }, [MOVE_FLAME_CHARGE] = @@ -12208,7 +12202,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FLAME_CHARGE, + .battleAnimScript = gBattleAnimMove_FlameCharge, }, [MOVE_COIL] = @@ -12233,7 +12227,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_COIL, + .battleAnimScript = gBattleAnimMove_Coil, }, [MOVE_LOW_SWEEP] = @@ -12259,7 +12253,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LOW_SWEEP, + .battleAnimScript = gBattleAnimMove_LowSweep, }, [MOVE_ACID_SPRAY] = @@ -12285,7 +12279,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ACID_SPRAY, + .battleAnimScript = gBattleAnimMove_AcidSpray, }, [MOVE_FOUL_PLAY] = @@ -12307,7 +12301,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FOUL_PLAY, + .battleAnimScript = gBattleAnimMove_FoulPlay, }, [MOVE_SIMPLE_BEAM] = @@ -12330,7 +12324,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SIMPLE_BEAM, + .battleAnimScript = gBattleAnimMove_SimpleBeam, }, [MOVE_ENTRAINMENT] = @@ -12353,7 +12347,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ENTRAINMENT, + .battleAnimScript = gBattleAnimMove_Entrainment, }, [MOVE_AFTER_YOU] = @@ -12379,7 +12373,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AFTER_YOU, + .battleAnimScript = gBattleAnimMove_AfterYou, }, [MOVE_ROUND] = @@ -12405,7 +12399,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ROUND, + .battleAnimScript = gBattleAnimMove_Round, }, [MOVE_ECHOED_VOICE] = @@ -12428,7 +12422,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ECHOED_VOICE, + .battleAnimScript = gBattleAnimMove_EchoedVoice, }, [MOVE_CHIP_AWAY] = @@ -12449,7 +12443,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CHIP_AWAY, + .battleAnimScript = gBattleAnimMove_ChipAway, }, [MOVE_CLEAR_SMOG] = @@ -12473,7 +12467,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CLEAR_SMOG, + .battleAnimScript = gBattleAnimMove_ClearSmog, }, [MOVE_STORED_POWER] = @@ -12494,7 +12488,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STORED_POWER, + .battleAnimScript = gBattleAnimMove_StoredPower, }, [MOVE_QUICK_GUARD] = @@ -12521,7 +12515,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_QUICK_GUARD, + .battleAnimScript = gBattleAnimMove_QuickGuard, }, [MOVE_ALLY_SWITCH] = @@ -12545,7 +12539,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ALLY_SWITCH, + .battleAnimScript = gBattleAnimMove_AllySwitch, }, [MOVE_SCALD] = @@ -12571,7 +12565,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SCALD, .contestComboMoves = {0}, - .battleAnimScript = Move_SCALD, + .battleAnimScript = gBattleAnimMove_Scald, }, [MOVE_SHELL_SMASH] = @@ -12596,7 +12590,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SHELL_SMASH, + .battleAnimScript = gBattleAnimMove_ShellSmash, }, [MOVE_HEAL_PULSE] = @@ -12622,7 +12616,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HEAL_PULSE, + .battleAnimScript = gBattleAnimMove_HealPulse, }, [MOVE_HEX] = @@ -12645,7 +12639,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TOXIC}, - .battleAnimScript = Move_HEX, + .battleAnimScript = gBattleAnimMove_Hex, }, [MOVE_SKY_DROP] = @@ -12672,7 +12666,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SKY_DROP, + .battleAnimScript = gBattleAnimMove_SkyDrop, }, [MOVE_SHIFT_GEAR] = @@ -12697,7 +12691,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SHIFT_GEAR, + .battleAnimScript = gBattleAnimMove_ShiftGear, }, [MOVE_CIRCLE_THROW] = @@ -12719,7 +12713,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CIRCLE_THROW, + .battleAnimScript = gBattleAnimMove_CircleThrow, }, [MOVE_INCINERATE] = @@ -12743,7 +12737,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_INCINERATE, + .battleAnimScript = gBattleAnimMove_Incinerate, }, [MOVE_QUASH] = @@ -12766,7 +12760,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_QUASH, + .battleAnimScript = gBattleAnimMove_Quash, }, [MOVE_ACROBATICS] = @@ -12788,7 +12782,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ACROBATICS, + .battleAnimScript = gBattleAnimMove_Acrobatics, }, [MOVE_REFLECT_TYPE] = @@ -12812,7 +12806,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_REFLECT_TYPE, + .battleAnimScript = gBattleAnimMove_ReflectType, }, [MOVE_RETALIATE] = @@ -12834,7 +12828,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_RETALIATE, + .battleAnimScript = gBattleAnimMove_Retaliate, }, [MOVE_FINAL_GAMBIT] = @@ -12857,7 +12851,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FINAL_GAMBIT, + .battleAnimScript = gBattleAnimMove_FinalGambit, }, [MOVE_BESTOW] = @@ -12884,7 +12878,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BESTOW, + .battleAnimScript = gBattleAnimMove_Bestow, }, [MOVE_INFERNO] = @@ -12909,7 +12903,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_INFERNO, + .battleAnimScript = gBattleAnimMove_Inferno, }, [MOVE_WATER_PLEDGE] = @@ -12931,7 +12925,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WATER_PLEDGE, + .battleAnimScript = gBattleAnimMove_WaterPledge, }, [MOVE_FIRE_PLEDGE] = @@ -12953,7 +12947,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FIRE_PLEDGE, + .battleAnimScript = gBattleAnimMove_FirePledge, }, [MOVE_GRASS_PLEDGE] = @@ -12975,7 +12969,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GRASS_PLEDGE, + .battleAnimScript = gBattleAnimMove_GrassPledge, }, [MOVE_VOLT_SWITCH] = @@ -12994,7 +12988,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_VOLT_SWITCH, + .battleAnimScript = gBattleAnimMove_VoltSwitch, }, [MOVE_STRUGGLE_BUG] = @@ -13019,7 +13013,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STRUGGLE_BUG, + .battleAnimScript = gBattleAnimMove_StruggleBug, }, [MOVE_BULLDOZE] = @@ -13045,7 +13039,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BULLDOZE, + .battleAnimScript = gBattleAnimMove_Bulldoze, }, [MOVE_FROST_BREATH] = @@ -13065,7 +13059,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FROST_BREATH, + .battleAnimScript = gBattleAnimMove_FrostBreath, }, [MOVE_DRAGON_TAIL] = @@ -13087,7 +13081,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = COMBO_STARTER_DRAGON_TAIL, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH}, - .battleAnimScript = Move_DRAGON_TAIL, + .battleAnimScript = gBattleAnimMove_DragonTail, }, [MOVE_WORK_UP] = @@ -13112,7 +13106,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WORK_UP, + .battleAnimScript = gBattleAnimMove_WorkUp, }, [MOVE_ELECTROWEB] = @@ -13137,7 +13131,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ELECTROWEB, + .battleAnimScript = gBattleAnimMove_Electroweb, }, [MOVE_WILD_CHARGE] = @@ -13160,7 +13154,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WILD_CHARGE, + .battleAnimScript = gBattleAnimMove_WildCharge, }, [MOVE_DRILL_RUN] = @@ -13183,7 +13177,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DRILL_RUN, + .battleAnimScript = gBattleAnimMove_DrillRun, }, [MOVE_DUAL_CHOP] = @@ -13206,7 +13200,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DUAL_CHOP, + .battleAnimScript = gBattleAnimMove_DualChop, }, [MOVE_HEART_STAMP] = @@ -13232,7 +13226,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HEART_STAMP, + .battleAnimScript = gBattleAnimMove_HeartStamp, }, [MOVE_HORN_LEECH] = @@ -13253,7 +13247,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HORN_LEECH, + .battleAnimScript = gBattleAnimMove_HornLeech, }, [MOVE_SACRED_SWORD] = @@ -13275,7 +13269,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SACRED_SWORD, + .battleAnimScript = gBattleAnimMove_SacredSword, }, [MOVE_RAZOR_SHELL] = @@ -13302,7 +13296,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_RAZOR_SHELL, + .battleAnimScript = gBattleAnimMove_RazorShell, }, [MOVE_HEAT_CRASH] = @@ -13323,7 +13317,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HEAT_CRASH, + .battleAnimScript = gBattleAnimMove_HeatCrash, }, [MOVE_LEAF_TORNADO] = @@ -13349,7 +13343,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LEAF_TORNADO, + .battleAnimScript = gBattleAnimMove_LeafTornado, }, [MOVE_STEAMROLLER] = @@ -13376,7 +13370,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STEAMROLLER, + .battleAnimScript = gBattleAnimMove_Steamroller, }, [MOVE_COTTON_GUARD] = @@ -13401,7 +13395,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_COTTON_GUARD, + .battleAnimScript = gBattleAnimMove_CottonGuard, }, [MOVE_NIGHT_DAZE] = @@ -13426,7 +13420,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NIGHT_DAZE, + .battleAnimScript = gBattleAnimMove_NightDaze, }, [MOVE_PSYSTRIKE] = @@ -13445,7 +13439,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PSYSTRIKE, + .battleAnimScript = gBattleAnimMove_Psystrike, }, [MOVE_TAIL_SLAP] = @@ -13467,7 +13461,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TAIL_SLAP, + .battleAnimScript = gBattleAnimMove_TailSlap, }, [MOVE_HURRICANE] = @@ -13494,7 +13488,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HURRICANE, + .battleAnimScript = gBattleAnimMove_Hurricane, }, [MOVE_HEAD_CHARGE] = @@ -13517,7 +13511,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HEAD_CHARGE, + .battleAnimScript = gBattleAnimMove_HeadCharge, }, [MOVE_GEAR_GRIND] = @@ -13541,7 +13535,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GEAR_GRIND, + .battleAnimScript = gBattleAnimMove_GearGrind, }, [MOVE_SEARING_SHOT] = @@ -13565,7 +13559,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SEARING_SHOT, + .battleAnimScript = gBattleAnimMove_SearingShot, }, [MOVE_TECHNO_BLAST] = @@ -13588,7 +13582,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TECHNO_BLAST, + .battleAnimScript = gBattleAnimMove_TechnoBlast, }, [MOVE_RELIC_SONG] = @@ -13617,7 +13611,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_RELIC_SONG, + .battleAnimScript = gBattleAnimMove_RelicSong, }, [MOVE_SECRET_SWORD] = @@ -13640,7 +13634,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SECRET_SWORD, + .battleAnimScript = gBattleAnimMove_SecretSword, }, [MOVE_GLACIATE] = @@ -13665,7 +13659,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GLACIATE, + .battleAnimScript = gBattleAnimMove_Glaciate, }, [MOVE_BOLT_STRIKE] = @@ -13691,7 +13685,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BOLT_STRIKE, + .battleAnimScript = gBattleAnimMove_BoltStrike, }, [MOVE_BLUE_FLARE] = @@ -13716,7 +13710,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BLUE_FLARE, + .battleAnimScript = gBattleAnimMove_BlueFlare, }, [MOVE_FIERY_DANCE] = @@ -13743,7 +13737,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FIERY_DANCE, + .battleAnimScript = gBattleAnimMove_FieryDance, }, [MOVE_FREEZE_SHOCK] = @@ -13772,7 +13766,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FREEZE_SHOCK, + .battleAnimScript = gBattleAnimMove_FreezeShock, }, [MOVE_ICE_BURN] = @@ -13801,7 +13795,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ICE_BURN, + .battleAnimScript = gBattleAnimMove_IceBurn, }, [MOVE_SNARL] = @@ -13829,7 +13823,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SNARL, + .battleAnimScript = gBattleAnimMove_Snarl, }, [MOVE_ICICLE_CRASH] = @@ -13854,7 +13848,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ICICLE_CRASH, + .battleAnimScript = gBattleAnimMove_IcicleCrash, }, [MOVE_V_CREATE] = @@ -13882,7 +13876,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_V_CREATE, + .battleAnimScript = gBattleAnimMove_VCreate, }, [MOVE_FUSION_FLARE] = @@ -13904,7 +13898,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FUSION_FLARE, + .battleAnimScript = gBattleAnimMove_FusionFlare, }, [MOVE_FUSION_BOLT] = @@ -13925,7 +13919,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FUSION_BOLT, + .battleAnimScript = gBattleAnimMove_FusionBolt, }, [MOVE_FLYING_PRESS] = @@ -13952,7 +13946,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FLYING_PRESS, + .battleAnimScript = gBattleAnimMove_FlyingPress, }, [MOVE_MAT_BLOCK] = @@ -13982,7 +13976,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MAT_BLOCK, + .battleAnimScript = gBattleAnimMove_MatBlock, }, [MOVE_BELCH] = @@ -14011,7 +14005,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BELCH, + .battleAnimScript = gBattleAnimMove_Belch, }, [MOVE_ROTOTILLER] = @@ -14036,7 +14030,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ROTOTILLER, + .battleAnimScript = gBattleAnimMove_Rototiller, }, [MOVE_STICKY_WEB] = @@ -14062,7 +14056,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STICKY_WEB, + .battleAnimScript = gBattleAnimMove_StickyWeb, }, [MOVE_FELL_STINGER] = @@ -14084,12 +14078,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FELL_STINGER, + .battleAnimScript = gBattleAnimMove_FellStinger, }, [MOVE_PHANTOM_FORCE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PhantomForce", "Phantom Force"), + .name = COMPOUND_STRING("Phantom Force"), .description = sShadowForceDescription, .effect = EFFECT_SEMI_INVULNERABLE, .power = 90, @@ -14113,12 +14107,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PHANTOM_FORCE, + .battleAnimScript = gBattleAnimMove_PhantomForce, }, [MOVE_TRICK_OR_TREAT] = { - .name = HANDLE_EXPANDED_MOVE_NAME("TrickOrTreat", "Trick-or-Treat"), + .name = COMPOUND_STRING("Trick-or-Treat"), .description = COMPOUND_STRING( "Goes trick-or-treating\n" "making the foe Ghost-type."), @@ -14137,7 +14131,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TRICK_OR_TREAT, + .battleAnimScript = gBattleAnimMove_TrickOrTreat, }, [MOVE_NOBLE_ROAR] = @@ -14162,7 +14156,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NOBLE_ROAR, + .battleAnimScript = gBattleAnimMove_NobleRoar, }, [MOVE_ION_DELUGE] = @@ -14186,12 +14180,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ION_DELUGE, + .battleAnimScript = gBattleAnimMove_IonDeluge, }, [MOVE_PARABOLIC_CHARGE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ParabolcChrg", "Parabolic Charge"), + .name = COMPOUND_STRING("Parabolic Charge"), .description = COMPOUND_STRING( "Damages adjacent Pokémon and\n" "heals up by half of it."), @@ -14208,12 +14202,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PARABOLIC_CHARGE, + .battleAnimScript = gBattleAnimMove_ParabolicCharge, }, [MOVE_FORESTS_CURSE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("Forest'sCurs", "Forest's Curse"), + .name = COMPOUND_STRING("Forest's Curse"), .description = COMPOUND_STRING( "Puts a curse on the foe\n" "making the foe Grass-type."), @@ -14232,12 +14226,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FORESTS_CURSE, + .battleAnimScript = gBattleAnimMove_ForestsCurse, }, [MOVE_PETAL_BLIZZARD] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PetalBlizzrd", "Petal Blizzard"), + .name = COMPOUND_STRING("Petal Blizzard"), .description = COMPOUND_STRING( "Stirs up a violent storm\n" "of petals to attack."), @@ -14254,7 +14248,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PETAL_BLIZZARD, + .battleAnimScript = gBattleAnimMove_PetalBlizzard, }, [MOVE_FREEZE_DRY] = @@ -14284,12 +14278,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FREEZE_DRY, + .battleAnimScript = gBattleAnimMove_FreezeDry, }, [MOVE_DISARMING_VOICE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DisrmngVoice", "Disarming Voice"), + .name = COMPOUND_STRING("Disarming Voice"), .description = COMPOUND_STRING( "Lets out a charming cry\n" "that cannot be evaded."), @@ -14307,7 +14301,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DISARMING_VOICE, + .battleAnimScript = gBattleAnimMove_DisarmingVoice, }, [MOVE_PARTING_SHOT] = @@ -14332,7 +14326,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PARTING_SHOT, + .battleAnimScript = gBattleAnimMove_PartingShot, }, [MOVE_TOPSY_TURVY] = @@ -14355,12 +14349,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TOPSY_TURVY, + .battleAnimScript = gBattleAnimMove_TopsyTurvy, }, [MOVE_DRAINING_KISS] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DrainingKiss", "Draining Kiss"), + .name = COMPOUND_STRING("Draining Kiss"), .description = sDrainingKissDescription, .effect = EFFECT_ABSORB, .power = 50, @@ -14377,12 +14371,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DRAINING_KISS, + .battleAnimScript = gBattleAnimMove_DrainingKiss, }, [MOVE_CRAFTY_SHIELD] = { - .name = HANDLE_EXPANDED_MOVE_NAME("CraftyShield", "Crafty Shield"), + .name = COMPOUND_STRING("Crafty Shield"), .description = COMPOUND_STRING( "Evades status moves for\n" "one turn."), @@ -14403,12 +14397,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CRAFTY_SHIELD, + .battleAnimScript = gBattleAnimMove_CraftyShield, }, [MOVE_FLOWER_SHIELD] = { - .name = HANDLE_EXPANDED_MOVE_NAME("FlowerShield", "Flower Shield"), + .name = COMPOUND_STRING("Flower Shield"), .description = COMPOUND_STRING( "Raises the Defense of\n" "Grass-type Pokémon."), @@ -14427,12 +14421,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FLOWER_SHIELD, + .battleAnimScript = gBattleAnimMove_FlowerShield, }, [MOVE_GRASSY_TERRAIN] = { - .name = HANDLE_EXPANDED_MOVE_NAME("GrssyTerrain", "Grassy Terrain"), + .name = COMPOUND_STRING("Grassy Terrain"), .description = COMPOUND_STRING( "The ground turns to grass\n" "for 5 turns. Restores HP."), @@ -14452,12 +14446,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_GRASSY_TERRAIN, .contestComboMoves = {0}, - .battleAnimScript = Move_GRASSY_TERRAIN, + .battleAnimScript = gBattleAnimMove_GrassyTerrain, }, [MOVE_MISTY_TERRAIN] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MistyTerrain", "Misty Terrain"), + .name = COMPOUND_STRING("Misty Terrain"), .description = COMPOUND_STRING( "Covers the ground with mist\n" "for 5 turns. Blocks status."), @@ -14477,7 +14471,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = COMBO_STARTER_MISTY_TERRAIN, .contestComboMoves = {0}, - .battleAnimScript = Move_MISTY_TERRAIN, + .battleAnimScript = gBattleAnimMove_MistyTerrain, }, [MOVE_ELECTRIFY] = @@ -14499,7 +14493,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ELECTRIFY, + .battleAnimScript = gBattleAnimMove_Electrify, }, [MOVE_PLAY_ROUGH] = @@ -14525,7 +14519,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PLAY_ROUGH, + .battleAnimScript = gBattleAnimMove_PlayRough, }, [MOVE_FAIRY_WIND] = @@ -14547,7 +14541,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FAIRY_WIND, + .battleAnimScript = gBattleAnimMove_FairyWind, }, [MOVE_MOONBLAST] = @@ -14572,7 +14566,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MOONBLAST, + .battleAnimScript = gBattleAnimMove_Moonblast, }, [MOVE_BOOMBURST] = @@ -14595,7 +14589,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BOOMBURST, + .battleAnimScript = gBattleAnimMove_Boomburst, }, [MOVE_FAIRY_LOCK] = @@ -14619,12 +14613,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FAIRY_LOCK, + .battleAnimScript = gBattleAnimMove_FairyLock, }, [MOVE_KINGS_SHIELD] = { - .name = HANDLE_EXPANDED_MOVE_NAME("King'sShield", "King's Shield"), + .name = COMPOUND_STRING("King's Shield"), .description = COMPOUND_STRING( "Evades damage, and sharply\n" "reduces Attack if struck."), @@ -14647,7 +14641,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_KINGS_SHIELD, + .battleAnimScript = gBattleAnimMove_KingsShield, }, [MOVE_PLAY_NICE] = @@ -14672,7 +14666,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PLAY_NICE, + .battleAnimScript = gBattleAnimMove_PlayNice, }, [MOVE_CONFIDE] = @@ -14698,12 +14692,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CONFIDE, + .battleAnimScript = gBattleAnimMove_Confide, }, [MOVE_DIAMOND_STORM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DiamondStorm", "Diamond Storm"), + .name = COMPOUND_STRING("Diamond Storm"), .description = COMPOUND_STRING( "Whips up a storm of\n" "diamonds. May up Defense."), @@ -14725,12 +14719,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DIAMOND_STORM, + .battleAnimScript = gBattleAnimMove_DiamondStorm, }, [MOVE_STEAM_ERUPTION] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SteamErption", "Steam Eruption"), + .name = COMPOUND_STRING("Steam Eruption"), .description = COMPOUND_STRING( "Immerses the foe in heated\n" "steam. May inflict a burn."), @@ -14752,12 +14746,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCALD}, - .battleAnimScript = Move_STEAM_ERUPTION, + .battleAnimScript = gBattleAnimMove_SteamEruption, }, [MOVE_HYPERSPACE_HOLE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("HyprspceHole", "Hyperspace Hole"), + .name = COMPOUND_STRING("Hyperspace Hole"), .description = sHyperspaceHoleDescription, .effect = EFFECT_HIT, .power = 80, @@ -14777,12 +14771,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_HYPERSPACE_HOLE, .contestComboMoves = {COMBO_STARTER_HYPERSPACE_FURY}, - .battleAnimScript = Move_HYPERSPACE_HOLE, + .battleAnimScript = gBattleAnimMove_HyperspaceHole, }, [MOVE_WATER_SHURIKEN] = { - .name = HANDLE_EXPANDED_MOVE_NAME("WatrShuriken", "Water Shuriken"), + .name = COMPOUND_STRING("Water Shuriken"), .description = COMPOUND_STRING( "Throws 2 to 5 stars that\n" "are sure to strike first."), @@ -14798,12 +14792,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WATER_SHURIKEN, + .battleAnimScript = gBattleAnimMove_WaterShuriken, }, [MOVE_MYSTICAL_FIRE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MysticalFire", "Mystical Fire"), + .name = COMPOUND_STRING("Mystical Fire"), .description = COMPOUND_STRING( "Breathes a special, hot\n" "fire. Lowers Sp. Atk."), @@ -14823,7 +14817,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MYSTICAL_FIRE, + .battleAnimScript = gBattleAnimMove_MysticalFire, }, [MOVE_SPIKY_SHIELD] = @@ -14850,12 +14844,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SPIKY_SHIELD, + .battleAnimScript = gBattleAnimMove_SpikyShield, }, [MOVE_AROMATIC_MIST] = { - .name = HANDLE_EXPANDED_MOVE_NAME("AromaticMist", "Aromatic Mist"), + .name = COMPOUND_STRING("Aromatic Mist"), .description = COMPOUND_STRING( "Raises the Sp. Def of a\n" "partner Pokémon."), @@ -14875,12 +14869,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AROMATIC_MIST, + .battleAnimScript = gBattleAnimMove_AromaticMist, }, [MOVE_EERIE_IMPULSE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("EerieImpulse", "Eerie Impulse"), + .name = COMPOUND_STRING("Eerie Impulse"), .description = COMPOUND_STRING( "Exposes the foe to a pulse\n" "that sharply cuts Sp. Atk."), @@ -14898,7 +14892,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_EERIE_IMPULSE, + .battleAnimScript = gBattleAnimMove_EerieImpulse, }, [MOVE_VENOM_DRENCH] = @@ -14921,7 +14915,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TOXIC}, - .battleAnimScript = Move_VENOM_DRENCH, + .battleAnimScript = gBattleAnimMove_VenomDrench, }, [MOVE_POWDER] = @@ -14945,7 +14939,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POWDER, + .battleAnimScript = gBattleAnimMove_Powder, }, [MOVE_GEOMANCY] = @@ -14971,12 +14965,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GEOMANCY, + .battleAnimScript = gBattleAnimMove_Geomancy, }, [MOVE_MAGNETIC_FLUX] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MagneticFlux", "Magnetic Flux"), + .name = COMPOUND_STRING("Magnetic Flux"), .description = COMPOUND_STRING( "Boosts the defenses of\n" "those with Plus or Minus."), @@ -14997,7 +14991,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MAGNETIC_FLUX, + .battleAnimScript = gBattleAnimMove_MagneticFlux, }, [MOVE_HAPPY_HOUR] = @@ -15021,12 +15015,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HAPPY_HOUR, + .battleAnimScript = gBattleAnimMove_HappyHour, }, [MOVE_ELECTRIC_TERRAIN] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ElctrcTrrain", "Electric Terrain"), + .name = COMPOUND_STRING("Electric Terrain"), .description = COMPOUND_STRING( "Electrifies the ground for\n" "5 turns. Prevents sleep."), @@ -15046,12 +15040,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = COMBO_STARTER_ELECTRIC_TERRAIN, .contestComboMoves = {0}, - .battleAnimScript = Move_ELECTRIC_TERRAIN, + .battleAnimScript = gBattleAnimMove_ElectricTerrain, }, [MOVE_DAZZLING_GLEAM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DazzlngGleam", "Dazzling Gleam"), + .name = COMPOUND_STRING("Dazzling Gleam"), .description = COMPOUND_STRING( "Damages foes by emitting\n" "a bright flash."), @@ -15067,7 +15061,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DAZZLING_GLEAM, + .battleAnimScript = gBattleAnimMove_DazzlingGleam, }, [MOVE_CELEBRATE] = @@ -15097,7 +15091,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CELEBRATE, + .battleAnimScript = gBattleAnimMove_Celebrate, }, [MOVE_HOLD_HANDS] = @@ -15127,12 +15121,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HOLD_HANDS, + .battleAnimScript = gBattleAnimMove_HoldHands, }, [MOVE_BABY_DOLL_EYES] = { - .name = HANDLE_EXPANDED_MOVE_NAME("BabyDollEyes", "Baby-Doll Eyes"), + .name = COMPOUND_STRING("Baby-Doll Eyes"), .description = COMPOUND_STRING( "Lowers the foe's Attack\n" "before it can move."), @@ -15150,7 +15144,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BABY_DOLL_EYES, + .battleAnimScript = gBattleAnimMove_BabyDollEyes, }, [MOVE_NUZZLE] = @@ -15176,7 +15170,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NUZZLE, + .battleAnimScript = gBattleAnimMove_Nuzzle, }, [MOVE_HOLD_BACK] = @@ -15196,7 +15190,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HOLD_BACK, + .battleAnimScript = gBattleAnimMove_HoldBack, }, [MOVE_INFESTATION] = @@ -15221,12 +15215,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_INFESTATION, + .battleAnimScript = gBattleAnimMove_Infestation, }, [MOVE_POWER_UP_PUNCH] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PowerUpPunch", "Power-Up Punch"), + .name = COMPOUND_STRING("Power-Up Punch"), .description = COMPOUND_STRING( "A hard punch that raises\n" "the user's Attack."), @@ -15249,12 +15243,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POWER_UP_PUNCH, + .battleAnimScript = gBattleAnimMove_PowerUpPunch, }, [MOVE_OBLIVION_WING] = { - .name = HANDLE_EXPANDED_MOVE_NAME("OblivionWing", "Oblivion Wing"), + .name = COMPOUND_STRING("Oblivion Wing"), .description = sDrainingKissDescription, .effect = EFFECT_ABSORB, .power = 80, @@ -15270,12 +15264,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_OBLIVION_WING, + .battleAnimScript = gBattleAnimMove_OblivionWing, }, [MOVE_THOUSAND_ARROWS] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ThousndArrws", "Thousand Arrows"), + .name = COMPOUND_STRING("Thousand Arrows"), .description = COMPOUND_STRING( "Can hit Flying foes, then\n" "knocks them to the ground."), @@ -15298,12 +15292,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_THOUSAND_ARROWS, .contestComboMoves = {COMBO_STARTER_THOUSAND_WAVES}, - .battleAnimScript = Move_THOUSAND_ARROWS, + .battleAnimScript = gBattleAnimMove_ThousandArrows, }, [MOVE_THOUSAND_WAVES] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ThousndWaves", "Thousand Waves"), + .name = COMPOUND_STRING("Thousand Waves"), .description = COMPOUND_STRING( "Those hit by the wave can\n" "no longer escape."), @@ -15324,7 +15318,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_THOUSAND_WAVES, .contestComboMoves = {COMBO_STARTER_THOUSAND_ARROWS}, - .battleAnimScript = Move_THOUSAND_WAVES, + .battleAnimScript = gBattleAnimMove_ThousandWaves, }, [MOVE_LANDS_WRATH] = @@ -15346,12 +15340,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LANDS_WRATH, + .battleAnimScript = gBattleAnimMove_LandsWrath, }, [MOVE_LIGHT_OF_RUIN] = { - .name = HANDLE_EXPANDED_MOVE_NAME("LightOfRuin", "Light Of Ruin"), + .name = COMPOUND_STRING("Light Of Ruin"), .description = COMPOUND_STRING( "Fires a great beam of light\n" "that also hurts the user."), @@ -15365,7 +15359,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .metronomeBanned = TRUE, - .battleAnimScript = Move_LIGHT_OF_RUIN, + .battleAnimScript = gBattleAnimMove_LightOfRuin, }, [MOVE_ORIGIN_PULSE] = @@ -15388,12 +15382,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ORIGIN_PULSE, + .battleAnimScript = gBattleAnimMove_OriginPulse, }, [MOVE_PRECIPICE_BLADES] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PrcipceBldes", "Precipice Blades"), + .name = COMPOUND_STRING("Precipice Blades"), .description = COMPOUND_STRING( "Fearsome blades of stone\n" "attack both foes."), @@ -15410,12 +15404,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PRECIPICE_BLADES, + .battleAnimScript = gBattleAnimMove_PrecipiceBlades, }, [MOVE_DRAGON_ASCENT] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DragonAscent", "Dragon Ascent"), + .name = COMPOUND_STRING("Dragon Ascent"), .description = sCloseCombatDescription, .effect = EFFECT_HIT, .power = 120, @@ -15435,12 +15429,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DRAGON_ASCENT, + .battleAnimScript = gBattleAnimMove_DragonAscent, }, [MOVE_HYPERSPACE_FURY] = { - .name = HANDLE_EXPANDED_MOVE_NAME("HyprspceFury", "Hyperspace Fury"), + .name = COMPOUND_STRING("Hyperspace Fury"), .description = sHyperspaceHoleDescription, .effect = EFFECT_HYPERSPACE_FURY, .power = 100, @@ -15463,7 +15457,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_HYPERSPACE_FURY, .contestComboMoves = {COMBO_STARTER_HYPERSPACE_HOLE}, - .battleAnimScript = Move_HYPERSPACE_FURY, + .battleAnimScript = gBattleAnimMove_HyperspaceFury, }, [MOVE_SHORE_UP] = @@ -15489,12 +15483,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SANDSTORM}, - .battleAnimScript = Move_SHORE_UP, + .battleAnimScript = gBattleAnimMove_ShoreUp, }, [MOVE_FIRST_IMPRESSION] = { - .name = HANDLE_EXPANDED_MOVE_NAME("FrstImpressn", "First Impression"), + .name = COMPOUND_STRING("First Impression"), .description = COMPOUND_STRING( "Hits hard and first.\n" "Only works first turn."), @@ -15512,12 +15506,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FIRST_IMPRESSION, + .battleAnimScript = gBattleAnimMove_FirstImpression, }, [MOVE_BANEFUL_BUNKER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("BanefulBunkr", "Baneful Bunker"), + .name = COMPOUND_STRING("Baneful Bunker"), .description = COMPOUND_STRING( "Protects user and poisons\n" "foes on contact."), @@ -15539,12 +15533,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BANEFUL_BUNKER, + .battleAnimScript = gBattleAnimMove_BanefulBunker, }, [MOVE_SPIRIT_SHACKLE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SpiritShackl", "Spirit Shackle"), + .name = COMPOUND_STRING("Spirit Shackle"), .description = COMPOUND_STRING( "After being hit, foes can\n" "no longer escape."), @@ -15564,12 +15558,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SPIRIT_SHACKLE, + .battleAnimScript = gBattleAnimMove_SpiritShackle, }, [MOVE_DARKEST_LARIAT] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DarkstLariat", "Darkest Lariat"), + .name = COMPOUND_STRING("Darkest Lariat"), .description = COMPOUND_STRING( "Swings the arms to strike\n" "It ignores stat changes."), @@ -15587,12 +15581,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DARKEST_LARIAT, + .battleAnimScript = gBattleAnimMove_DarkestLariat, }, [MOVE_SPARKLING_ARIA] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SparklngAria", "Sparkling Aria"), + .name = COMPOUND_STRING("Sparkling Aria"), .description = COMPOUND_STRING( "Sings with bubbles. Cures\n" "burns on contact."), @@ -15615,7 +15609,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SCALD}, - .battleAnimScript = Move_SPARKLING_ARIA, + .battleAnimScript = gBattleAnimMove_SparklingAria, }, [MOVE_ICE_HAMMER] = @@ -15642,12 +15636,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, - .battleAnimScript = Move_ICE_HAMMER, + .battleAnimScript = gBattleAnimMove_IceHammer, }, [MOVE_FLORAL_HEALING] = { - .name = HANDLE_EXPANDED_MOVE_NAME("FloralHealng", "Floral Healing"), + .name = COMPOUND_STRING("Floral Healing"), .description = COMPOUND_STRING( "Restores an ally's HP.\n" "Heals more on grass."), @@ -15668,12 +15662,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FLORAL_HEALING, + .battleAnimScript = gBattleAnimMove_FloralHealing, }, [MOVE_HIGH_HORSEPOWER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("HighHorsepwr", "High Horsepower"), + .name = COMPOUND_STRING("High Horsepower"), .description = COMPOUND_STRING( "Slams hard into the foe with\n" "its entire body."), @@ -15690,7 +15684,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_HIGH_HORSEPOWER, + .battleAnimScript = gBattleAnimMove_HighHorsepower, }, [MOVE_STRENGTH_SAP] = @@ -15714,7 +15708,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STRENGTH_SAP, + .battleAnimScript = gBattleAnimMove_StrengthSap, }, [MOVE_SOLAR_BLADE] = @@ -15740,7 +15734,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_SOLAR_BLADE, + .battleAnimScript = gBattleAnimMove_SolarBlade, }, [MOVE_LEAFAGE] = @@ -15761,7 +15755,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GROWTH}, - .battleAnimScript = Move_LEAFAGE, + .battleAnimScript = gBattleAnimMove_Leafage, }, [MOVE_SPOTLIGHT] = @@ -15788,7 +15782,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SPOTLIGHT, + .battleAnimScript = gBattleAnimMove_Spotlight, }, [MOVE_TOXIC_THREAD] = @@ -15811,7 +15805,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_TOXIC}, - .battleAnimScript = Move_TOXIC_THREAD, + .battleAnimScript = gBattleAnimMove_ToxicThread, }, [MOVE_LASER_FOCUS] = @@ -15836,7 +15830,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LASER_FOCUS, + .battleAnimScript = gBattleAnimMove_LaserFocus, }, [MOVE_GEAR_UP] = @@ -15862,7 +15856,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GEAR_UP, + .battleAnimScript = gBattleAnimMove_GearUp, }, [MOVE_THROAT_CHOP] = @@ -15888,7 +15882,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_THROAT_CHOP, + .battleAnimScript = gBattleAnimMove_ThroatChop, }, [MOVE_POLLEN_PUFF] = @@ -15910,7 +15904,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POLLEN_PUFF, + .battleAnimScript = gBattleAnimMove_PollenPuff, }, [MOVE_ANCHOR_SHOT] = @@ -15936,12 +15930,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ANCHOR_SHOT, + .battleAnimScript = gBattleAnimMove_AnchorShot, }, [MOVE_PSYCHIC_TERRAIN] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PsychcTrrain", "Psychic Terrain"), + .name = COMPOUND_STRING("Psychic Terrain"), .description = COMPOUND_STRING( "The ground turns weird for\n" "5 turns. Blocks priority."), @@ -15960,7 +15954,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = COMBO_STARTER_PSYCHIC_TERRAIN, .contestComboMoves = {0}, - .battleAnimScript = Move_PSYCHIC_TERRAIN, + .battleAnimScript = gBattleAnimMove_PsychicTerrain, }, [MOVE_LUNGE] = @@ -15986,7 +15980,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LUNGE, + .battleAnimScript = gBattleAnimMove_Lunge, }, [MOVE_FIRE_LASH] = @@ -16012,7 +16006,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_FIRE_LASH, + .battleAnimScript = gBattleAnimMove_FireLash, }, [MOVE_POWER_TRIP] = @@ -16034,7 +16028,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POWER_TRIP, + .battleAnimScript = gBattleAnimMove_PowerTrip, }, [MOVE_BURN_UP] = @@ -16061,7 +16055,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_SUNNY_DAY}, - .battleAnimScript = Move_BURN_UP, + .battleAnimScript = gBattleAnimMove_BurnUp, }, [MOVE_SPEED_SWAP] = @@ -16084,7 +16078,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SPEED_SWAP, + .battleAnimScript = gBattleAnimMove_SpeedSwap, }, [MOVE_SMART_STRIKE] = @@ -16106,7 +16100,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SMART_STRIKE, + .battleAnimScript = gBattleAnimMove_SmartStrike, }, [MOVE_PURIFY] = @@ -16131,12 +16125,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PURIFY, + .battleAnimScript = gBattleAnimMove_Purify, }, [MOVE_REVELATION_DANCE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("RvlationDnce", "Revelation Dance"), + .name = COMPOUND_STRING("Revelation Dance"), .description = COMPOUND_STRING( "Dances with mystical power.\n" "Matches user's first type."), @@ -16153,12 +16147,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_REVELATION_DANCE, + .battleAnimScript = gBattleAnimMove_RevelationDance, }, [MOVE_CORE_ENFORCER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("CoreEnforcer", "Core Enforcer"), + .name = COMPOUND_STRING("Core Enforcer"), .description = COMPOUND_STRING( "Hits with a ray that\n" "nullifies the foe's ability."), @@ -16178,7 +16172,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CORE_ENFORCER, + .battleAnimScript = gBattleAnimMove_CoreEnforcer, }, [MOVE_TROP_KICK] = @@ -16204,7 +16198,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TROP_KICK, + .battleAnimScript = gBattleAnimMove_TropKick, }, [MOVE_INSTRUCT] = @@ -16230,7 +16224,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_INSTRUCT, + .battleAnimScript = gBattleAnimMove_Instruct, }, [MOVE_BEAK_BLAST] = @@ -16259,12 +16253,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BEAK_BLAST, + .battleAnimScript = gBattleAnimMove_BeakBlast, }, [MOVE_CLANGING_SCALES] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ClngngScales", "Clanging Scales"), + .name = COMPOUND_STRING("Clanging Scales"), .description = COMPOUND_STRING( "Makes a big noise with\n" "its scales. Drops Defense."), @@ -16286,12 +16280,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CLANGING_SCALES, + .battleAnimScript = gBattleAnimMove_ClangingScales, }, [MOVE_DRAGON_HAMMER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DragonHammer", "Dragon Hammer"), + .name = COMPOUND_STRING("Dragon Hammer"), .description = COMPOUND_STRING( "Swings its whole body\n" "like a hammer to damage."), @@ -16308,7 +16302,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_DRAGON_BREATH, COMBO_STARTER_DRAGON_DANCE, COMBO_STARTER_DRAGON_RAGE, COMBO_STARTER_DRAGON_RUSH, COMBO_STARTER_DRAGON_TAIL}, - .battleAnimScript = Move_DRAGON_HAMMER, + .battleAnimScript = gBattleAnimMove_DragonHammer, }, [MOVE_BRUTAL_SWING] = @@ -16330,7 +16324,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BRUTAL_SWING, + .battleAnimScript = gBattleAnimMove_BrutalSwing, }, [MOVE_AURORA_VEIL] = @@ -16355,7 +16349,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_HAIL}, - .battleAnimScript = Move_AURORA_VEIL, + .battleAnimScript = gBattleAnimMove_AuroraVeil, }, [MOVE_SHELL_TRAP] = @@ -16383,7 +16377,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SHELL_TRAP, + .battleAnimScript = gBattleAnimMove_ShellTrap, }, [MOVE_FLEUR_CANNON] = @@ -16409,12 +16403,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FLEUR_CANNON, + .battleAnimScript = gBattleAnimMove_FleurCannon, }, [MOVE_PSYCHIC_FANGS] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PsychicFangs", "Psychic Fangs"), + .name = COMPOUND_STRING("Psychic Fangs"), .description = COMPOUND_STRING( "Chomps with psychic fangs.\n" "Destroys any barriers."), @@ -16432,12 +16426,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PSYCHIC_FANGS, + .battleAnimScript = gBattleAnimMove_PsychicFangs, }, [MOVE_STOMPING_TANTRUM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("StmpngTantrm", "Stomping Tantrum"), + .name = COMPOUND_STRING("Stomping Tantrum"), .description = COMPOUND_STRING( "Stomps around angrily.\n" "Stronger after a failure."), @@ -16455,7 +16449,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STOMPING_TANTRUM, + .battleAnimScript = gBattleAnimMove_StompingTantrum, }, [MOVE_SHADOW_BONE] = @@ -16480,7 +16474,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = COMBO_STARTER_SHADOW_BONE, .contestComboMoves = {COMBO_STARTER_BONE_CLUB, COMBO_STARTER_BONEMERANG, COMBO_STARTER_BONE_RUSH}, - .battleAnimScript = Move_SHADOW_BONE, + .battleAnimScript = gBattleAnimMove_ShadowBone, }, [MOVE_ACCELEROCK] = @@ -16502,7 +16496,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ACCELEROCK, + .battleAnimScript = gBattleAnimMove_Accelerock, }, [MOVE_LIQUIDATION] = @@ -16528,12 +16522,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_RAIN_DANCE}, - .battleAnimScript = Move_LIQUIDATION, + .battleAnimScript = gBattleAnimMove_Liquidation, }, [MOVE_PRISMATIC_LASER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PrsmaticLasr", "Prismatic Laser"), + .name = COMPOUND_STRING("Prismatic Laser"), .description = COMPOUND_STRING( "A high power laser that\n" "forces recharge next turn."), @@ -16553,12 +16547,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PRISMATIC_LASER, + .battleAnimScript = gBattleAnimMove_PrismaticLaser, }, [MOVE_SPECTRAL_THIEF] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SpectrlThief", "Spectral Thief"), + .name = COMPOUND_STRING("Spectral Thief"), .description = COMPOUND_STRING( "Steals the target's stat\n" "boosts, then attacks."), @@ -16580,12 +16574,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SPECTRAL_THIEF, + .battleAnimScript = gBattleAnimMove_SpectralThief, }, [MOVE_SUNSTEEL_STRIKE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SnsteelStrke", "Sunsteel Strike"), + .name = COMPOUND_STRING("Sunsteel Strike"), .description = COMPOUND_STRING( "A sun-fueled strike that\n" "ignores abilities."), @@ -16604,12 +16598,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SUNSTEEL_STRIKE, + .battleAnimScript = gBattleAnimMove_SunsteelStrike, }, [MOVE_MOONGEIST_BEAM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MoongestBeam", "Moongeist Beam"), + .name = COMPOUND_STRING("Moongeist Beam"), .description = COMPOUND_STRING( "A moon-powered beam that\n" "ignores abilities."), @@ -16627,7 +16621,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MOONGEIST_BEAM, + .battleAnimScript = gBattleAnimMove_MoongeistBeam, }, [MOVE_TEARFUL_LOOK] = @@ -16651,7 +16645,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TEARFUL_LOOK, + .battleAnimScript = gBattleAnimMove_TearfulLook, }, [MOVE_ZING_ZAP] = @@ -16677,12 +16671,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_CHARGE}, - .battleAnimScript = Move_ZING_ZAP, + .battleAnimScript = gBattleAnimMove_ZingZap, }, [MOVE_NATURES_MADNESS] = { - .name = HANDLE_EXPANDED_MOVE_NAME("Natur'sMadns", "Nature's Madness"), + .name = COMPOUND_STRING("Nature's Madness"), .description = COMPOUND_STRING( "Halves the foe's HP with\n" "the power of nature."), @@ -16699,7 +16693,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NATURES_MADNESS, + .battleAnimScript = gBattleAnimMove_NaturesMadness, }, [MOVE_MULTI_ATTACK] = @@ -16722,7 +16716,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MULTI_ATTACK, + .battleAnimScript = gBattleAnimMove_MultiAttack, }, [MOVE_MIND_BLOWN] = @@ -16744,7 +16738,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MIND_BLOWN, + .battleAnimScript = gBattleAnimMove_MindBlown, }, [MOVE_PLASMA_FISTS] = @@ -16768,12 +16762,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PLASMA_FISTS, + .battleAnimScript = gBattleAnimMove_PlasmaFists, }, [MOVE_PHOTON_GEYSER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PhotonGeyser", "Photon Geyser"), + .name = COMPOUND_STRING("Photon Geyser"), .description = COMPOUND_STRING( "User's highest attack stat\n" "determines its category."), @@ -16791,7 +16785,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PHOTON_GEYSER, + .battleAnimScript = gBattleAnimMove_PhotonGeyser, }, [MOVE_ZIPPY_ZAP] = @@ -16818,12 +16812,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .chance = 100, }), #endif - .battleAnimScript = Move_ZIPPY_ZAP, + .battleAnimScript = gBattleAnimMove_ZippyZap, }, [MOVE_SPLISHY_SPLASH] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SplishySplsh", "Splishy Splash"), + .name = COMPOUND_STRING("Splishy Splash"), .description = COMPOUND_STRING( "A huge electrified wave that\n" "may paralyze the foe."), @@ -16841,7 +16835,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 30, }), - .battleAnimScript = Move_SPLISHY_SPLASH, + .battleAnimScript = gBattleAnimMove_SplishySplash, }, [MOVE_FLOATY_FALL] = @@ -16866,7 +16860,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_FLINCH, .chance = 30, }), - .battleAnimScript = Move_FLOATY_FALL, + .battleAnimScript = gBattleAnimMove_FloatyFall, }, [MOVE_PIKA_PAPOW] = @@ -16885,12 +16879,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, - .battleAnimScript = Move_PIKA_PAPOW, + .battleAnimScript = gBattleAnimMove_PikaPapow, }, [MOVE_BOUNCY_BUBBLE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("BouncyBubble", "Bouncy Bubble"), + .name = COMPOUND_STRING("Bouncy Bubble"), .description = COMPOUND_STRING( "An attack that absorbs\n" #if B_UPDATED_MOVE_DATA >= GEN_8 @@ -16910,7 +16904,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, .healingMove = B_HEAL_BLOCKING >= GEN_6, - .battleAnimScript = Move_BOUNCY_BUBBLE, + .battleAnimScript = gBattleAnimMove_BouncyBubble, }, [MOVE_BUZZY_BUZZ] = @@ -16933,7 +16927,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 100, }), - .battleAnimScript = Move_BUZZY_BUZZ, + .battleAnimScript = gBattleAnimMove_BuzzyBuzz, }, [MOVE_SIZZLY_SLIDE] = @@ -16958,7 +16952,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_BURN, .chance = 100, }), - .battleAnimScript = Move_SIZZLY_SLIDE, + .battleAnimScript = gBattleAnimMove_SizzlySlide, }, [MOVE_GLITZY_GLOW] = @@ -16977,7 +16971,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, - .battleAnimScript = Move_GLITZY_GLOW, + .battleAnimScript = gBattleAnimMove_GlitzyGlow, }, [MOVE_BADDY_BAD] = @@ -16996,7 +16990,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, - .battleAnimScript = Move_BADDY_BAD, + .battleAnimScript = gBattleAnimMove_BaddyBad, }, [MOVE_SAPPY_SEED] = @@ -17016,7 +17010,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .magicCoatAffected = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_SAPPY_SEED, + .battleAnimScript = gBattleAnimMove_SappySeed, }, [MOVE_FREEZY_FROST] = @@ -17035,12 +17029,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, - .battleAnimScript = Move_FREEZY_FROST, + .battleAnimScript = gBattleAnimMove_FreezyFrost, }, [MOVE_SPARKLY_SWIRL] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SparklySwirl", "Sparkly Swirl"), + .name = COMPOUND_STRING("Sparkly Swirl"), .description = COMPOUND_STRING( "Wrap foe with whirlwind of\n" "scent. Heals party's status."), @@ -17054,12 +17048,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, - .battleAnimScript = Move_SPARKLY_SWIRL, + .battleAnimScript = gBattleAnimMove_SparklySwirl, }, [MOVE_VEEVEE_VOLLEY] = { - .name = HANDLE_EXPANDED_MOVE_NAME("VeeveeVolley", "Veevee Volley"), + .name = COMPOUND_STRING("Veevee Volley"), .description = COMPOUND_STRING( "Eevee's love increases its\n" "power. It never misses."), @@ -17074,12 +17068,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8, .metronomeBanned = TRUE, - .battleAnimScript = Move_VEEVEE_VOLLEY, + .battleAnimScript = gBattleAnimMove_VeeveeVolley, }, [MOVE_DOUBLE_IRON_BASH] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DublIronBash", "Double Iron Bash"), + .name = COMPOUND_STRING("Double Iron Bash"), .description = COMPOUND_STRING( "The user spins and hits with\n" "its arms. May cause flinch."), @@ -17104,12 +17098,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DOUBLE_IRON_BASH, + .battleAnimScript = gBattleAnimMove_DoubleIronBash, }, [MOVE_DYNAMAX_CANNON] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DynamxCannon", "Dynamax Cannon"), + .name = COMPOUND_STRING("Dynamax Cannon"), .description = COMPOUND_STRING( "Fires a strong beam. Deals\n" "2x damage to Dynamaxed foes."), @@ -17134,7 +17128,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DYNAMAX_CANNON, + .battleAnimScript = gBattleAnimMove_DynamaxCannon, }, [MOVE_SNIPE_SHOT] = @@ -17156,7 +17150,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SNIPE_SHOT, + .battleAnimScript = gBattleAnimMove_SnipeShot, }, [MOVE_JAW_LOCK] = @@ -17182,7 +17176,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_JAW_LOCK, + .battleAnimScript = gBattleAnimMove_JawLock, }, [MOVE_STUFF_CHEEKS] = @@ -17206,7 +17200,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STUFF_CHEEKS, + .battleAnimScript = gBattleAnimMove_StuffCheeks, }, [MOVE_NO_RETREAT] = @@ -17230,7 +17224,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_NO_RETREAT, + .battleAnimScript = gBattleAnimMove_NoRetreat, }, [MOVE_TAR_SHOT] = @@ -17252,7 +17246,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TAR_SHOT, + .battleAnimScript = gBattleAnimMove_TarShot, }, [MOVE_MAGIC_POWDER] = @@ -17276,7 +17270,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_MAGIC_POWDER, + .battleAnimScript = gBattleAnimMove_MagicPowder, }, [MOVE_DRAGON_DARTS] = @@ -17299,7 +17293,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DRAGON_DARTS, + .battleAnimScript = gBattleAnimMove_DragonDarts, }, [MOVE_TEATIME] = @@ -17323,7 +17317,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TEATIME, + .battleAnimScript = gBattleAnimMove_Teatime, }, [MOVE_OCTOLOCK] = @@ -17344,7 +17338,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_OCTOLOCK, + .battleAnimScript = gBattleAnimMove_Octolock, }, [MOVE_BOLT_BEAK] = @@ -17366,12 +17360,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BOLT_BEAK, + .battleAnimScript = gBattleAnimMove_BoltBeak, }, [MOVE_FISHIOUS_REND] = { - .name = HANDLE_EXPANDED_MOVE_NAME("FishiousRend", "Fishious Rend"), + .name = COMPOUND_STRING("Fishious Rend"), .description = COMPOUND_STRING( "Double power if the user\n" "moves before the target."), @@ -17389,7 +17383,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FISHIOUS_REND, + .battleAnimScript = gBattleAnimMove_FishiousRend, }, [MOVE_COURT_CHANGE] = @@ -17411,12 +17405,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_COURT_CHANGE, + .battleAnimScript = gBattleAnimMove_CourtChange, }, [MOVE_CLANGOROUS_SOUL] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ClngrousSoul", "Clangorous Soul"), + .name = COMPOUND_STRING("Clangorous Soul"), .description = COMPOUND_STRING( "The user uses some of its\n" "HP to raise all its stats."), @@ -17438,7 +17432,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CLANGOROUS_SOUL, + .battleAnimScript = gBattleAnimMove_ClangorousSoul, }, [MOVE_BODY_PRESS] = @@ -17462,7 +17456,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BODY_PRESS, + .battleAnimScript = gBattleAnimMove_BodyPress, }, [MOVE_DECORATE] = @@ -17470,7 +17464,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .name = COMPOUND_STRING("Decorate"), .description = COMPOUND_STRING( "The user sharply raises\n" - "the target's Atk and Sp.Atk"), + "the target's Atk and Sp.Atk."), .effect = EFFECT_DECORATE, .power = 0, .type = TYPE_FAIRY, @@ -17486,7 +17480,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DECORATE, + .battleAnimScript = gBattleAnimMove_Decorate, }, [MOVE_DRUM_BEATING] = @@ -17512,7 +17506,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DRUM_BEATING, + .battleAnimScript = gBattleAnimMove_DrumBeating, }, [MOVE_SNAP_TRAP] = @@ -17539,7 +17533,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SNAP_TRAP, + .battleAnimScript = gBattleAnimMove_SnapTrap, }, [MOVE_PYRO_BALL] = @@ -17567,12 +17561,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_PYRO_BALL, + .battleAnimScript = gBattleAnimMove_PyroBall, }, [MOVE_BEHEMOTH_BLADE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("BehemthBlade", "Behemoth Blade"), + .name = COMPOUND_STRING("Behemoth Blade"), .description = COMPOUND_STRING( "Strikes as a sword. Deals 2x\n" "damage to Dynamaxed foes."), @@ -17594,12 +17588,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BEHEMOTH_BLADE, + .battleAnimScript = gBattleAnimMove_BehemothBlade, }, [MOVE_BEHEMOTH_BASH] = { - .name = HANDLE_EXPANDED_MOVE_NAME("BehemothBash", "Behemoth Bash"), + .name = COMPOUND_STRING("Behemoth Bash"), .description = COMPOUND_STRING( "Attacks as a shield. Deals 2x\n" "damage to Dynamaxed foes."), @@ -17620,7 +17614,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BEHEMOTH_BASH, + .battleAnimScript = gBattleAnimMove_BehemothBash, }, [MOVE_AURA_WHEEL] = @@ -17647,12 +17641,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_AURA_WHEEL, + .battleAnimScript = gBattleAnimMove_AuraWheel, }, [MOVE_BREAKING_SWIPE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("BreakngSwipe", "Breaking Swipe"), + .name = COMPOUND_STRING("Breaking Swipe"), .description = COMPOUND_STRING( "Swings its tail to attack.\n" "Lowers the Atk of those hit."), @@ -17674,7 +17668,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BREAKING_SWIPE, + .battleAnimScript = gBattleAnimMove_BreakingSwipe, }, [MOVE_BRANCH_POKE] = @@ -17697,7 +17691,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BRANCH_POKE, + .battleAnimScript = gBattleAnimMove_BranchPoke, }, [MOVE_OVERDRIVE] = @@ -17721,7 +17715,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_OVERDRIVE, + .battleAnimScript = gBattleAnimMove_Overdrive, }, [MOVE_APPLE_ACID] = @@ -17747,7 +17741,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_APPLE_ACID, + .battleAnimScript = gBattleAnimMove_AppleAcid, }, [MOVE_GRAV_APPLE] = @@ -17773,7 +17767,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GRAV_APPLE, + .battleAnimScript = gBattleAnimMove_GravApple, }, [MOVE_SPIRIT_BREAK] = @@ -17800,12 +17794,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SPIRIT_BREAK, + .battleAnimScript = gBattleAnimMove_SpiritBreak, }, [MOVE_STRANGE_STEAM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("StrangeSteam", "Strange Steam"), + .name = COMPOUND_STRING("Strange Steam"), .description = COMPOUND_STRING( "Emits a strange steam to\n" "potentially confuse the foe."), @@ -17826,7 +17820,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STRANGE_STEAM, + .battleAnimScript = gBattleAnimMove_StrangeSteam, }, [MOVE_LIFE_DEW] = @@ -17853,7 +17847,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LIFE_DEW, + .battleAnimScript = gBattleAnimMove_LifeDew, }, [MOVE_OBSTRUCT] = @@ -17878,12 +17872,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_OBSTRUCT, + .battleAnimScript = gBattleAnimMove_Obstruct, }, [MOVE_FALSE_SURRENDER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("FalsSurrendr", "False Surrender"), + .name = COMPOUND_STRING("False Surrender"), .description = COMPOUND_STRING( "Bows to stab the foe\n" "with hair. It never misses."), @@ -17901,12 +17895,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FALSE_SURRENDER, + .battleAnimScript = gBattleAnimMove_FalseSurrender, }, [MOVE_METEOR_ASSAULT] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MeteorAssalt", "Meteor Assault"), + .name = COMPOUND_STRING("Meteor Assault"), .description = COMPOUND_STRING( "Attacks with a thick leek.\n" "The user must then rest."), @@ -17928,7 +17922,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_METEOR_ASSAULT, + .battleAnimScript = gBattleAnimMove_MeteorAssault, }, [MOVE_ETERNABEAM] = @@ -17954,7 +17948,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ETERNABEAM, + .battleAnimScript = gBattleAnimMove_Eternabeam, }, [MOVE_STEEL_BEAM] = @@ -17976,12 +17970,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STEEL_BEAM, + .battleAnimScript = gBattleAnimMove_SteelBeam, }, [MOVE_EXPANDING_FORCE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ExpandngForc", "Expanding Force"), + .name = COMPOUND_STRING("Expanding Force"), .description = COMPOUND_STRING( "Power goes up and damages\n" "all foes on Psychic Terrain."), @@ -17997,7 +17991,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_PSYCHIC_TERRAIN}, - .battleAnimScript = Move_EXPANDING_FORCE, + .battleAnimScript = gBattleAnimMove_ExpandingForce, }, [MOVE_STEEL_ROLLER] = @@ -18021,7 +18015,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_STEEL_ROLLER, + .battleAnimScript = gBattleAnimMove_SteelRoller, }, [MOVE_SCALE_SHOT] = @@ -18043,7 +18037,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SCALE_SHOT, + .battleAnimScript = gBattleAnimMove_ScaleShot, }, [MOVE_METEOR_BEAM] = @@ -18071,12 +18065,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_METEOR_BEAM, + .battleAnimScript = gBattleAnimMove_MeteorBeam, }, [MOVE_SHELL_SIDE_ARM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ShellSideArm", "Shell Side Arm"), + .name = COMPOUND_STRING("Shell Side Arm"), .description = COMPOUND_STRING( "Deals better of physical and\n" "special damage. May poison."), @@ -18096,12 +18090,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SHELL_SIDE_ARM, + .battleAnimScript = gBattleAnimMove_ShellSideArm, }, [MOVE_MISTY_EXPLOSION] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MstyExplsion", "Misty Explosion"), + .name = COMPOUND_STRING("Misty Explosion"), .description = COMPOUND_STRING( "Hit everything and faint.\n" "Powers up on Misty Terrain."), @@ -18117,7 +18111,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_MISTY_TERRAIN}, - .battleAnimScript = Move_MISTY_EXPLOSION, + .battleAnimScript = gBattleAnimMove_MistyExplosion, }, [MOVE_GRASSY_GLIDE] = @@ -18140,12 +18134,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_GRASSY_TERRAIN}, - .battleAnimScript = Move_GRASSY_GLIDE, + .battleAnimScript = gBattleAnimMove_GrassyGlide, }, [MOVE_RISING_VOLTAGE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("RisngVoltage", "Rising Voltage"), + .name = COMPOUND_STRING("Rising Voltage"), .description = COMPOUND_STRING( "This move's power doubles\n" "when on Electric Terrain."), @@ -18161,12 +18155,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ELECTRIC_TERRAIN}, - .battleAnimScript = Move_RISING_VOLTAGE, + .battleAnimScript = gBattleAnimMove_RisingVoltage, }, [MOVE_TERRAIN_PULSE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("TerrainPulse", "Terrain Pulse"), + .name = COMPOUND_STRING("Terrain Pulse"), .description = COMPOUND_STRING( "Type and power changes\n" "depending on the terrain."), @@ -18183,12 +18177,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {COMBO_STARTER_ELECTRIC_TERRAIN, COMBO_STARTER_MISTY_TERRAIN, COMBO_STARTER_GRASSY_TERRAIN, COMBO_STARTER_PSYCHIC_TERRAIN}, - .battleAnimScript = Move_TERRAIN_PULSE, + .battleAnimScript = gBattleAnimMove_TerrainPulse, }, [MOVE_SKITTER_SMACK] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SkitterSmack", "Skitter Smack"), + .name = COMPOUND_STRING("Skitter Smack"), .description = COMPOUND_STRING( "User skitters behind foe to\n" "attack. Lowers foe's Sp. Atk."), @@ -18209,12 +18203,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SKITTER_SMACK, + .battleAnimScript = gBattleAnimMove_SkitterSmack, }, [MOVE_BURNING_JEALOUSY] = { - .name = HANDLE_EXPANDED_MOVE_NAME("BrningJelosy", "Burning Jealousy"), + .name = COMPOUND_STRING("Burning Jealousy"), .description = COMPOUND_STRING( "Foes that have stats upped\n" "during the turn get burned."), @@ -18235,7 +18229,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_BURNING_JEALOUSY, + .battleAnimScript = gBattleAnimMove_BurningJealousy, }, [MOVE_LASH_OUT] = @@ -18257,7 +18251,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_LASH_OUT, + .battleAnimScript = gBattleAnimMove_LashOut, }, [MOVE_POLTERGEIST] = @@ -18278,12 +18272,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_POLTERGEIST, + .battleAnimScript = gBattleAnimMove_Poltergeist, }, [MOVE_CORROSIVE_GAS] = { - .name = HANDLE_EXPANDED_MOVE_NAME("CorrosiveGas", "Corrosive Gas"), + .name = COMPOUND_STRING("Corrosive Gas"), .description = COMPOUND_STRING( "Highly acidic gas melts items\n" "held by surrounding Pokémon."), @@ -18300,7 +18294,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_CORROSIVE_GAS, + .battleAnimScript = gBattleAnimMove_CorrosiveGas, }, [MOVE_COACHING] = @@ -18324,7 +18318,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_COACHING, + .battleAnimScript = gBattleAnimMove_Coaching, }, [MOVE_FLIP_TURN] = @@ -18346,7 +18340,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FLIP_TURN, + .battleAnimScript = gBattleAnimMove_FlipTurn, }, [MOVE_TRIPLE_AXEL] = @@ -18369,12 +18363,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_TRIPLE_AXEL, + .battleAnimScript = gBattleAnimMove_TripleAxel, }, [MOVE_DUAL_WINGBEAT] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DualWingbeat", "Dual Wingbeat"), + .name = COMPOUND_STRING("Dual Wingbeat"), .description = COMPOUND_STRING( "User slams the target with\n" "wings and hits twice in a row."), @@ -18392,12 +18386,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DUAL_WINGBEAT, + .battleAnimScript = gBattleAnimMove_DualWingbeat, }, [MOVE_SCORCHING_SANDS] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ScorchngSnds", "Scorching Sands"), + .name = COMPOUND_STRING("Scorching Sands"), .description = COMPOUND_STRING( "Throws scorching sand at\n" "the target. May leave a burn."), @@ -18418,12 +18412,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SCORCHING_SANDS, + .battleAnimScript = gBattleAnimMove_ScorchingSands, }, [MOVE_JUNGLE_HEALING] = { - .name = HANDLE_EXPANDED_MOVE_NAME("JungleHealng", "Jungle Healing"), + .name = COMPOUND_STRING("Jungle Healing"), .description = COMPOUND_STRING( "Heals HP and status of\n" "itself and allies in battle."), @@ -18444,7 +18438,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_JUNGLE_HEALING, + .battleAnimScript = gBattleAnimMove_JungleHealing, }, [MOVE_WICKED_BLOW] = @@ -18469,12 +18463,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_WICKED_BLOW, + .battleAnimScript = gBattleAnimMove_WickedBlow, }, [MOVE_SURGING_STRIKES] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SurgngStrkes", "Surging Strikes"), + .name = COMPOUND_STRING("Surging Strikes"), .description = COMPOUND_STRING( "Mastering the Water style,\n" "strikes with 3 critical hits."), @@ -18495,7 +18489,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_SURGING_STRIKES, + .battleAnimScript = gBattleAnimMove_SurgingStrikes, }, [MOVE_THUNDER_CAGE] = @@ -18520,12 +18514,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_THUNDER_CAGE, + .battleAnimScript = gBattleAnimMove_ThunderCage, }, [MOVE_DRAGON_ENERGY] = { - .name = HANDLE_EXPANDED_MOVE_NAME("DragonEnergy", "Dragon Energy"), + .name = COMPOUND_STRING("Dragon Energy"), .description = COMPOUND_STRING( "The higher the user's HP\n" "the more damage caused."), @@ -18542,12 +18536,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_COOL, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_DRAGON_ENERGY, + .battleAnimScript = gBattleAnimMove_DragonEnergy, }, [MOVE_FREEZING_GLARE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("FreezngGlare", "Freezing Glare"), + .name = COMPOUND_STRING("Freezing Glare"), .description = COMPOUND_STRING( "Shoots psychic power from\n" #if B_USE_FROSTBITE == TRUE @@ -18572,7 +18566,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_CUTE, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FREEZING_GLARE, + .battleAnimScript = gBattleAnimMove_FreezingGlare, }, [MOVE_FIERY_WRATH] = @@ -18598,12 +18592,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_FIERY_WRATH, + .battleAnimScript = gBattleAnimMove_FieryWrath, }, [MOVE_THUNDEROUS_KICK] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ThnderusKick", "Thunderous Kick"), + .name = COMPOUND_STRING("Thunderous Kick"), .description = COMPOUND_STRING( "Uses a lightning-like kick\n" "to hit. Lowers foe's Defense."), @@ -18625,12 +18619,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_TOUGH, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_THUNDEROUS_KICK, + .battleAnimScript = gBattleAnimMove_ThunderousKick, }, [MOVE_GLACIAL_LANCE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("GlacialLance", "Glacial Lance"), + .name = COMPOUND_STRING("Glacial Lance"), .description = COMPOUND_STRING( "Strikes by hurling a blizzard-\n" "cloaked icicle lance at foes."), @@ -18647,12 +18641,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_BEAUTY, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_GLACIAL_LANCE, + .battleAnimScript = gBattleAnimMove_GlacialLance, }, [MOVE_ASTRAL_BARRAGE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("AstrlBarrage", "Astral Barrage"), + .name = COMPOUND_STRING("Astral Barrage"), .description = COMPOUND_STRING( "Strikes by sending a frightful\n" "amount of ghosts at foes."), @@ -18669,7 +18663,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_ASTRAL_BARRAGE, + .battleAnimScript = gBattleAnimMove_AstralBarrage, }, [MOVE_EERIE_SPELL] = @@ -18692,7 +18686,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .contestCategory = CONTEST_CATEGORY_SMART, .contestComboStarterId = 0, .contestComboMoves = {0}, - .battleAnimScript = Move_EERIE_SPELL, + .battleAnimScript = gBattleAnimMove_EerieSpell, }, [MOVE_DIRE_CLAW] = @@ -18714,12 +18708,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_DIRE_CLAW, .chance = 50, }), - .battleAnimScript = Move_DIRE_CLAW, + .battleAnimScript = gBattleAnimMove_DireClaw, }, [MOVE_PSYSHIELD_BASH] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PsyshieldBsh", "Psyshield Bash"), + .name = COMPOUND_STRING("Psyshield Bash"), .description = COMPOUND_STRING( "Hits a foe with psychic\n" "energy. May raise Defense."), @@ -18737,7 +18731,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), - .battleAnimScript = Move_PSYSHIELD_BASH, + .battleAnimScript = gBattleAnimMove_PsyshieldBash, }, [MOVE_POWER_SHIFT] = @@ -18758,7 +18752,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_POWER_SHIFT, + .battleAnimScript = gBattleAnimMove_PowerShift, }, [MOVE_STONE_AXE] = @@ -18781,12 +18775,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_STEALTH_ROCK, .chance = 100, }), - .battleAnimScript = Move_STONE_AXE, + .battleAnimScript = gBattleAnimMove_StoneAxe, }, [MOVE_SPRINGTIDE_STORM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SprngtdeStrm", "Springtide Storm"), + .name = COMPOUND_STRING("Springtide Storm"), .description = COMPOUND_STRING( "Wraps a foe in fierce winds.\n" "Varies with the user's form."), @@ -18804,12 +18798,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_ATK_MINUS_1, .chance = 30, }), - .battleAnimScript = Move_SPRINGTIDE_STORM, + .battleAnimScript = gBattleAnimMove_SpringtideStorm, }, [MOVE_MYSTICAL_POWER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MystcalPower", "Mystical Power"), + .name = COMPOUND_STRING("Mystical Power"), .description = COMPOUND_STRING( "A mysterious power strikes,\n" "raising the user's Sp. Atk."), @@ -18826,7 +18820,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), - .battleAnimScript = Move_MYSTICAL_POWER, + .battleAnimScript = gBattleAnimMove_MysticalPower, }, [MOVE_RAGING_FURY] = @@ -18848,7 +18842,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_THRASH, .self = TRUE, }), - .battleAnimScript = Move_RAGING_FURY, + .battleAnimScript = gBattleAnimMove_RagingFury, }, [MOVE_WAVE_CRASH] = @@ -18868,7 +18862,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, - .battleAnimScript = Move_WAVE_CRASH, + .battleAnimScript = gBattleAnimMove_WaveCrash, }, [MOVE_CHLOROBLAST] = @@ -18885,12 +18879,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, - .battleAnimScript = Move_CHLOROBLAST, + .battleAnimScript = gBattleAnimMove_Chloroblast, }, [MOVE_MOUNTAIN_GALE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MountainGale", "Mountain Gale"), + .name = COMPOUND_STRING("Mountain Gale"), .description = COMPOUND_STRING( "Giant chunks of ice damage\n" "the foe. It may flinch."), @@ -18906,12 +18900,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_FLINCH, .chance = 30, }), - .battleAnimScript = Move_MOUNTAIN_GALE, + .battleAnimScript = gBattleAnimMove_MountainGale, }, [MOVE_VICTORY_DANCE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("VictoryDance", "Victory Dance"), + .name = COMPOUND_STRING("Victory Dance"), .description = COMPOUND_STRING( "Dances to raise Attack,\n" "Defense and Speed."), @@ -18927,12 +18921,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .snatchAffected = TRUE, .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, - .battleAnimScript = Move_VICTORY_DANCE, + .battleAnimScript = gBattleAnimMove_VictoryDance, }, [MOVE_HEADLONG_RUSH] = { - .name = HANDLE_EXPANDED_MOVE_NAME("HeadlongRush", "Headlong Rush"), + .name = COMPOUND_STRING("Headlong Rush"), .description = COMPOUND_STRING( "Hits with a full-body tackle.\n" "Lowers the users's defenses."), @@ -18950,7 +18944,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_DEF_SPDEF_DOWN, .self = TRUE, }), - .battleAnimScript = Move_HEADLONG_RUSH, + .battleAnimScript = gBattleAnimMove_HeadlongRush, }, [MOVE_BARB_BARRAGE] = @@ -18972,7 +18966,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_POISON, .chance = 50, }), - .battleAnimScript = Move_BARB_BARRAGE, + .battleAnimScript = gBattleAnimMove_BarbBarrage, }, [MOVE_ESPER_WING] = @@ -18995,12 +18989,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), - .battleAnimScript = Move_ESPER_WING, + .battleAnimScript = gBattleAnimMove_EsperWing, }, [MOVE_BITTER_MALICE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("BitterMalice", "Bitter Malice"), + .name = COMPOUND_STRING("Bitter Malice"), .description = COMPOUND_STRING( "A spine-chilling resentment.\n" "Lowers the foe's Attack."), @@ -19016,7 +19010,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_ATK_MINUS_1, .chance = 100, }), - .battleAnimScript = Move_BITTER_MALICE, + .battleAnimScript = gBattleAnimMove_BitterMalice, }, [MOVE_SHELTER] = @@ -19036,12 +19030,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .snatchAffected = TRUE, .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, - .battleAnimScript = Move_SHELTER, + .battleAnimScript = gBattleAnimMove_Shelter, }, [MOVE_TRIPLE_ARROWS] = { - .name = HANDLE_EXPANDED_MOVE_NAME("TripleArrows", "Triple Arrows"), + .name = COMPOUND_STRING("Triple Arrows"), .description = COMPOUND_STRING( "High critical hit ratio.\n" "May lower Defense or flinch."), @@ -19062,12 +19056,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_FLINCH, .chance = 30, }), - .battleAnimScript = Move_TRIPLE_ARROWS, + .battleAnimScript = gBattleAnimMove_TripleArrows, }, [MOVE_INFERNAL_PARADE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("InfrnlParade", "Infernal Parade"), + .name = COMPOUND_STRING("Infernal Parade"), .description = COMPOUND_STRING( "Hurts a foe harder if it has\n" "an ailment. May leave a burn."), @@ -19084,12 +19078,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_BURN, .chance = 30, }), - .battleAnimScript = Move_INFERNAL_PARADE, + .battleAnimScript = gBattleAnimMove_InfernalParade, }, [MOVE_CEASELESS_EDGE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("CeaslessEdge", "Ceaseless Edge"), + .name = COMPOUND_STRING("Ceaseless Edge"), .description = COMPOUND_STRING( "High critical hit ratio. Sets\n" "Splinters that hurt the foe."), @@ -19107,12 +19101,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SPIKES, .chance = 100, }), - .battleAnimScript = Move_CEASELESS_EDGE, + .battleAnimScript = gBattleAnimMove_CeaselessEdge, }, [MOVE_BLEAKWIND_STORM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("BlekwndStorm", "Bleakwind Storm"), + .name = COMPOUND_STRING("Bleakwind Storm"), .description = COMPOUND_STRING( "Hits with brutal, cold winds.\n" "May lower the foe's Speed."), @@ -19129,12 +19123,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SPD_MINUS_1, .chance = 30, }), - .battleAnimScript = Move_BLEAKWIND_STORM, + .battleAnimScript = gBattleAnimMove_BleakwindStorm, }, [MOVE_WILDBOLT_STORM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("WildbltStorm", "Wildbolt Storm"), + .name = COMPOUND_STRING("Wildbolt Storm"), .description = COMPOUND_STRING( "Hits with a brutal tempest.\n" "May inflict paralysis."), @@ -19151,12 +19145,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 20, }), - .battleAnimScript = Move_WILDBOLT_STORM, + .battleAnimScript = gBattleAnimMove_WildboltStorm, }, [MOVE_SANDSEAR_STORM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SndsearStorm", "Sandsear Storm"), + .name = COMPOUND_STRING("Sandsear Storm"), .description = COMPOUND_STRING( "Hits with brutally hot sand.\n" "May inflict a burn."), @@ -19173,12 +19167,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_BURN, .chance = 20, }), - .battleAnimScript = Move_SANDSEAR_STORM, + .battleAnimScript = gBattleAnimMove_SandsearStorm, }, [MOVE_LUNAR_BLESSING] = { - .name = HANDLE_EXPANDED_MOVE_NAME("LunarBlessng", "Lunar Blessing"), + .name = COMPOUND_STRING("Lunar Blessing"), .description = COMPOUND_STRING( "The user heals and cures\n" "itself and its ally."), @@ -19194,7 +19188,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .healingMove = TRUE, - .battleAnimScript = Move_LUNAR_BLESSING, + .battleAnimScript = gBattleAnimMove_LunarBlessing, }, [MOVE_TAKE_HEART] = @@ -19214,7 +19208,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .snatchAffected = TRUE, .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, - .battleAnimScript = Move_TAKE_HEART, + .battleAnimScript = gBattleAnimMove_TakeHeart, }, [MOVE_TERA_BLAST] = @@ -19236,7 +19230,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_TERA_BLAST, .self = TRUE, }), - .battleAnimScript = Move_TERA_BLAST, + .battleAnimScript = gBattleAnimMove_TeraBlast, }, [MOVE_SILK_TRAP] = @@ -19256,7 +19250,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_SILK_TRAP, + .battleAnimScript = gBattleAnimMove_SilkTrap, }, [MOVE_AXE_KICK] = @@ -19278,12 +19272,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_CONFUSION, .chance = 30, }), - .battleAnimScript = Move_AXE_KICK, + .battleAnimScript = gBattleAnimMove_AxeKick, }, [MOVE_LAST_RESPECTS] = { - .name = HANDLE_EXPANDED_MOVE_NAME("LastRespects", "Last Respects"), + .name = COMPOUND_STRING("Last Respects"), .description = COMPOUND_STRING( "This move deals more damage\n" "for each defeated ally."), @@ -19296,7 +19290,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .metronomeBanned = TRUE, // Only since it isn't implemented yet - .battleAnimScript = Move_LAST_RESPECTS, + .battleAnimScript = gBattleAnimMove_LastRespects, }, [MOVE_LUMINA_CRASH] = @@ -19317,7 +19311,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SP_DEF_MINUS_2, .chance = 100, }), - .battleAnimScript = Move_LUMINA_CRASH, + .battleAnimScript = gBattleAnimMove_LuminaCrash, }, [MOVE_ORDER_UP] = @@ -19336,7 +19330,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_ORDER_UP, + .battleAnimScript = gBattleAnimMove_OrderUp, }, [MOVE_JET_PUNCH] = @@ -19356,12 +19350,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .punchingMove = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_JET_PUNCH, + .battleAnimScript = gBattleAnimMove_JetPunch, }, [MOVE_SPICY_EXTRACT] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SpicyExtract", "Spicy Extract"), + .name = COMPOUND_STRING("Spicy Extract"), .description = COMPOUND_STRING( "Sharply ups target's Attack,\n" "harshly lowers its Defense."), @@ -19375,7 +19369,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_STATUS, .magicCoatAffected = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_SPICY_EXTRACT, + .battleAnimScript = gBattleAnimMove_SpicyExtract, }, [MOVE_SPIN_OUT] = @@ -19398,12 +19392,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SPD_MINUS_2, .self = TRUE, }), - .battleAnimScript = Move_SPIN_OUT, + .battleAnimScript = gBattleAnimMove_SpinOut, }, [MOVE_POPULATION_BOMB] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PoplatinBomb", "Population Bomb"), + .name = COMPOUND_STRING("Population Bomb"), .description = COMPOUND_STRING( "The user's fellows hit one\n" "to ten times in a row."), @@ -19419,7 +19413,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .slicingMove = TRUE, .metronomeBanned = TRUE, .strikeCount = 10, - .battleAnimScript = Move_POPULATION_BOMB, + .battleAnimScript = gBattleAnimMove_PopulationBomb, }, [MOVE_ICE_SPINNER] = @@ -19439,7 +19433,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .argument = ARG_TRY_REMOVE_TERRAIN_HIT, // Remove the active field terrain if there is one. .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, - .battleAnimScript = Move_ICE_SPINNER, + .battleAnimScript = gBattleAnimMove_IceSpinner, }, [MOVE_GLAIVE_RUSH] = @@ -19457,12 +19451,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, - .battleAnimScript = Move_GLAIVE_RUSH, + .battleAnimScript = gBattleAnimMove_GlaiveRush, }, [MOVE_REVIVAL_BLESSING] = { - .name = HANDLE_EXPANDED_MOVE_NAME("RevivlBlesng", "Revival Blessing"), + .name = COMPOUND_STRING("Revival Blessing"), .description = COMPOUND_STRING( "Revives a fainted party {PKMN}\n" "and restores half of its HP."), @@ -19479,7 +19473,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .metronomeBanned = TRUE, .healingMove = TRUE, .sketchBanned = (B_SKETCH_BANS >= GEN_9), - .battleAnimScript = Move_REVIVAL_BLESSING, + .battleAnimScript = gBattleAnimMove_RevivalBlessing, }, [MOVE_SALT_CURE] = @@ -19497,7 +19491,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .metronomeBanned = TRUE, - .battleAnimScript = Move_SALT_CURE, + .battleAnimScript = gBattleAnimMove_SaltCure, }, [MOVE_TRIPLE_DIVE] = @@ -19516,7 +19510,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .strikeCount = 3, - .battleAnimScript = Move_TRIPLE_DIVE, + .battleAnimScript = gBattleAnimMove_TripleDive, }, [MOVE_MORTAL_SPIN] = @@ -19542,7 +19536,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_POISON, .chance = 100, }), - .battleAnimScript = Move_MORTAL_SPIN, + .battleAnimScript = gBattleAnimMove_MortalSpin, }, [MOVE_DOODLE] = @@ -19562,7 +19556,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_DOODLE, + .battleAnimScript = gBattleAnimMove_Doodle, }, [MOVE_FILLET_AWAY] = @@ -19584,12 +19578,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_FILLET_AWAY, + .battleAnimScript = gBattleAnimMove_FilletAway, }, [MOVE_KOWTOW_CLEAVE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("KowtowCleave", "Kowtow Cleave"), + .name = COMPOUND_STRING("Kowtow Cleave"), .description = COMPOUND_STRING( "User slashes the foe after\n" "kowtowing. It never misses."), @@ -19603,7 +19597,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .slicingMove = TRUE, - .battleAnimScript = Move_KOWTOW_CLEAVE, + .battleAnimScript = gBattleAnimMove_KowtowCleave, }, [MOVE_FLOWER_TRICK] = @@ -19621,7 +19615,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .alwaysCriticalHit = TRUE, - .battleAnimScript = Move_FLOWER_TRICK, + .battleAnimScript = gBattleAnimMove_FlowerTrick, }, [MOVE_TORCH_SONG] = @@ -19645,7 +19639,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), - .battleAnimScript = Move_TORCH_SONG, + .battleAnimScript = gBattleAnimMove_TorchSong, }, [MOVE_AQUA_STEP] = @@ -19669,7 +19663,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), - .battleAnimScript = Move_AQUA_STEP, + .battleAnimScript = gBattleAnimMove_AquaStep, }, [MOVE_RAGING_BULL] = @@ -19688,7 +19682,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_RAGING_BULL, + .battleAnimScript = gBattleAnimMove_RagingBull, }, [MOVE_MAKE_IT_RAIN] = @@ -19713,7 +19707,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SP_ATK_MINUS_1, .self = TRUE, }), - .battleAnimScript = Move_MAKE_IT_RAIN, + .battleAnimScript = gBattleAnimMove_MakeItRain, }, [MOVE_RUINATION] = @@ -19731,15 +19725,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .metronomeBanned = TRUE, - .battleAnimScript = Move_RUINATION, + .battleAnimScript = gBattleAnimMove_Ruination, }, [MOVE_COLLISION_COURSE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ColisinCours", "Collision Course"), + .name = COMPOUND_STRING("Collision Course"), .description = COMPOUND_STRING( "Prehistoric explosion that's\n" - "stronger if supereffective."), + "stronger if super effective."), .effect = EFFECT_COLLISION_COURSE, .power = 100, .type = TYPE_FIGHTING, @@ -19750,15 +19744,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_COLLISION_COURSE, + .battleAnimScript = gBattleAnimMove_CollisionCourse, }, [MOVE_ELECTRO_DRIFT] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ElectroDrift", "Electro Drift"), + .name = COMPOUND_STRING("Electro Drift"), .description = COMPOUND_STRING( "Futuristic electricity. It's\n" - "stronger if supereffective."), + "stronger if super effective."), .effect = EFFECT_COLLISION_COURSE, .power = 100, .type = TYPE_ELECTRIC, @@ -19769,7 +19763,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .makesContact = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_ELECTRO_DRIFT, + .battleAnimScript = gBattleAnimMove_ElectroDrift, }, [MOVE_SHED_TAIL] = @@ -19790,12 +19784,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_SHED_TAIL, + .battleAnimScript = gBattleAnimMove_ShedTail, }, [MOVE_CHILLY_RECEPTION] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ChilReceptin", "Chilly Reception"), + .name = COMPOUND_STRING("Chilly Reception"), .description = COMPOUND_STRING( "Bad joke summons snowstorm.\n" "The user also switches out."), @@ -19811,7 +19805,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_CHILLY_RECEPTION, + .battleAnimScript = gBattleAnimMove_ChillyReception, }, [MOVE_TIDY_UP] = @@ -19831,7 +19825,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_TIDY_UP, + .battleAnimScript = gBattleAnimMove_TidyUp, }, [MOVE_SNOWSCAPE] = @@ -19852,7 +19846,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .ignoresProtect = TRUE, .mirrorMoveBanned = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_SNOWSCAPE, + .battleAnimScript = gBattleAnimMove_Snowscape, }, [MOVE_POUNCE] = @@ -19875,7 +19869,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SPD_MINUS_1, .chance = 100, }), - .battleAnimScript = Move_POUNCE, + .battleAnimScript = gBattleAnimMove_Pounce, }, [MOVE_TRAILBLAZE] = @@ -19899,12 +19893,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), - .battleAnimScript = Move_TRAILBLAZE, + .battleAnimScript = gBattleAnimMove_Trailblaze, }, [MOVE_CHILLING_WATER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("ChillingWatr", "Chilling Water"), + .name = COMPOUND_STRING("Chilling Water"), .description = COMPOUND_STRING( "A shower with ice-cold water\n" "lowers the target's Attack."), @@ -19921,7 +19915,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_ATK_MINUS_1, .chance = 100, }), - .battleAnimScript = Move_CHILLING_WATER, + .battleAnimScript = gBattleAnimMove_ChillingWater, }, [MOVE_HYPER_DRILL] = @@ -19941,7 +19935,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .ignoresProtect = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_HYPER_DRILL, + .battleAnimScript = gBattleAnimMove_HyperDrill, }, [MOVE_TWIN_BEAM] = @@ -19960,7 +19954,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .strikeCount = 2, .metronomeBanned = TRUE, - .battleAnimScript = Move_TWIN_BEAM, + .battleAnimScript = gBattleAnimMove_TwinBeam, }, [MOVE_RAGE_FIST] = @@ -19980,7 +19974,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .punchingMove = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_RAGE_FIST, + .battleAnimScript = gBattleAnimMove_RageFist, }, [MOVE_ARMOR_CANNON] = @@ -20002,7 +19996,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_DEF_SPDEF_DOWN, .self = TRUE, }), - .battleAnimScript = Move_ARMOR_CANNON, + .battleAnimScript = gBattleAnimMove_ArmorCannon, }, [MOVE_BITTER_BLADE] = @@ -20022,7 +20016,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .slicingMove = TRUE, .healingMove = TRUE, - .battleAnimScript = Move_BITTER_BLADE, + .battleAnimScript = gBattleAnimMove_BitterBlade, }, [MOVE_DOUBLE_SHOCK] = @@ -20046,12 +20040,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_REMOVE_ARG_TYPE, .self = TRUE, }), - .battleAnimScript = Move_DOUBLE_SHOCK, + .battleAnimScript = gBattleAnimMove_DoubleShock, }, [MOVE_GIGATON_HAMMER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("GigatonHammr", "Gigaton Hammer"), + .name = COMPOUND_STRING("Gigaton Hammer"), .description = COMPOUND_STRING( "Swings a huge hammer. Can't\n" "be used twice in a row."), @@ -20064,7 +20058,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .cantUseTwice = TRUE, - .battleAnimScript = Move_GIGATON_HAMMER, + .battleAnimScript = gBattleAnimMove_GigatonHammer, }, [MOVE_COMEUPPANCE] = @@ -20084,7 +20078,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .meFirstBanned = TRUE, .metronomeBanned = TRUE, - .battleAnimScript = Move_COMEUPPANCE, + .battleAnimScript = gBattleAnimMove_Comeuppance, }, [MOVE_AQUA_CUTTER] = @@ -20103,12 +20097,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .slicingMove = TRUE, - .battleAnimScript = Move_AQUA_CUTTER, + .battleAnimScript = gBattleAnimMove_AquaCutter, }, [MOVE_BLAZING_TORQUE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("BlazngTorque", "Blazing Torque"), + .name = COMPOUND_STRING("Blazing Torque"), .description = COMPOUND_STRING("---"), .effect = EFFECT_HIT, .power = 80, @@ -20132,12 +20126,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_BURN, .chance = 30, }), - .battleAnimScript = Move_BLAZING_TORQUE, + .battleAnimScript = gBattleAnimMove_BlazingTorque, }, [MOVE_WICKED_TORQUE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("WickedTorque", "Wicked Torque"), + .name = COMPOUND_STRING("Wicked Torque"), .description = COMPOUND_STRING("---"), .effect = EFFECT_HIT, .power = 80, @@ -20161,12 +20155,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SLEEP, .chance = 10, }), - .battleAnimScript = Move_WICKED_TORQUE, + .battleAnimScript = gBattleAnimMove_WickedTorque, }, [MOVE_NOXIOUS_TORQUE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("NoxiusTorque", "Noxious Torque"), + .name = COMPOUND_STRING("Noxious Torque"), .description = COMPOUND_STRING("---"), .effect = EFFECT_HIT, .power = 100, @@ -20190,12 +20184,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_POISON, .chance = 30, }), - .battleAnimScript = Move_NOXIOUS_TORQUE, + .battleAnimScript = gBattleAnimMove_NoxiousTorque, }, [MOVE_COMBAT_TORQUE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("CombatTorque", "Combat Torque"), + .name = COMPOUND_STRING("Combat Torque"), .description = COMPOUND_STRING("---"), .effect = EFFECT_HIT, .power = 100, @@ -20219,12 +20213,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 30, }), - .battleAnimScript = Move_COMBAT_TORQUE, + .battleAnimScript = gBattleAnimMove_CombatTorque, }, [MOVE_MAGICAL_TORQUE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MagiclTorque", "Magical Torque"), + .name = COMPOUND_STRING("Magical Torque"), .description = COMPOUND_STRING("---"), .effect = EFFECT_HIT, .power = 100, @@ -20248,7 +20242,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_CONFUSION, .chance = 30, }), - .battleAnimScript = Move_MAGICAL_TORQUE, + .battleAnimScript = gBattleAnimMove_MagicalTorque, }, [MOVE_PSYBLADE] = @@ -20267,7 +20261,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, .slicingMove = TRUE, - .battleAnimScript = Move_PSYBLADE, + .battleAnimScript = gBattleAnimMove_Psyblade, }, [MOVE_HYDRO_STEAM] = @@ -20285,7 +20279,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .thawsUser = TRUE, - .battleAnimScript = Move_HYDRO_STEAM, + .battleAnimScript = gBattleAnimMove_HydroSteam, }, [MOVE_BLOOD_MOON] = @@ -20303,12 +20297,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .cantUseTwice = TRUE, - .battleAnimScript = Move_BLOOD_MOON, + .battleAnimScript = gBattleAnimMove_BloodMoon, }, [MOVE_MATCHA_GOTCHA] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MatchaGotcha", "Matcha Gotcha"), + .name = COMPOUND_STRING("Matcha Gotcha"), .description = COMPOUND_STRING( "Absorbs half the damage\n" "inflicted. May cause a burn."), @@ -20327,7 +20321,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_BURN, .chance = 20, }), - .battleAnimScript = Move_MATCHA_GOTCHA, + .battleAnimScript = gBattleAnimMove_MatchaGotcha, }, [MOVE_SYRUP_BOMB] = @@ -20350,7 +20344,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_SYRUP_BOMB, .chance = 100, }), - .battleAnimScript = Move_SYRUP_BOMB, + .battleAnimScript = gBattleAnimMove_SyrupBomb, }, [MOVE_IVY_CUDGEL] = @@ -20369,7 +20363,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .metronomeBanned = TRUE, - .battleAnimScript = Move_IVY_CUDGEL, + .battleAnimScript = gBattleAnimMove_IvyCudgel, }, [MOVE_ELECTRO_SHOT] = @@ -20392,12 +20386,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .onChargeTurnOnly = TRUE, }, SHEER_FORCE_HACK), - .battleAnimScript = Move_ELECTRO_SHOT, + .battleAnimScript = gBattleAnimMove_ElectroShot, }, [MOVE_TERA_STARSTORM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("TeraStarstrm", "Tera Starstorm"), + .name = COMPOUND_STRING("Tera Starstorm"), .description = COMPOUND_STRING( "Damages all opponents if user is\n" "Stellar form Terapagos."), @@ -20413,15 +20407,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .copycatBanned = TRUE, .mimicBanned = TRUE, .sketchBanned = (B_SKETCH_BANS >= GEN_9), - .battleAnimScript = Move_TERA_STARSTORM, + .battleAnimScript = gBattleAnimMove_TeraStarstorm, }, [MOVE_FICKLE_BEAM] = { .name = COMPOUND_STRING("Fickle Beam"), .description = COMPOUND_STRING( - "Shoots a beam of light. Sometimes\n" - "twice as strong."), + "Shoots a beam of light.\n" + "Sometimes twice as strong."), .effect = EFFECT_FICKLE_BEAM, .power = 80, .type = TYPE_DRAGON, @@ -20430,12 +20424,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, - .battleAnimScript = Move_FICKLE_BEAM, + .battleAnimScript = gBattleAnimMove_FickleBeam, }, [MOVE_BURNING_BULWARK] = { - .name = HANDLE_EXPANDED_MOVE_NAME("BurnngBulwrk", "Burning Bulwark"), + .name = COMPOUND_STRING("Burning Bulwark"), .description = COMPOUND_STRING( "Evades attack, and burns\n" "the foe if struck."), @@ -20453,7 +20447,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .metronomeBanned = TRUE, .copycatBanned = TRUE, .assistBanned = TRUE, - .battleAnimScript = Move_BURNING_BULWARK, + .battleAnimScript = gBattleAnimMove_BurningBulwark, }, [MOVE_THUNDERCLAP] = @@ -20468,12 +20462,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 1, .category = DAMAGE_CATEGORY_SPECIAL, - .battleAnimScript = Move_THUNDERCLAP, + .battleAnimScript = gBattleAnimMove_Thunderclap, }, [MOVE_MIGHTY_CLEAVE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MightyCleave", "Mighty Cleave"), + .name = COMPOUND_STRING("Mighty Cleave"), .description = sFeintDescription, .effect = EFFECT_HIT, .power = 95, @@ -20486,12 +20480,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .makesContact = TRUE, .ignoresProtect = TRUE, .slicingMove = TRUE, - .battleAnimScript = Move_MIGHTY_CLEAVE, + .battleAnimScript = gBattleAnimMove_MightyCleave, }, [MOVE_TACHYON_CUTTER] = { - .name = HANDLE_EXPANDED_MOVE_NAME("TachyonCuttr", "Tachyon Cutter"), + .name = COMPOUND_STRING("Tachyon Cutter"), .description = COMPOUND_STRING( "Launches particle blades at\n" "the target. Strikes twice."), @@ -20505,7 +20499,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_SPECIAL, .strikeCount = 2, .slicingMove = TRUE, - .battleAnimScript = Move_TACHYON_CUTTER, + .battleAnimScript = gBattleAnimMove_TachyonCutter, }, [MOVE_HARD_PRESS] = @@ -20522,7 +20516,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .argument = 100, .makesContact = TRUE, - .battleAnimScript = Move_HARD_PRESS, + .battleAnimScript = gBattleAnimMove_HardPress, }, [MOVE_DRAGON_CHEER] = @@ -20540,12 +20534,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_STATUS, .ignoresSubstitute = TRUE, - .battleAnimScript = Move_DRAGON_CHEER, + .battleAnimScript = gBattleAnimMove_DragonCheer, }, [MOVE_ALLURING_VOICE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("AllurngVoice", "Alluring Voice"), + .name = COMPOUND_STRING("Alluring Voice"), .description = COMPOUND_STRING( "Confuses the target if their\n" "stats were boosted this turn."), @@ -20564,7 +20558,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .onlyIfTargetRaisedStats = TRUE, .chance = 100, }), - .battleAnimScript = Move_ALLURING_VOICE, + .battleAnimScript = gBattleAnimMove_AlluringVoice, }, [MOVE_TEMPER_FLARE] = @@ -20582,12 +20576,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, - .battleAnimScript = Move_TEMPER_FLARE, + .battleAnimScript = gBattleAnimMove_TemperFlare, }, [MOVE_SUPERCELL_SLAM] = { - .name = HANDLE_EXPANDED_MOVE_NAME("SuprcellSlam", "Supercell Slam"), + .name = COMPOUND_STRING("Supercell Slam"), .description = COMPOUND_STRING( "An electrified slam. If it\n" "misses, the user is hurt."), @@ -20600,12 +20594,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .makesContact = TRUE, - .battleAnimScript = Move_SUPERCELL_SLAM, + .battleAnimScript = gBattleAnimMove_SupercellSlam, }, [MOVE_PSYCHIC_NOISE] = { - .name = HANDLE_EXPANDED_MOVE_NAME("PsychicNoise", "Psychic Noise"), + .name = COMPOUND_STRING("Psychic Noise"), .description = COMPOUND_STRING( "Unpleasant sound waves that\n" "damage and prevent healing."), @@ -20623,7 +20617,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PSYCHIC_NOISE, .chance = 100, }), - .battleAnimScript = Move_PSYCHIC_NOISE, + .battleAnimScript = gBattleAnimMove_PsychicNoise, }, [MOVE_UPPER_HAND] = @@ -20645,12 +20639,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_FLINCH, .chance = 100, }), - .battleAnimScript = Move_UPPER_HAND, + .battleAnimScript = gBattleAnimMove_UpperHand, }, [MOVE_MALIGNANT_CHAIN] = { - .name = HANDLE_EXPANDED_MOVE_NAME("MalignntChan", "Malignant Chain"), + .name = COMPOUND_STRING("Malignant Chain"), .description = COMPOUND_STRING( "A corrosive chain attack\n" "that may badly poison."), @@ -20666,7 +20660,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_TOXIC, .chance = 50, }), - .battleAnimScript = Move_MALIGNANT_CHAIN, + .battleAnimScript = gBattleAnimMove_MalignantChain, }, // Z-Moves @@ -20682,7 +20676,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, //determined from move type - .battleAnimScript = Move_BREAKNECK_BLITZ, + .battleAnimScript = gBattleAnimMove_BreakneckBlitz, }, [MOVE_ALL_OUT_PUMMELING] = { @@ -20696,7 +20690,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_ALL_OUT_PUMMELING, + .battleAnimScript = gBattleAnimMove_AllOutPummeling, }, [MOVE_SUPERSONIC_SKYSTRIKE] = { @@ -20710,7 +20704,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_SUPERSONIC_SKYSTRIKE, + .battleAnimScript = gBattleAnimMove_SupersonicSkystrike, }, [MOVE_ACID_DOWNPOUR] = { @@ -20724,7 +20718,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_ACID_DOWNPOUR, + .battleAnimScript = gBattleAnimMove_AcidDownpour, }, [MOVE_TECTONIC_RAGE] = { @@ -20739,7 +20733,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, - .battleAnimScript = Move_TECTONIC_RAGE, + .battleAnimScript = gBattleAnimMove_TectonicRage, }, [MOVE_CONTINENTAL_CRUSH] = { @@ -20753,7 +20747,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_CONTINENTAL_CRUSH, + .battleAnimScript = gBattleAnimMove_ContinentalCrush, }, [MOVE_SAVAGE_SPIN_OUT] = { @@ -20767,7 +20761,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_SAVAGE_SPIN_OUT, + .battleAnimScript = gBattleAnimMove_SavageSpinOut, }, [MOVE_NEVER_ENDING_NIGHTMARE] = { @@ -20781,7 +20775,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_NEVER_ENDING_NIGHTMARE, + .battleAnimScript = gBattleAnimMove_NeverEndingNightmare, }, [MOVE_CORKSCREW_CRASH] = { @@ -20795,7 +20789,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_CORKSCREW_CRASH, + .battleAnimScript = gBattleAnimMove_CorkscrewCrash, }, [MOVE_INFERNO_OVERDRIVE] = { @@ -20809,7 +20803,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_INFERNO_OVERDRIVE, + .battleAnimScript = gBattleAnimMove_InfernoOverdrive, }, [MOVE_HYDRO_VORTEX] = { @@ -20823,7 +20817,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_HYDRO_VORTEX, + .battleAnimScript = gBattleAnimMove_HydroVortex, }, [MOVE_BLOOM_DOOM] = { @@ -20837,7 +20831,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_BLOOM_DOOM, + .battleAnimScript = gBattleAnimMove_BloomDoom, }, [MOVE_GIGAVOLT_HAVOC] = { @@ -20851,7 +20845,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_GIGAVOLT_HAVOC, + .battleAnimScript = gBattleAnimMove_GigavoltHavoc, }, [MOVE_SHATTERED_PSYCHE] = { @@ -20865,7 +20859,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_SHATTERED_PSYCHE, + .battleAnimScript = gBattleAnimMove_ShatteredPsyche, }, [MOVE_SUBZERO_SLAMMER] = { @@ -20879,7 +20873,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_SUBZERO_SLAMMER, + .battleAnimScript = gBattleAnimMove_SubzeroSlammer, }, [MOVE_DEVASTATING_DRAKE] = { @@ -20893,7 +20887,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_DEVASTATING_DRAKE, + .battleAnimScript = gBattleAnimMove_DevastatingDrake, }, [MOVE_BLACK_HOLE_ECLIPSE] = { @@ -20907,7 +20901,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_BLACK_HOLE_ECLIPSE, + .battleAnimScript = gBattleAnimMove_BlackHoleEclipse, }, [MOVE_TWINKLE_TACKLE] = { @@ -20921,7 +20915,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_TWINKLE_TACKLE, + .battleAnimScript = gBattleAnimMove_TwinkleTackle, }, [MOVE_CATASTROPIKA] = { @@ -20935,7 +20929,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_CATASTROPIKA, + .battleAnimScript = gBattleAnimMove_Catastropika, }, [MOVE_10000000_VOLT_THUNDERBOLT] = { @@ -20950,7 +20944,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, - .battleAnimScript = Move_10000000_VOLT_THUNDERBOLT, + .battleAnimScript = gBattleAnimMove_10000000VoltThunderbolt, }, [MOVE_STOKED_SPARKSURFER] = { @@ -20968,7 +20962,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .moveEffect = MOVE_EFFECT_PARALYSIS, .chance = 100, }), - .battleAnimScript = Move_STOKED_SPARKSURFER, + .battleAnimScript = gBattleAnimMove_StokedSparksurfer, }, [MOVE_EXTREME_EVOBOOST] = { @@ -20982,7 +20976,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_USER, .priority = 0, .category = DAMAGE_CATEGORY_STATUS, - .battleAnimScript = Move_EXTREME_EVOBOOST, + .battleAnimScript = gBattleAnimMove_ExtremeEvoboost, }, [MOVE_PULVERIZING_PANCAKE] = { @@ -20996,7 +20990,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_PULVERIZING_PANCAKE, + .battleAnimScript = gBattleAnimMove_PulverizingPancake, }, [MOVE_GENESIS_SUPERNOVA] = { @@ -21011,7 +21005,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .argument = ARG_SET_PSYCHIC_TERRAIN, // Set Psychic Terrain. If there's a different field terrain active, overwrite it. - .battleAnimScript = Move_GENESIS_SUPERNOVA, + .battleAnimScript = gBattleAnimMove_GenesisSupernova, }, [MOVE_SINISTER_ARROW_RAID] = { @@ -21025,7 +21019,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_SINISTER_ARROW_RAID, + .battleAnimScript = gBattleAnimMove_SinisterArrowRaid, }, [MOVE_MALICIOUS_MOONSAULT] = { @@ -21039,7 +21033,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_MALICIOUS_MOONSAULT, + .battleAnimScript = gBattleAnimMove_MaliciousMoonsault, }, [MOVE_OCEANIC_OPERETTA] = { @@ -21053,7 +21047,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, - .battleAnimScript = Move_OCEANIC_OPERETTA, + .battleAnimScript = gBattleAnimMove_OceanicOperetta, }, [MOVE_SPLINTERED_STORMSHARDS] = { @@ -21068,7 +21062,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = ARG_TRY_REMOVE_TERRAIN_HIT, // Remove the active field terrain if there is one. - .battleAnimScript = Move_SPLINTERED_STORMSHARDS, + .battleAnimScript = gBattleAnimMove_SplinteredStormshards, }, [MOVE_LETS_SNUGGLE_FOREVER] = { @@ -21082,7 +21076,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_LETS_SNUGGLE_FOREVER, + .battleAnimScript = gBattleAnimMove_LetsSnuggleForever, }, [MOVE_CLANGOROUS_SOULBLAZE] = { @@ -21103,7 +21097,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .self = TRUE, .chance = 100, }), - .battleAnimScript = Move_CLANGOROUS_SOULBLAZE, + .battleAnimScript = gBattleAnimMove_ClangorousSoulblaze, }, [MOVE_GUARDIAN_OF_ALOLA] = { @@ -21117,7 +21111,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, - .battleAnimScript = Move_GUARDIAN_OF_ALOLA, + .battleAnimScript = gBattleAnimMove_GuardianOfAlola, }, [MOVE_SEARING_SUNRAZE_SMASH] = { @@ -21132,7 +21126,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .ignoresTargetAbility = TRUE, - .battleAnimScript = Move_SEARING_SUNRAZE_SMASH, + .battleAnimScript = gBattleAnimMove_SearingSunrazeSmash, }, [MOVE_MENACING_MOONRAZE_MAELSTROM] = { @@ -21147,7 +21141,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .ignoresTargetAbility = TRUE, - .battleAnimScript = Move_MENACING_MOONRAZE_MAELSTROM, + .battleAnimScript = gBattleAnimMove_MenacingMoonrazeMaelstrom, }, [MOVE_LIGHT_THAT_BURNS_THE_SKY] = { @@ -21162,7 +21156,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_SPECIAL, .ignoresTargetAbility = TRUE, - .battleAnimScript = Move_LIGHT_THAT_BURNS_THE_SKY, + .battleAnimScript = gBattleAnimMove_LightThatBurnsTheSky, }, [MOVE_SOUL_STEALING_7_STAR_STRIKE] = { @@ -21176,7 +21170,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .battleAnimScript = Move_SOUL_STEALING_7_STAR_STRIKE, + .battleAnimScript = gBattleAnimMove_SoulStealing7StarStrike, }, [MOVE_MAX_GUARD] = @@ -21191,7 +21185,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_USER, .priority = 4, .category = DAMAGE_CATEGORY_STATUS, - .battleAnimScript = Move_MAX_GUARD, + .battleAnimScript = gBattleAnimMove_MaxGuard, }, [MOVE_MAX_FLARE] = @@ -21207,7 +21201,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_SUN, - .battleAnimScript = Move_MAX_FLARE, + .battleAnimScript = gBattleAnimMove_MaxFlare, }, [MOVE_MAX_FLUTTERBY] = @@ -21223,7 +21217,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_SP_ATK, - .battleAnimScript = Move_MAX_FLUTTERBY, + .battleAnimScript = gBattleAnimMove_MaxFlutterby, }, [MOVE_MAX_LIGHTNING] = @@ -21239,7 +21233,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_ELECTRIC_TERRAIN, - .battleAnimScript = Move_MAX_LIGHTNING, + .battleAnimScript = gBattleAnimMove_MaxLightning, }, [MOVE_MAX_STRIKE] = @@ -21255,7 +21249,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_SPEED, - .battleAnimScript = Move_MAX_STRIKE, + .battleAnimScript = gBattleAnimMove_MaxStrike, }, [MOVE_MAX_KNUCKLE] = @@ -21271,7 +21265,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAISE_TEAM_ATTACK, - .battleAnimScript = Move_MAX_KNUCKLE, + .battleAnimScript = gBattleAnimMove_MaxKnuckle, }, [MOVE_MAX_PHANTASM] = @@ -21287,7 +21281,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_DEFENSE, - .battleAnimScript = Move_MAX_PHANTASM, + .battleAnimScript = gBattleAnimMove_MaxPhantasm, }, [MOVE_MAX_HAILSTORM] = @@ -21303,7 +21297,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_HAIL, - .battleAnimScript = Move_MAX_HAILSTORM, + .battleAnimScript = gBattleAnimMove_MaxHailstorm, }, [MOVE_MAX_OOZE] = @@ -21319,7 +21313,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAISE_TEAM_SP_ATK, - .battleAnimScript = Move_MAX_OOZE, + .battleAnimScript = gBattleAnimMove_MaxOoze, }, [MOVE_MAX_GEYSER] = @@ -21335,7 +21329,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAIN, - .battleAnimScript = Move_MAX_GEYSER, + .battleAnimScript = gBattleAnimMove_MaxGeyser, }, [MOVE_MAX_AIRSTREAM] = @@ -21351,7 +21345,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAISE_TEAM_SPEED, - .battleAnimScript = Move_MAX_AIRSTREAM, + .battleAnimScript = gBattleAnimMove_MaxAirstream, }, [MOVE_MAX_STARFALL] = @@ -21367,7 +21361,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_MISTY_TERRAIN, - .battleAnimScript = Move_MAX_STARFALL, + .battleAnimScript = gBattleAnimMove_MaxStarfall, }, [MOVE_MAX_WYRMWIND] = @@ -21383,7 +21377,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_ATTACK, - .battleAnimScript = Move_MAX_WYRMWIND, + .battleAnimScript = gBattleAnimMove_MaxWyrmwind, }, [MOVE_MAX_MINDSTORM] = @@ -21399,7 +21393,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_PSYCHIC_TERRAIN, - .battleAnimScript = Move_MAX_MINDSTORM, + .battleAnimScript = gBattleAnimMove_MaxMindstorm, }, [MOVE_MAX_ROCKFALL] = @@ -21415,7 +21409,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_SANDSTORM, - .battleAnimScript = Move_MAX_ROCKFALL, + .battleAnimScript = gBattleAnimMove_MaxRockfall, }, [MOVE_MAX_QUAKE] = @@ -21432,7 +21426,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAISE_TEAM_SP_DEF, .skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS, - .battleAnimScript = Move_MAX_QUAKE, + .battleAnimScript = gBattleAnimMove_MaxQuake, }, [MOVE_MAX_DARKNESS] = @@ -21448,7 +21442,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_SP_DEF, - .battleAnimScript = Move_MAX_DARKNESS, + .battleAnimScript = gBattleAnimMove_MaxDarkness, }, [MOVE_MAX_OVERGROWTH] = @@ -21464,7 +21458,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_GRASSY_TERRAIN, - .battleAnimScript = Move_MAX_OVERGROWTH, + .battleAnimScript = gBattleAnimMove_MaxOvergrowth, }, [MOVE_MAX_STEELSPIKE] = @@ -21480,7 +21474,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RAISE_TEAM_DEFENSE, - .battleAnimScript = Move_MAX_STEELSPIKE, + .battleAnimScript = gBattleAnimMove_MaxSteelspike, }, [MOVE_G_MAX_VINE_LASH] = @@ -21496,7 +21490,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_VINE_LASH, - .battleAnimScript = Move_G_MAX_VINE_LASH, + .battleAnimScript = gBattleAnimMove_GMaxVineLash, }, [MOVE_G_MAX_WILDFIRE] = @@ -21512,7 +21506,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_WILDFIRE, - .battleAnimScript = Move_G_MAX_WILDFIRE, + .battleAnimScript = gBattleAnimMove_GMaxWildfire, }, [MOVE_G_MAX_CANNONADE] = @@ -21528,7 +21522,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_CANNONADE, - .battleAnimScript = Move_G_MAX_CANNONADE, + .battleAnimScript = gBattleAnimMove_GMaxCannonade, }, [MOVE_G_MAX_BEFUDDLE] = @@ -21544,7 +21538,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_EFFECT_SPORE_FOES, - .battleAnimScript = Move_G_MAX_BEFUDDLE, + .battleAnimScript = gBattleAnimMove_GMaxBefuddle, }, [MOVE_G_MAX_VOLT_CRASH] = @@ -21560,7 +21554,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_PARALYZE_FOES, - .battleAnimScript = Move_G_MAX_VOLT_CRASH, + .battleAnimScript = gBattleAnimMove_GMaxVoltCrash, }, [MOVE_G_MAX_GOLD_RUSH] = @@ -21576,7 +21570,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_CONFUSE_FOES_PAY_DAY, - .battleAnimScript = Move_G_MAX_GOLD_RUSH, + .battleAnimScript = gBattleAnimMove_GMaxGoldRush, }, [MOVE_G_MAX_CHI_STRIKE] = @@ -21592,7 +21586,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_CRIT_PLUS, - .battleAnimScript = Move_G_MAX_CHI_STRIKE, + .battleAnimScript = gBattleAnimMove_GMaxChiStrike, }, [MOVE_G_MAX_TERROR] = @@ -21608,7 +21602,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_MEAN_LOOK, - .battleAnimScript = Move_G_MAX_TERROR, + .battleAnimScript = gBattleAnimMove_GMaxTerror, }, [MOVE_G_MAX_FOAM_BURST] = @@ -21624,7 +21618,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_SPEED_2_FOES, - .battleAnimScript = Move_G_MAX_FOAM_BURST, + .battleAnimScript = gBattleAnimMove_GMaxFoamBurst, }, [MOVE_G_MAX_RESONANCE] = @@ -21640,7 +21634,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_AURORA_VEIL, - .battleAnimScript = Move_G_MAX_RESONANCE, + .battleAnimScript = gBattleAnimMove_GMaxResonance, }, [MOVE_G_MAX_CUDDLE] = @@ -21656,7 +21650,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_INFATUATE_FOES, - .battleAnimScript = Move_G_MAX_CUDDLE, + .battleAnimScript = gBattleAnimMove_GMaxCuddle, }, [MOVE_G_MAX_REPLENISH] = @@ -21672,7 +21666,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_RECYCLE_BERRIES, - .battleAnimScript = Move_G_MAX_REPLENISH, + .battleAnimScript = gBattleAnimMove_GMaxReplenish, }, [MOVE_G_MAX_MALODOR] = @@ -21688,7 +21682,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_POISON_FOES, - .battleAnimScript = Move_G_MAX_MALODOR, + .battleAnimScript = gBattleAnimMove_GMaxMalodor, }, [MOVE_G_MAX_MELTDOWN] = @@ -21704,7 +21698,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_TORMENT_FOES, - .battleAnimScript = Move_G_MAX_MELTDOWN, + .battleAnimScript = gBattleAnimMove_GMaxMeltdown, }, [MOVE_G_MAX_DRUM_SOLO] = @@ -21719,9 +21713,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = MAX_EFFECT_FIXED_POWER, //EFFECT TODO + .argument = MAX_EFFECT_FIXED_POWER, .ignoresTargetAbility = TRUE, - .battleAnimScript = Move_G_MAX_DRUM_SOLO, + .battleAnimScript = gBattleAnimMove_GMaxDrumSolo, }, [MOVE_G_MAX_FIREBALL] = @@ -21736,9 +21730,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = MAX_EFFECT_FIXED_POWER, //EFFECT TODO + .argument = MAX_EFFECT_FIXED_POWER, .ignoresTargetAbility = TRUE, - .battleAnimScript = Move_G_MAX_FIREBALL, + .battleAnimScript = gBattleAnimMove_GMaxFireball, }, [MOVE_G_MAX_HYDROSNIPE] = @@ -21753,9 +21747,9 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = MAX_EFFECT_FIXED_POWER, //EFFECT TODO + .argument = MAX_EFFECT_FIXED_POWER, .ignoresTargetAbility = TRUE, - .battleAnimScript = Move_G_MAX_HYDROSNIPE, + .battleAnimScript = gBattleAnimMove_GMaxHydrosnipe, }, [MOVE_G_MAX_WIND_RAGE] = @@ -21771,7 +21765,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_DEFOG, - .battleAnimScript = Move_G_MAX_WIND_RAGE, + .battleAnimScript = gBattleAnimMove_GMaxWindRage, }, [MOVE_G_MAX_GRAVITAS] = @@ -21787,7 +21781,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_GRAVITY, - .battleAnimScript = Move_G_MAX_GRAVITAS, + .battleAnimScript = gBattleAnimMove_GMaxGravitas, }, [MOVE_G_MAX_STONESURGE] = @@ -21803,7 +21797,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_STEALTH_ROCK, - .battleAnimScript = Move_G_MAX_STONESURGE, + .battleAnimScript = gBattleAnimMove_GMaxStonesurge, }, [MOVE_G_MAX_VOLCALITH] = @@ -21819,7 +21813,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_VOLCALITH, - .battleAnimScript = Move_G_MAX_VOLCALITH, + .battleAnimScript = gBattleAnimMove_GMaxVolcalith, }, [MOVE_G_MAX_TARTNESS] = @@ -21835,7 +21829,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_LOWER_EVASIVENESS_FOES, - .battleAnimScript = Move_G_MAX_TARTNESS, + .battleAnimScript = gBattleAnimMove_GMaxTartness, }, [MOVE_G_MAX_SWEETNESS] = @@ -21851,7 +21845,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_AROMATHERAPY, - .battleAnimScript = Move_G_MAX_SWEETNESS, + .battleAnimScript = gBattleAnimMove_GMaxSweetness, }, [MOVE_G_MAX_SANDBLAST] = @@ -21867,7 +21861,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_SANDBLAST_FOES, - .battleAnimScript = Move_G_MAX_SANDBLAST, + .battleAnimScript = gBattleAnimMove_GMaxSandblast, }, [MOVE_G_MAX_STUN_SHOCK] = @@ -21883,7 +21877,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_POISON_PARALYZE_FOES, - .battleAnimScript = Move_G_MAX_STUN_SHOCK, + .battleAnimScript = gBattleAnimMove_GMaxStunShock, }, [MOVE_G_MAX_CENTIFERNO] = @@ -21899,7 +21893,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_FIRE_SPIN_FOES, - .battleAnimScript = Move_G_MAX_CENTIFERNO, + .battleAnimScript = gBattleAnimMove_GMaxCentiferno, }, [MOVE_G_MAX_SMITE] = @@ -21915,7 +21909,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_CONFUSE_FOES, - .battleAnimScript = Move_G_MAX_SMITE, + .battleAnimScript = gBattleAnimMove_GMaxSmite, }, @@ -21932,7 +21926,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_YAWN_FOE, - .battleAnimScript = Move_G_MAX_SNOOZE, + .battleAnimScript = gBattleAnimMove_GMaxSnooze, }, [MOVE_G_MAX_FINALE] = @@ -21948,7 +21942,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_HEAL_TEAM, - .battleAnimScript = Move_G_MAX_FINALE, + .battleAnimScript = gBattleAnimMove_GMaxFinale, }, [MOVE_G_MAX_STEELSURGE] = @@ -21964,7 +21958,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_STEELSURGE, - .battleAnimScript = Move_G_MAX_STEELSURGE, + .battleAnimScript = gBattleAnimMove_GMaxSteelsurge, }, [MOVE_G_MAX_DEPLETION] = @@ -21980,7 +21974,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, .argument = MAX_EFFECT_SPITE, - .battleAnimScript = Move_G_MAX_DEPLETION, + .battleAnimScript = gBattleAnimMove_GMaxDepletion, }, [MOVE_G_MAX_ONE_BLOW] = @@ -21995,8 +21989,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = MAX_EFFECT_BYPASS_PROTECT, //EFFECT TODO - .battleAnimScript = Move_G_MAX_ONE_BLOW, + .argument = MAX_EFFECT_BYPASS_PROTECT, + .battleAnimScript = gBattleAnimMove_GMaxOneBlow, }, [MOVE_G_MAX_RAPID_FLOW] = @@ -22011,8 +22005,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] = .target = MOVE_TARGET_SELECTED, .priority = 0, .category = DAMAGE_CATEGORY_PHYSICAL, - .argument = MAX_EFFECT_BYPASS_PROTECT, //EFFECT TODO - .battleAnimScript = Move_G_MAX_RAPID_FLOW, + .argument = MAX_EFFECT_BYPASS_PROTECT, + .battleAnimScript = gBattleAnimMove_GMaxRapidFlow, }, }; diff --git a/src/data/object_events/object_event_graphics_info_pointers.h b/src/data/object_events/object_event_graphics_info_pointers.h index 7f487a5ae5..60dc6997db 100755 --- a/src/data/object_events/object_event_graphics_info_pointers.h +++ b/src/data/object_events/object_event_graphics_info_pointers.h @@ -239,7 +239,7 @@ extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HoOh; // Begin pokemon event objects extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PokeBall; extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Follower; - + extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Bard; extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hipster; extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Trader; diff --git a/src/data/object_events/object_event_pic_tables_followers.h b/src/data/object_events/object_event_pic_tables_followers.h index 46c134d911..1e20ef3798 100644 --- a/src/data/object_events/object_event_pic_tables_followers.h +++ b/src/data/object_events/object_event_pic_tables_followers.h @@ -432,9 +432,9 @@ static const struct SpriteFrameImage sPicTable_Primeape[] = { overworld_ascending_frames(gObjectEventPic_Primeape, 4, 4), }; #if P_GEN_9_CROSS_EVOS -/*static const struct SpriteFrameImage sPicTable_Annihilape[] = { +static const struct SpriteFrameImage sPicTable_Annihilape[] = { overworld_ascending_frames(gObjectEventPic_Annihilape, 4, 4), -};*/ +}; #endif //P_GEN_9_CROSS_EVOS #endif //P_FAMILY_MANKEY @@ -1010,7 +1010,7 @@ static const struct SpriteFrameImage sPicTable_Tauros[] = { overworld_ascending_frames(gObjectEventPic_Tauros, 4, 4), }; #if P_PALDEAN_FORMS -/*static const struct SpriteFrameImage sPicTable_TaurosPaldeanCombatBreed[] = { +static const struct SpriteFrameImage sPicTable_TaurosPaldeanCombatBreed[] = { overworld_ascending_frames(gObjectEventPic_TaurosPaldeanCombatBreed, 4, 4), }; static const struct SpriteFrameImage sPicTable_TaurosPaldeanBlazeBreed[] = { @@ -1018,7 +1018,7 @@ static const struct SpriteFrameImage sPicTable_TaurosPaldeanBlazeBreed[] = { }; static const struct SpriteFrameImage sPicTable_TaurosPaldeanAquaBreed[] = { overworld_ascending_frames(gObjectEventPic_TaurosPaldeanAquaBreed, 4, 4), -};*/ +}; #endif //P_PALDEAN_FORMS #endif //P_FAMILY_TAUROS @@ -1426,12 +1426,12 @@ static const struct SpriteFrameImage sPicTable_Quagsire[] = { overworld_ascending_frames(gObjectEventPic_Quagsire, 4, 4), }; #if P_PALDEAN_FORMS -/*static const struct SpriteFrameImage sPicTable_WooperPaldean[] = { +static const struct SpriteFrameImage sPicTable_WooperPaldean[] = { overworld_ascending_frames(gObjectEventPic_WooperPaldean, 4, 4), }; static const struct SpriteFrameImage sPicTable_Clodsire[] = { overworld_ascending_frames(gObjectEventPic_Clodsire, 4, 4), -};*/ +}; #endif //P_PALDEAN_FORMS #endif //P_FAMILY_WOOPER @@ -1560,9 +1560,9 @@ static const struct SpriteFrameImage sPicTable_Girafarig[] = { overworld_ascending_frames(gObjectEventPic_Girafarig, 4, 4), }; #if P_GEN_9_CROSS_EVOS -/*static const struct SpriteFrameImage sPicTable_Farigiraf[] = { +static const struct SpriteFrameImage sPicTable_Farigiraf[] = { overworld_ascending_frames(gObjectEventPic_Farigiraf, 4, 4), -};*/ +}; #endif //P_GEN_9_CROSS_EVOS #endif //P_FAMILY_GIRAFARIG @@ -1580,9 +1580,12 @@ static const struct SpriteFrameImage sPicTable_Dunsparce[] = { overworld_ascending_frames(gObjectEventPic_Dunsparce, 4, 4), }; #if P_GEN_9_CROSS_EVOS -/*static const struct SpriteFrameImage sPicTable_Dudunsparce[] = { - overworld_ascending_frames(gObjectEventPic_Dudunsparce, 4, 4), -};*/ +static const struct SpriteFrameImage sPicTable_DudunsparceTwoSegment[] = { + overworld_ascending_frames(gObjectEventPic_DudunsparceTwoSegment, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_DudunsparceThreeSegment[] = { + overworld_ascending_frames(gObjectEventPic_DudunsparceThreeSegment, 8, 8), +}; #endif //P_GEN_9_CROSS_EVOS @@ -3820,9 +3823,9 @@ static const struct SpriteFrameImage sPicTable_Bisharp[] = { overworld_ascending_frames(gObjectEventPic_Bisharp, 4, 4), }; #if P_GEN_9_CROSS_EVOS -/*static const struct SpriteFrameImage sPicTable_Kingambit[] = { - overworld_ascending_frames(gObjectEventPic_Kingambit, 4, 4), -};*/ +static const struct SpriteFrameImage sPicTable_Kingambit[] = { + overworld_ascending_frames(gObjectEventPic_Kingambit, 8, 8), +}; #endif //P_GEN_9_CROSS_EVOS #endif //P_FAMILY_PAWNIARD @@ -4465,9 +4468,9 @@ static const struct SpriteFrameImage sPicTable_Noivern[] = { static const struct SpriteFrameImage sPicTable_XerneasNeutral[] = { overworld_ascending_frames(gObjectEventPic_XerneasNeutral, 4, 4), }; -/*static const struct SpriteFrameImage sPicTable_XerneasActive[] = { +static const struct SpriteFrameImage sPicTable_XerneasActive[] = { overworld_ascending_frames(gObjectEventPic_XerneasActive, 4, 4), -};*/ +}; #endif //P_FAMILY_XERNEAS #if P_FAMILY_YVELTAL @@ -4481,13 +4484,13 @@ static const struct SpriteFrameImage sPicTable_Yveltal[] = { static const struct SpriteFrameImage sPicTable_Zygarde50[] = { overworld_ascending_frames(gObjectEventPic_Zygarde50, 4, 4), }; -/*static const struct SpriteFrameImage sPicTable_Zygarde10[] = { - overworld_ascending_frames(gObjectEventPic_Zygarde10, 4, 4), -}; -static const struct SpriteFrameImage sPicTable_ZygardeComplete[] = { - overworld_ascending_frames(gObjectEventPic_ZygardeComplete, 4, 4), -}; -*/ +//static const struct SpriteFrameImage sPicTable_Zygarde10[] = { +// overworld_ascending_frames(gObjectEventPic_Zygarde10, 4, 4), +//}; +//static const struct SpriteFrameImage sPicTable_ZygardeComplete[] = { +// overworld_ascending_frames(gObjectEventPic_ZygardeComplete, 4, 4), +//}; + #endif //P_FAMILY_ZYGARDE #if P_FAMILY_DIANCIE @@ -5200,12 +5203,12 @@ static const struct SpriteFrameImage sPicTable_Appletun[] = { #endif //P_GIGANTAMAX_FORMS #if P_GEN_9_CROSS_EVOS -/*static const struct SpriteFrameImage sPicTable_Dipplin[] = { +static const struct SpriteFrameImage sPicTable_Dipplin[] = { overworld_ascending_frames(gObjectEventPic_Dipplin, 4, 4), }; static const struct SpriteFrameImage sPicTable_Hydrapple[] = { - overworld_ascending_frames(gObjectEventPic_Hydrapple, 4, 4), -};*/ + overworld_ascending_frames(gObjectEventPic_Hydrapple, 8, 8), +}; #endif //P_GEN_9_CROSS_EVOS #endif //P_FAMILY_APPLIN @@ -5445,9 +5448,9 @@ static const struct SpriteFrameImage sPicTable_Duraludon[] = { #endif //P_GIGANTAMAX_FORMS #if P_GEN_9_CROSS_EVOS -/*static const struct SpriteFrameImage sPicTable_Archaludon[] = { +static const struct SpriteFrameImage sPicTable_Archaludon[] = { overworld_ascending_frames(gObjectEventPic_Archaludon, 4, 4), -};*/ +}; #endif //P_GEN_9_CROSS_EVOS #endif //P_FAMILY_DURALUDON @@ -5559,7 +5562,7 @@ static const struct SpriteFrameImage sPicTable_CalyrexShadowRider[] = { #endif //P_FAMILY_CALYREX #if P_FAMILY_SPRIGATITO -/*static const struct SpriteFrameImage sPicTable_Sprigatito[] = { +static const struct SpriteFrameImage sPicTable_Sprigatito[] = { overworld_ascending_frames(gObjectEventPic_Sprigatito, 4, 4), }; static const struct SpriteFrameImage sPicTable_Floragato[] = { @@ -5567,11 +5570,11 @@ static const struct SpriteFrameImage sPicTable_Floragato[] = { }; static const struct SpriteFrameImage sPicTable_Meowscarada[] = { overworld_ascending_frames(gObjectEventPic_Meowscarada, 4, 4), -};*/ +}; #endif //P_FAMILY_SPRIGATITO #if P_FAMILY_FUECOCO -/*static const struct SpriteFrameImage sPicTable_Fuecoco[] = { +static const struct SpriteFrameImage sPicTable_Fuecoco[] = { overworld_ascending_frames(gObjectEventPic_Fuecoco, 4, 4), }; static const struct SpriteFrameImage sPicTable_Crocalor[] = { @@ -5579,11 +5582,11 @@ static const struct SpriteFrameImage sPicTable_Crocalor[] = { }; static const struct SpriteFrameImage sPicTable_Skeledirge[] = { overworld_ascending_frames(gObjectEventPic_Skeledirge, 4, 4), -};*/ +}; #endif //P_FAMILY_FUECOCO #if P_FAMILY_QUAXLY -/*static const struct SpriteFrameImage sPicTable_Quaxly[] = { +static const struct SpriteFrameImage sPicTable_Quaxly[] = { overworld_ascending_frames(gObjectEventPic_Quaxly, 4, 4), }; static const struct SpriteFrameImage sPicTable_Quaxwell[] = { @@ -5591,11 +5594,11 @@ static const struct SpriteFrameImage sPicTable_Quaxwell[] = { }; static const struct SpriteFrameImage sPicTable_Quaquaval[] = { overworld_ascending_frames(gObjectEventPic_Quaquaval, 4, 4), -};*/ +}; #endif //P_FAMILY_QUAXLY #if P_FAMILY_LECHONK -/*static const struct SpriteFrameImage sPicTable_Lechonk[] = { +static const struct SpriteFrameImage sPicTable_Lechonk[] = { overworld_ascending_frames(gObjectEventPic_Lechonk, 4, 4), }; static const struct SpriteFrameImage sPicTable_OinkologneMale[] = { @@ -5603,29 +5606,29 @@ static const struct SpriteFrameImage sPicTable_OinkologneMale[] = { }; static const struct SpriteFrameImage sPicTable_OinkologneFemale[] = { overworld_ascending_frames(gObjectEventPic_OinkologneFemale, 4, 4), -};*/ +}; #endif //P_FAMILY_LECHONK #if P_FAMILY_TAROUNTULA -/*static const struct SpriteFrameImage sPicTable_Tarountula[] = { +static const struct SpriteFrameImage sPicTable_Tarountula[] = { overworld_ascending_frames(gObjectEventPic_Tarountula, 4, 4), }; static const struct SpriteFrameImage sPicTable_Spidops[] = { overworld_ascending_frames(gObjectEventPic_Spidops, 4, 4), -};*/ +}; #endif //P_FAMILY_TAROUNTULA #if P_FAMILY_NYMBLE -/*static const struct SpriteFrameImage sPicTable_Nymble[] = { +static const struct SpriteFrameImage sPicTable_Nymble[] = { overworld_ascending_frames(gObjectEventPic_Nymble, 4, 4), }; static const struct SpriteFrameImage sPicTable_Lokix[] = { overworld_ascending_frames(gObjectEventPic_Lokix, 4, 4), -};*/ +}; #endif //P_FAMILY_NYMBLE #if P_FAMILY_PAWMI -/*static const struct SpriteFrameImage sPicTable_Pawmi[] = { +static const struct SpriteFrameImage sPicTable_Pawmi[] = { overworld_ascending_frames(gObjectEventPic_Pawmi, 4, 4), }; static const struct SpriteFrameImage sPicTable_Pawmo[] = { @@ -5633,11 +5636,11 @@ static const struct SpriteFrameImage sPicTable_Pawmo[] = { }; static const struct SpriteFrameImage sPicTable_Pawmot[] = { overworld_ascending_frames(gObjectEventPic_Pawmot, 4, 4), -};*/ +}; #endif //P_FAMILY_PAWMI #if P_FAMILY_TANDEMAUS -/*static const struct SpriteFrameImage sPicTable_Tandemaus[] = { +static const struct SpriteFrameImage sPicTable_Tandemaus[] = { overworld_ascending_frames(gObjectEventPic_Tandemaus, 4, 4), }; static const struct SpriteFrameImage sPicTable_MausholdFamilyOfThree[] = { @@ -5645,20 +5648,20 @@ static const struct SpriteFrameImage sPicTable_MausholdFamilyOfThree[] = { }; static const struct SpriteFrameImage sPicTable_MausholdFamilyOfFour[] = { overworld_ascending_frames(gObjectEventPic_MausholdFamilyOfFour, 4, 4), -};*/ +}; #endif //P_FAMILY_TANDEMAUS #if P_FAMILY_FIDOUGH -/*static const struct SpriteFrameImage sPicTable_Fidough[] = { +static const struct SpriteFrameImage sPicTable_Fidough[] = { overworld_ascending_frames(gObjectEventPic_Fidough, 4, 4), }; static const struct SpriteFrameImage sPicTable_Dachsbun[] = { overworld_ascending_frames(gObjectEventPic_Dachsbun, 4, 4), -};*/ +}; #endif //P_FAMILY_FIDOUGH #if P_FAMILY_SMOLIV -/*static const struct SpriteFrameImage sPicTable_Smoliv[] = { +static const struct SpriteFrameImage sPicTable_Smoliv[] = { overworld_ascending_frames(gObjectEventPic_Smoliv, 4, 4), }; static const struct SpriteFrameImage sPicTable_Dolliv[] = { @@ -5666,11 +5669,11 @@ static const struct SpriteFrameImage sPicTable_Dolliv[] = { }; static const struct SpriteFrameImage sPicTable_Arboliva[] = { overworld_ascending_frames(gObjectEventPic_Arboliva, 4, 4), -};*/ +}; #endif //P_FAMILY_SMOLIV #if P_FAMILY_SQUAWKABILLY -/*static const struct SpriteFrameImage sPicTable_SquawkabillyGreenPlumage[] = { +static const struct SpriteFrameImage sPicTable_SquawkabillyGreenPlumage[] = { overworld_ascending_frames(gObjectEventPic_SquawkabillyGreenPlumage, 4, 4), }; static const struct SpriteFrameImage sPicTable_SquawkabillyBluePlumage[] = { @@ -5681,11 +5684,11 @@ static const struct SpriteFrameImage sPicTable_SquawkabillyYellowPlumage[] = { }; static const struct SpriteFrameImage sPicTable_SquawkabillyWhitePlumage[] = { overworld_ascending_frames(gObjectEventPic_SquawkabillyWhitePlumage, 4, 4), -};*/ +}; #endif //P_FAMILY_SQUAWKABILLY #if P_FAMILY_NACLI -/*static const struct SpriteFrameImage sPicTable_Nacli[] = { +static const struct SpriteFrameImage sPicTable_Nacli[] = { overworld_ascending_frames(gObjectEventPic_Nacli, 4, 4), }; static const struct SpriteFrameImage sPicTable_Naclstack[] = { @@ -5693,11 +5696,11 @@ static const struct SpriteFrameImage sPicTable_Naclstack[] = { }; static const struct SpriteFrameImage sPicTable_Garganacl[] = { overworld_ascending_frames(gObjectEventPic_Garganacl, 4, 4), -};*/ +}; #endif //P_FAMILY_NACLI #if P_FAMILY_CHARCADET -/*static const struct SpriteFrameImage sPicTable_Charcadet[] = { +static const struct SpriteFrameImage sPicTable_Charcadet[] = { overworld_ascending_frames(gObjectEventPic_Charcadet, 4, 4), }; static const struct SpriteFrameImage sPicTable_Armarouge[] = { @@ -5705,98 +5708,98 @@ static const struct SpriteFrameImage sPicTable_Armarouge[] = { }; static const struct SpriteFrameImage sPicTable_Ceruledge[] = { overworld_ascending_frames(gObjectEventPic_Ceruledge, 4, 4), -};*/ +}; #endif //P_FAMILY_CHARCADET #if P_FAMILY_TADBULB -/*static const struct SpriteFrameImage sPicTable_Tadbulb[] = { +static const struct SpriteFrameImage sPicTable_Tadbulb[] = { overworld_ascending_frames(gObjectEventPic_Tadbulb, 4, 4), }; static const struct SpriteFrameImage sPicTable_Bellibolt[] = { overworld_ascending_frames(gObjectEventPic_Bellibolt, 4, 4), -};*/ +}; #endif //P_FAMILY_TADBULB #if P_FAMILY_WATTREL -/*static const struct SpriteFrameImage sPicTable_Wattrel[] = { +static const struct SpriteFrameImage sPicTable_Wattrel[] = { overworld_ascending_frames(gObjectEventPic_Wattrel, 4, 4), }; static const struct SpriteFrameImage sPicTable_Kilowattrel[] = { overworld_ascending_frames(gObjectEventPic_Kilowattrel, 4, 4), -};*/ +}; #endif //P_FAMILY_WATTREL #if P_FAMILY_MASCHIFF -/*static const struct SpriteFrameImage sPicTable_Maschiff[] = { +static const struct SpriteFrameImage sPicTable_Maschiff[] = { overworld_ascending_frames(gObjectEventPic_Maschiff, 4, 4), }; static const struct SpriteFrameImage sPicTable_Mabosstiff[] = { overworld_ascending_frames(gObjectEventPic_Mabosstiff, 4, 4), -};*/ +}; #endif //P_FAMILY_MASCHIFF #if P_FAMILY_SHROODLE -/*static const struct SpriteFrameImage sPicTable_Shroodle[] = { +static const struct SpriteFrameImage sPicTable_Shroodle[] = { overworld_ascending_frames(gObjectEventPic_Shroodle, 4, 4), }; static const struct SpriteFrameImage sPicTable_Grafaiai[] = { overworld_ascending_frames(gObjectEventPic_Grafaiai, 4, 4), -};*/ +}; #endif //P_FAMILY_SHROODLE #if P_FAMILY_BRAMBLIN -/*static const struct SpriteFrameImage sPicTable_Bramblin[] = { +static const struct SpriteFrameImage sPicTable_Bramblin[] = { overworld_ascending_frames(gObjectEventPic_Bramblin, 4, 4), }; static const struct SpriteFrameImage sPicTable_Brambleghast[] = { overworld_ascending_frames(gObjectEventPic_Brambleghast, 4, 4), -};*/ +}; #endif //P_FAMILY_BRAMBLIN #if P_FAMILY_TOEDSCOOL -/*static const struct SpriteFrameImage sPicTable_Toedscool[] = { +static const struct SpriteFrameImage sPicTable_Toedscool[] = { overworld_ascending_frames(gObjectEventPic_Toedscool, 4, 4), }; static const struct SpriteFrameImage sPicTable_Toedscruel[] = { overworld_ascending_frames(gObjectEventPic_Toedscruel, 4, 4), -};*/ +}; #endif //P_FAMILY_TOEDSCOOL #if P_FAMILY_KLAWF -/*static const struct SpriteFrameImage sPicTable_Klawf[] = { +static const struct SpriteFrameImage sPicTable_Klawf[] = { overworld_ascending_frames(gObjectEventPic_Klawf, 4, 4), -};*/ +}; #endif //P_FAMILY_KLAWF #if P_FAMILY_CAPSAKID -/*static const struct SpriteFrameImage sPicTable_Capsakid[] = { +static const struct SpriteFrameImage sPicTable_Capsakid[] = { overworld_ascending_frames(gObjectEventPic_Capsakid, 4, 4), }; static const struct SpriteFrameImage sPicTable_Scovillain[] = { overworld_ascending_frames(gObjectEventPic_Scovillain, 4, 4), -};*/ +}; #endif //P_FAMILY_CAPSAKID #if P_FAMILY_RELLOR -/*static const struct SpriteFrameImage sPicTable_Rellor[] = { +static const struct SpriteFrameImage sPicTable_Rellor[] = { overworld_ascending_frames(gObjectEventPic_Rellor, 4, 4), }; static const struct SpriteFrameImage sPicTable_Rabsca[] = { overworld_ascending_frames(gObjectEventPic_Rabsca, 4, 4), -};*/ +}; #endif //P_FAMILY_RELLOR #if P_FAMILY_FLITTLE -/*static const struct SpriteFrameImage sPicTable_Flittle[] = { +static const struct SpriteFrameImage sPicTable_Flittle[] = { overworld_ascending_frames(gObjectEventPic_Flittle, 4, 4), }; static const struct SpriteFrameImage sPicTable_Espathra[] = { overworld_ascending_frames(gObjectEventPic_Espathra, 4, 4), -};*/ +}; #endif //P_FAMILY_FLITTLE #if P_FAMILY_TINKATINK -/*static const struct SpriteFrameImage sPicTable_Tinkatink[] = { +static const struct SpriteFrameImage sPicTable_Tinkatink[] = { overworld_ascending_frames(gObjectEventPic_Tinkatink, 4, 4), }; static const struct SpriteFrameImage sPicTable_Tinkatuff[] = { @@ -5804,26 +5807,26 @@ static const struct SpriteFrameImage sPicTable_Tinkatuff[] = { }; static const struct SpriteFrameImage sPicTable_Tinkaton[] = { overworld_ascending_frames(gObjectEventPic_Tinkaton, 4, 4), -};*/ +}; #endif //P_FAMILY_TINKATINK #if P_FAMILY_WIGLETT -/*static const struct SpriteFrameImage sPicTable_Wiglett[] = { +static const struct SpriteFrameImage sPicTable_Wiglett[] = { overworld_ascending_frames(gObjectEventPic_Wiglett, 4, 4), }; static const struct SpriteFrameImage sPicTable_Wugtrio[] = { overworld_ascending_frames(gObjectEventPic_Wugtrio, 4, 4), -};*/ +}; #endif //P_FAMILY_WIGLETT #if P_FAMILY_BOMBIRDIER -/*static const struct SpriteFrameImage sPicTable_Bombirdier[] = { +static const struct SpriteFrameImage sPicTable_Bombirdier[] = { overworld_ascending_frames(gObjectEventPic_Bombirdier, 4, 4), -};*/ +}; #endif //P_FAMILY_BOMBIRDIER #if P_FAMILY_FINIZEN -/*static const struct SpriteFrameImage sPicTable_Finizen[] = { +static const struct SpriteFrameImage sPicTable_Finizen[] = { overworld_ascending_frames(gObjectEventPic_Finizen, 4, 4), }; static const struct SpriteFrameImage sPicTable_PalafinZero[] = { @@ -5831,77 +5834,77 @@ static const struct SpriteFrameImage sPicTable_PalafinZero[] = { }; static const struct SpriteFrameImage sPicTable_PalafinHero[] = { overworld_ascending_frames(gObjectEventPic_PalafinHero, 4, 4), -};*/ +}; #endif //P_FAMILY_FINIZEN #if P_FAMILY_VAROOM -/*static const struct SpriteFrameImage sPicTable_Varoom[] = { +static const struct SpriteFrameImage sPicTable_Varoom[] = { overworld_ascending_frames(gObjectEventPic_Varoom, 4, 4), }; static const struct SpriteFrameImage sPicTable_Revavroom[] = { overworld_ascending_frames(gObjectEventPic_Revavroom, 4, 4), -};*/ +}; #endif //P_FAMILY_VAROOM #if P_FAMILY_CYCLIZAR -/*static const struct SpriteFrameImage sPicTable_Cyclizar[] = { +static const struct SpriteFrameImage sPicTable_Cyclizar[] = { overworld_ascending_frames(gObjectEventPic_Cyclizar, 4, 4), -};*/ +}; #endif //P_FAMILY_CYCLIZAR #if P_FAMILY_ORTHWORM -/*static const struct SpriteFrameImage sPicTable_Orthworm[] = { +static const struct SpriteFrameImage sPicTable_Orthworm[] = { overworld_ascending_frames(gObjectEventPic_Orthworm, 4, 4), -};*/ +}; #endif //P_FAMILY_ORTHWORM #if P_FAMILY_GLIMMET -/*static const struct SpriteFrameImage sPicTable_Glimmet[] = { +static const struct SpriteFrameImage sPicTable_Glimmet[] = { overworld_ascending_frames(gObjectEventPic_Glimmet, 4, 4), }; static const struct SpriteFrameImage sPicTable_Glimmora[] = { overworld_ascending_frames(gObjectEventPic_Glimmora, 4, 4), -};*/ +}; #endif //P_FAMILY_GLIMMET #if P_FAMILY_GREAVARD -/*static const struct SpriteFrameImage sPicTable_Greavard[] = { +static const struct SpriteFrameImage sPicTable_Greavard[] = { overworld_ascending_frames(gObjectEventPic_Greavard, 4, 4), }; static const struct SpriteFrameImage sPicTable_Houndstone[] = { overworld_ascending_frames(gObjectEventPic_Houndstone, 4, 4), -};*/ +}; #endif //P_FAMILY_GREAVARD #if P_FAMILY_FLAMIGO -/*static const struct SpriteFrameImage sPicTable_Flamigo[] = { +static const struct SpriteFrameImage sPicTable_Flamigo[] = { overworld_ascending_frames(gObjectEventPic_Flamigo, 4, 4), -};*/ +}; #endif //P_FAMILY_FLAMIGO #if P_FAMILY_CETODDLE -/*static const struct SpriteFrameImage sPicTable_Cetoddle[] = { +static const struct SpriteFrameImage sPicTable_Cetoddle[] = { overworld_ascending_frames(gObjectEventPic_Cetoddle, 4, 4), }; static const struct SpriteFrameImage sPicTable_Cetitan[] = { overworld_ascending_frames(gObjectEventPic_Cetitan, 4, 4), -};*/ +}; #endif //P_FAMILY_CETODDLE #if P_FAMILY_VELUZA -/*static const struct SpriteFrameImage sPicTable_Veluza[] = { +static const struct SpriteFrameImage sPicTable_Veluza[] = { overworld_ascending_frames(gObjectEventPic_Veluza, 4, 4), -};*/ +}; #endif //P_FAMILY_VELUZA #if P_FAMILY_DONDOZO -/*static const struct SpriteFrameImage sPicTable_Dondozo[] = { - overworld_ascending_frames(gObjectEventPic_Dondozo, 4, 4), -};*/ +static const struct SpriteFrameImage sPicTable_Dondozo[] = { + overworld_ascending_frames(gObjectEventPic_Dondozo, 8, 8), +}; #endif //P_FAMILY_DONDOZO #if P_FAMILY_TATSUGIRI -/*static const struct SpriteFrameImage sPicTable_TatsugiriCurly[] = { +static const struct SpriteFrameImage sPicTable_TatsugiriCurly[] = { overworld_ascending_frames(gObjectEventPic_TatsugiriCurly, 4, 4), }; static const struct SpriteFrameImage sPicTable_TatsugiriDroopy[] = { @@ -5909,83 +5912,83 @@ static const struct SpriteFrameImage sPicTable_TatsugiriDroopy[] = { }; static const struct SpriteFrameImage sPicTable_TatsugiriStretchy[] = { overworld_ascending_frames(gObjectEventPic_TatsugiriStretchy, 4, 4), -};*/ +}; #endif //P_FAMILY_DONDOZO #if P_FAMILY_GREAT_TUSK -/*static const struct SpriteFrameImage sPicTable_GreatTusk[] = { +static const struct SpriteFrameImage sPicTable_GreatTusk[] = { overworld_ascending_frames(gObjectEventPic_GreatTusk, 4, 4), -};*/ +}; #endif //P_FAMILY_GREAT_TUSK #if P_FAMILY_SCREAM_TAIL -/*static const struct SpriteFrameImage sPicTable_ScreamTail[] = { +static const struct SpriteFrameImage sPicTable_ScreamTail[] = { overworld_ascending_frames(gObjectEventPic_ScreamTail, 4, 4), -};*/ +}; #endif //P_FAMILY_SCREAM_TAIL #if P_FAMILY_BRUTE_BONNET -/*static const struct SpriteFrameImage sPicTable_BruteBonnet[] = { +static const struct SpriteFrameImage sPicTable_BruteBonnet[] = { overworld_ascending_frames(gObjectEventPic_BruteBonnet, 4, 4), -};*/ +}; #endif //P_FAMILY_BRUTE_BONNET #if P_FAMILY_FLUTTER_MANE -/*static const struct SpriteFrameImage sPicTable_FlutterMane[] = { +static const struct SpriteFrameImage sPicTable_FlutterMane[] = { overworld_ascending_frames(gObjectEventPic_FlutterMane, 4, 4), -};*/ +}; #endif //P_FAMILY_FLUTTER_MANE #if P_FAMILY_SLITHER_WING -/*static const struct SpriteFrameImage sPicTable_SlitherWing[] = { +static const struct SpriteFrameImage sPicTable_SlitherWing[] = { overworld_ascending_frames(gObjectEventPic_SlitherWing, 4, 4), -};*/ +}; #endif //P_FAMILY_SLITHER_WING #if P_FAMILY_SANDY_SHOCKS -/*static const struct SpriteFrameImage sPicTable_SandyShocks[] = { +static const struct SpriteFrameImage sPicTable_SandyShocks[] = { overworld_ascending_frames(gObjectEventPic_SandyShocks, 4, 4), -};*/ +}; #endif //P_FAMILY_SANDY_SHOCKS #if P_FAMILY_IRON_TREADS -/*static const struct SpriteFrameImage sPicTable_IronTreads[] = { +static const struct SpriteFrameImage sPicTable_IronTreads[] = { overworld_ascending_frames(gObjectEventPic_IronTreads, 4, 4), -};*/ +}; #endif //P_FAMILY_IRON_TREADS #if P_FAMILY_IRON_BUNDLE -/*static const struct SpriteFrameImage sPicTable_IronBundle[] = { +static const struct SpriteFrameImage sPicTable_IronBundle[] = { overworld_ascending_frames(gObjectEventPic_IronBundle, 4, 4), -};*/ +}; #endif //P_FAMILY_IRON_BUNDLE #if P_FAMILY_IRON_HANDS -/*static const struct SpriteFrameImage sPicTable_IronHands[] = { +static const struct SpriteFrameImage sPicTable_IronHands[] = { overworld_ascending_frames(gObjectEventPic_IronHands, 4, 4), -};*/ +}; #endif //P_FAMILY_IRON_HANDS #if P_FAMILY_IRON_JUGULIS -/*static const struct SpriteFrameImage sPicTable_IronJugulis[] = { +static const struct SpriteFrameImage sPicTable_IronJugulis[] = { overworld_ascending_frames(gObjectEventPic_IronJugulis, 4, 4), -};*/ +}; #endif //P_FAMILY_IRON_JUGULIS #if P_FAMILY_IRON_MOTH -/*static const struct SpriteFrameImage sPicTable_IronMoth[] = { +static const struct SpriteFrameImage sPicTable_IronMoth[] = { overworld_ascending_frames(gObjectEventPic_IronMoth, 4, 4), -};*/ +}; #endif //P_FAMILY_IRON_MOTH #if P_FAMILY_IRON_THORNS -/*static const struct SpriteFrameImage sPicTable_IronThorns[] = { +static const struct SpriteFrameImage sPicTable_IronThorns[] = { overworld_ascending_frames(gObjectEventPic_IronThorns, 4, 4), -};*/ +}; #endif //P_FAMILY_IRON_THORNS #if P_FAMILY_FRIGIBAX -/*static const struct SpriteFrameImage sPicTable_Frigibax[] = { +static const struct SpriteFrameImage sPicTable_Frigibax[] = { overworld_ascending_frames(gObjectEventPic_Frigibax, 4, 4), }; static const struct SpriteFrameImage sPicTable_Arctibax[] = { @@ -5993,110 +5996,110 @@ static const struct SpriteFrameImage sPicTable_Arctibax[] = { }; static const struct SpriteFrameImage sPicTable_Baxcalibur[] = { overworld_ascending_frames(gObjectEventPic_Baxcalibur, 4, 4), -};*/ +}; #endif //P_FAMILY_FRIGIBAX #if P_FAMILY_GIMMIGHOUL -/*static const struct SpriteFrameImage sPicTable_GimmighoulChest[] = { +static const struct SpriteFrameImage sPicTable_GimmighoulChest[] = { overworld_ascending_frames(gObjectEventPic_GimmighoulChest, 4, 4), }; -static const struct SpriteFrameImage sPicTable_GimmighoulRoaming[] = { - overworld_ascending_frames(gObjectEventPic_GimmighoulRoaming, 4, 4), -}; +//static const struct SpriteFrameImage sPicTable_GimmighoulRoaming[] = { +// overworld_ascending_frames(gObjectEventPic_GimmighoulRoaming, 4, 4), +//}; static const struct SpriteFrameImage sPicTable_Gholdengo[] = { overworld_ascending_frames(gObjectEventPic_Gholdengo, 4, 4), -};*/ +}; #endif //P_FAMILY_GIMMIGHOUL #if P_FAMILY_WO_CHIEN -/*static const struct SpriteFrameImage sPicTable_WoChien[] = { +static const struct SpriteFrameImage sPicTable_WoChien[] = { overworld_ascending_frames(gObjectEventPic_WoChien, 4, 4), -};*/ +}; #endif //P_FAMILY_WO_CHIEN #if P_FAMILY_CHIEN_PAO -/*static const struct SpriteFrameImage sPicTable_ChienPao[] = { +static const struct SpriteFrameImage sPicTable_ChienPao[] = { overworld_ascending_frames(gObjectEventPic_ChienPao, 4, 4), -};*/ +}; #endif //P_FAMILY_CHIEN_PAO #if P_FAMILY_TING_LU -/*static const struct SpriteFrameImage sPicTable_TingLu[] = { +static const struct SpriteFrameImage sPicTable_TingLu[] = { overworld_ascending_frames(gObjectEventPic_TingLu, 4, 4), -};*/ +}; #endif //P_FAMILY_TING_LU #if P_FAMILY_CHI_YU -/*static const struct SpriteFrameImage sPicTable_ChiYu[] = { +static const struct SpriteFrameImage sPicTable_ChiYu[] = { overworld_ascending_frames(gObjectEventPic_ChiYu, 4, 4), -};*/ +}; #endif //P_FAMILY_CHI_YU #if P_FAMILY_ROARING_MOON -/*static const struct SpriteFrameImage sPicTable_RoaringMoon[] = { +static const struct SpriteFrameImage sPicTable_RoaringMoon[] = { overworld_ascending_frames(gObjectEventPic_RoaringMoon, 4, 4), -};*/ +}; #endif //P_FAMILY_ROARING_MOON #if P_FAMILY_IRON_VALIANT -/*static const struct SpriteFrameImage sPicTable_IronValiant[] = { +static const struct SpriteFrameImage sPicTable_IronValiant[] = { overworld_ascending_frames(gObjectEventPic_IronValiant, 4, 4), -};*/ +}; #endif //P_FAMILY_IRON_VALIANT #if P_FAMILY_KORAIDON -/*static const struct SpriteFrameImage sPicTable_Koraidon[] = { - overworld_ascending_frames(gObjectEventPic_Koraidon, 4, 4), -};*/ +static const struct SpriteFrameImage sPicTable_Koraidon[] = { + overworld_ascending_frames(gObjectEventPic_Koraidon, 8, 8), +}; #endif //P_FAMILY_KORAIDON #if P_FAMILY_MIRAIDON -/*static const struct SpriteFrameImage sPicTable_Miraidon[] = { - overworld_ascending_frames(gObjectEventPic_Miraidon, 4, 4), -};*/ +static const struct SpriteFrameImage sPicTable_Miraidon[] = { + overworld_ascending_frames(gObjectEventPic_Miraidon, 8, 8), +}; #endif //P_FAMILY_MIRAIDON #if P_FAMILY_WALKING_WAKE -/*static const struct SpriteFrameImage sPicTable_WalkingWake[] = { +static const struct SpriteFrameImage sPicTable_WalkingWake[] = { overworld_ascending_frames(gObjectEventPic_WalkingWake, 4, 4), -};*/ +}; #endif //P_FAMILY_WALKING_WAKE #if P_FAMILY_IRON_LEAVES -/*static const struct SpriteFrameImage sPicTable_IronLeaves[] = { +static const struct SpriteFrameImage sPicTable_IronLeaves[] = { overworld_ascending_frames(gObjectEventPic_IronLeaves, 4, 4), -};*/ +}; #endif //P_FAMILY_IRON_LEAVES #if P_FAMILY_POLTCHAGEIST -/*static const struct SpriteFrameImage sPicTable_Poltchageist[] = { +static const struct SpriteFrameImage sPicTable_Poltchageist[] = { overworld_ascending_frames(gObjectEventPic_Poltchageist, 4, 4), }; static const struct SpriteFrameImage sPicTable_Sinistcha[] = { overworld_ascending_frames(gObjectEventPic_Sinistcha, 4, 4), -};*/ +}; #endif //P_FAMILY_POLTCHAGEIST #if P_FAMILY_OKIDOGI -/*static const struct SpriteFrameImage sPicTable_Okidogi[] = { +static const struct SpriteFrameImage sPicTable_Okidogi[] = { overworld_ascending_frames(gObjectEventPic_Okidogi, 4, 4), -};*/ +}; #endif //P_FAMILY_OKIDOGI #if P_FAMILY_MUNKIDORI -/*static const struct SpriteFrameImage sPicTable_Munkidori[] = { +static const struct SpriteFrameImage sPicTable_Munkidori[] = { overworld_ascending_frames(gObjectEventPic_Munkidori, 4, 4), -};*/ +}; #endif //P_FAMILY_MUNKIDORI #if P_FAMILY_FEZANDIPITI -/*static const struct SpriteFrameImage sPicTable_Fezandipiti[] = { +static const struct SpriteFrameImage sPicTable_Fezandipiti[] = { overworld_ascending_frames(gObjectEventPic_Fezandipiti, 4, 4), -};*/ +}; #endif //P_FAMILY_FEZANDIPITI #if P_FAMILY_OGERPON -/*static const struct SpriteFrameImage sPicTable_OgerponTealMask[] = { +static const struct SpriteFrameImage sPicTable_OgerponTealMask[] = { overworld_ascending_frames(gObjectEventPic_OgerponTealMask, 4, 4), }; static const struct SpriteFrameImage sPicTable_OgerponWellspringMask[] = { @@ -6107,49 +6110,61 @@ static const struct SpriteFrameImage sPicTable_OgerponHearthflameMask[] = { }; static const struct SpriteFrameImage sPicTable_OgerponCornerstoneMask[] = { overworld_ascending_frames(gObjectEventPic_OgerponCornerstoneMask, 4, 4), -};*/ +}; +static const struct SpriteFrameImage sPicTable_OgerponTealMaskTera[] = { + overworld_ascending_frames(gObjectEventPic_OgerponTealMask, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_OgerponWellspringMaskTera[] = { + overworld_ascending_frames(gObjectEventPic_OgerponWellspringMask, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_OgerponHearthflameMaskTera[] = { + overworld_ascending_frames(gObjectEventPic_OgerponHearthflameMask, 4, 4), +}; +static const struct SpriteFrameImage sPicTable_OgerponCornerstoneMaskTera[] = { + overworld_ascending_frames(gObjectEventPic_OgerponCornerstoneMask, 4, 4), +}; #endif //P_FAMILY_OGERPON #if P_FAMILY_GOUGING_FIRE -/*static const struct SpriteFrameImage sPicTable_GougingFire[] = { +static const struct SpriteFrameImage sPicTable_GougingFire[] = { overworld_ascending_frames(gObjectEventPic_GougingFire, 4, 4), -};*/ +}; #endif //P_FAMILY_GOUGING_FIRE #if P_FAMILY_RAGING_BOLT -/*static const struct SpriteFrameImage sPicTable_RagingBolt[] = { - overworld_ascending_frames(gObjectEventPic_RagingBolt, 4, 4), -};*/ +static const struct SpriteFrameImage sPicTable_RagingBolt[] = { + overworld_ascending_frames(gObjectEventPic_RagingBolt, 8, 8), +}; #endif //P_FAMILY_RAGING_BOLT #if P_FAMILY_IRON_BOULDER -/*static const struct SpriteFrameImage sPicTable_IronBoulder[] = { +static const struct SpriteFrameImage sPicTable_IronBoulder[] = { overworld_ascending_frames(gObjectEventPic_IronBoulder, 4, 4), -};*/ +}; #endif //P_FAMILY_IRON_BOULDER #if P_FAMILY_IRON_CROWN -/*static const struct SpriteFrameImage sPicTable_IronCrown[] = { +static const struct SpriteFrameImage sPicTable_IronCrown[] = { overworld_ascending_frames(gObjectEventPic_IronCrown, 4, 4), -};*/ +}; #endif //P_FAMILY_IRON_CROWN #if P_FAMILY_TERAPAGOS -/*static const struct SpriteFrameImage sPicTable_TerapagosNormal[] = { +static const struct SpriteFrameImage sPicTable_TerapagosNormal[] = { overworld_ascending_frames(gObjectEventPic_TerapagosNormal, 4, 4), }; static const struct SpriteFrameImage sPicTable_TerapagosTerastal[] = { overworld_ascending_frames(gObjectEventPic_TerapagosTerastal, 4, 4), }; -static const struct SpriteFrameImage sPicTable_TerapagosStellar[] = { - overworld_ascending_frames(gObjectEventPic_TerapagosStellar, 4, 4), -};*/ +//static const struct SpriteFrameImage sPicTable_TerapagosStellar[] = { +// overworld_ascending_frames(gObjectEventPic_TerapagosStellar, 4, 4), +//}; #endif //P_FAMILY_TERAPAGOS #if P_FAMILY_PECHARUNT -/*static const struct SpriteFrameImage sPicTable_Pecharunt[] = { +static const struct SpriteFrameImage sPicTable_Pecharunt[] = { overworld_ascending_frames(gObjectEventPic_Pecharunt, 4, 4), -};*/ +}; #endif //P_FAMILY_PECHARUNT #endif //OW_POKEMON_OBJECT_EVENTS diff --git a/src/data/party_menu.h b/src/data/party_menu.h index 99488d4ebe..841cedca88 100644 --- a/src/data/party_menu.h +++ b/src/data/party_menu.h @@ -1140,11 +1140,18 @@ static const u8 *const sUnused_StatStrings[] = gText_Speed2 }; +#define ROTOM_BASE_MOVE MOVE_THUNDER_SHOCK +#define ROTOM_HEAT_MOVE MOVE_OVERHEAT +#define ROTOM_WASH_MOVE MOVE_HYDRO_PUMP +#define ROTOM_FROST_MOVE MOVE_BLIZZARD +#define ROTOM_FAN_MOVE MOVE_AIR_SLASH +#define ROTOM_MOW_MOVE MOVE_LEAF_STORM + static const u16 sRotomFormChangeMoves[5] = { - MOVE_HYDRO_PUMP, - MOVE_BLIZZARD, - MOVE_OVERHEAT, - MOVE_AIR_SLASH, - MOVE_LEAF_STORM, + ROTOM_HEAT_MOVE, + ROTOM_WASH_MOVE, + ROTOM_FROST_MOVE, + ROTOM_FAN_MOVE, + ROTOM_MOW_MOVE, }; diff --git a/src/data/pokemon/level_up_learnsets/gen_3.h b/src/data/pokemon/level_up_learnsets/gen_3.h index 35af1dfbe6..99b8cc397f 100644 --- a/src/data/pokemon/level_up_learnsets/gen_3.h +++ b/src/data/pokemon/level_up_learnsets/gen_3.h @@ -3620,7 +3620,7 @@ static const struct LevelUpMove sMoltresGalarianLevelUpLearnset[] = { LEVEL_UP_MOVE(60, MOVE_ENDURE), LEVEL_UP_MOVE(65, MOVE_MEMENTO), LEVEL_UP_MOVE(70, MOVE_SKY_ATTACK), - LEVEL_UP_END + LEVEL_UP_END }; #endif //P_GALARIAN_FORMS #endif //P_FAMILY_MOLTRES diff --git a/src/data/pokemon/pokedex_orders.h b/src/data/pokemon/pokedex_orders.h index f7bd77cf12..21968dd6ea 100644 --- a/src/data/pokemon/pokedex_orders.h +++ b/src/data/pokemon/pokedex_orders.h @@ -1604,7 +1604,7 @@ const u16 gPokedexOrder_Weight[] = NATIONAL_DEX_MORGREM, // 28.7 lbs / 13.0 kg NATIONAL_DEX_IVYSAUR, - //NATIONAL_DEX_VOLTORB_HISUIAN, + //NATIONAL_DEX_VOLTORB_HISUIAN, //NATIONAL_DEX_BANETTE_MEGA, NATIONAL_DEX_MIME_JR, NATIONAL_DEX_LAMPENT, diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index 4f21223eee..b0945ed43f 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -11,6 +11,14 @@ #define FOOTPRINT(sprite) #endif +#if B_ENEMY_MON_SHADOW_STYLE >= GEN_4 +#define SHADOW(x, y, size) .enemyShadowXOffset = x, .enemyShadowYOffset = y, .enemyShadowSize = size, +#define NO_SHADOW .suppressEnemyShadow = TRUE, +#else +#define SHADOW(x, y, size) .enemyShadowXOffset = 0, .enemyShadowYOffset = 0, .enemyShadowSize = 0, +#define NO_SHADOW .suppressEnemyShadow = FALSE, +#endif + #define SIZE_32x32 1 #define SIZE_64x64 0 @@ -60,12 +68,6 @@ #define FLIP 0 #define NO_FLIP 1 -#if POKEMON_NAME_LENGTH >= 12 -#define HANDLE_EXPANDED_SPECIES_NAME(_name, ...) _(DEFAULT(_name, __VA_ARGS__)) -#else -#define HANDLE_EXPANDED_SPECIES_NAME(_name, ...) _(_name) -#endif - const struct SpeciesInfo gSpeciesInfo[] = { [SPECIES_NONE] = @@ -211,7 +213,7 @@ const struct SpeciesInfo gSpeciesInfo[] = {EVO_ITEM, ITEM_MOOMOO_MILK, SPECIES_NONE}), //.formSpeciesIdTable = sNoneFormSpeciesIdTable, //.formChangeTable = sNoneFormChangeTable, - .allPerfectIVs = TRUE, + //.perfectIVCount = NUM_STATS, }, */ }; diff --git a/src/data/pokemon/species_info/gen_1_families.h b/src/data/pokemon/species_info/gen_1_families.h index e35bb848b7..bb5ba4a0d4 100644 --- a/src/data/pokemon/species_info/gen_1_families.h +++ b/src/data/pokemon/species_info/gen_1_families.h @@ -51,6 +51,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Bulbasaur, .iconSprite = gMonIcon_Bulbasaur, .iconPalIndex = 4, + SHADOW(1, -1, SHADOW_SIZE_S) FOOTPRINT(Bulbasaur) OVERWORLD( sPicTable_Bulbasaur, @@ -114,6 +115,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Ivysaur, .iconSprite = gMonIcon_Ivysaur, .iconPalIndex = 4, + SHADOW(-1, 3, SHADOW_SIZE_L) FOOTPRINT(Ivysaur) OVERWORLD( sPicTable_Ivysaur, @@ -186,6 +188,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Venusaur, .iconSprite = gMonIcon_Venusaur, .iconPalIndex = 4, + SHADOW(2, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Venusaur) OVERWORLD( sPicTable_Venusaur, @@ -249,6 +252,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_VenusaurMega, .iconSprite = gMonIcon_VenusaurMega, .iconPalIndex = 4, + SHADOW(2, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Venusaur) .isMegaEvolution = TRUE, .levelUpLearnset = sVenusaurLevelUpLearnset, @@ -307,6 +311,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_VenusaurGigantamax, .iconSprite = gMonIcon_VenusaurGigantamax, .iconPalIndex = 0, + SHADOW(2, 4, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Venusaur) .isGigantamax = TRUE, .levelUpLearnset = sVenusaurLevelUpLearnset, @@ -365,6 +370,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Charmander, .iconSprite = gMonIcon_Charmander, .iconPalIndex = 0, + SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Charmander) OVERWORLD( sPicTable_Charmander, @@ -428,6 +434,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Charmeleon, .iconSprite = gMonIcon_Charmeleon, .iconPalIndex = 0, + SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Charmeleon) OVERWORLD( sPicTable_Charmeleon, @@ -495,6 +502,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Charizard, .iconSprite = gMonIcon_Charizard, .iconPalIndex = 0, + SHADOW(2, 13, SHADOW_SIZE_L) FOOTPRINT(Charizard) OVERWORLD( sPicTable_Charizard, @@ -557,6 +565,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_CharizardMegaX, .iconSprite = gMonIcon_CharizardMegaX, .iconPalIndex = 0, + SHADOW(2, 13, SHADOW_SIZE_L) FOOTPRINT(Charizard) .isMegaEvolution = TRUE, .levelUpLearnset = sCharizardLevelUpLearnset, @@ -612,6 +621,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_CharizardMegaY, .iconSprite = gMonIcon_CharizardMegaY, .iconPalIndex = 0, + SHADOW(-1, 14, SHADOW_SIZE_L) FOOTPRINT(Charizard) .isMegaEvolution = TRUE, .levelUpLearnset = sCharizardLevelUpLearnset, @@ -669,6 +679,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_CharizardGigantamax, .iconSprite = gMonIcon_CharizardGigantamax, .iconPalIndex = 0, + SHADOW(1, 13, SHADOW_SIZE_L) FOOTPRINT(Charizard) .isGigantamax = TRUE, .levelUpLearnset = sCharizardLevelUpLearnset, @@ -727,6 +738,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Squirtle, .iconSprite = gMonIcon_Squirtle, .iconPalIndex = 0, + SHADOW(-3, 2, SHADOW_SIZE_S) FOOTPRINT(Squirtle) OVERWORLD( sPicTable_Squirtle, @@ -790,6 +802,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Wartortle, .iconSprite = gMonIcon_Wartortle, .iconPalIndex = 2, + SHADOW(0, 6, SHADOW_SIZE_M) FOOTPRINT(Wartortle) OVERWORLD( sPicTable_Wartortle, @@ -858,6 +871,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Blastoise, .iconSprite = gMonIcon_Blastoise, .iconPalIndex = 2, + SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Blastoise) OVERWORLD( sPicTable_Blastoise, @@ -921,6 +935,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_BlastoiseMega, .iconSprite = gMonIcon_BlastoiseMega, .iconPalIndex = 2, + SHADOW(4, 11, SHADOW_SIZE_L) FOOTPRINT(Blastoise) .isMegaEvolution = TRUE, .levelUpLearnset = sBlastoiseLevelUpLearnset, @@ -978,6 +993,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_BlastoiseGigantamax, .iconSprite = gMonIcon_BlastoiseGigantamax, .iconPalIndex = 0, + SHADOW(-2, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Blastoise) .isGigantamax = TRUE, .levelUpLearnset = sBlastoiseLevelUpLearnset, @@ -1036,6 +1052,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Caterpie, .iconSprite = gMonIcon_Caterpie, .iconPalIndex = 1, + SHADOW(4, 1, SHADOW_SIZE_S) FOOTPRINT(Caterpie) OVERWORLD( sPicTable_Caterpie, @@ -1098,6 +1115,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Metapod, .iconSprite = gMonIcon_Metapod, .iconPalIndex = 1, + SHADOW(3, 0, SHADOW_SIZE_S) FOOTPRINT(Metapod) OVERWORLD( sPicTable_Metapod, @@ -1177,6 +1195,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Butterfree, .iconSprite = gMonIcon_Butterfree, .iconPalIndex = 0, + SHADOW(-3, 13, SHADOW_SIZE_S) FOOTPRINT(Butterfree) OVERWORLD( sPicTable_Butterfree, @@ -1243,6 +1262,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_ButterfreeGigantamax, .iconSprite = gMonIcon_ButterfreeGigantamax, .iconPalIndex = 0, + SHADOW(-4, 15, SHADOW_SIZE_S) FOOTPRINT(Butterfree) .isGigantamax = TRUE, .levelUpLearnset = sButterfreeLevelUpLearnset, @@ -1302,6 +1322,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Weedle, .iconSprite = gMonIcon_Weedle, .iconPalIndex = 2, + SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Weedle) OVERWORLD( sPicTable_Weedle, @@ -1365,6 +1386,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Kakuna, .iconSprite = gMonIcon_Kakuna, .iconPalIndex = 2, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Kakuna) OVERWORLD( sPicTable_Kakuna, @@ -1440,6 +1462,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Beedrill, .iconSprite = gMonIcon_Beedrill, .iconPalIndex = 2, + SHADOW(4, 15, SHADOW_SIZE_M) FOOTPRINT(Beedrill) OVERWORLD( sPicTable_Beedrill, @@ -1506,6 +1529,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_BeedrillMega, .iconSprite = gMonIcon_BeedrillMega, .iconPalIndex = 2, + SHADOW(1, 14, SHADOW_SIZE_S) FOOTPRINT(Beedrill) .isMegaEvolution = TRUE, .levelUpLearnset = sBeedrillLevelUpLearnset, @@ -1568,6 +1592,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Pidgey, .iconSprite = gMonIcon_Pidgey, .iconPalIndex = 0, + SHADOW(-1, -1, SHADOW_SIZE_S) FOOTPRINT(Pidgey) OVERWORLD( sPicTable_Pidgey, @@ -1635,6 +1660,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Pidgeotto, .iconSprite = gMonIcon_Pidgeotto, .iconPalIndex = 0, + SHADOW(-4, 6, SHADOW_SIZE_M) FOOTPRINT(Pidgeotto) OVERWORLD( sPicTable_Pidgeotto, @@ -1711,6 +1737,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Pidgeot, .iconSprite = gMonIcon_Pidgeot, .iconPalIndex = 0, + SHADOW(-7, 14, SHADOW_SIZE_M) FOOTPRINT(Pidgeot) OVERWORLD( sPicTable_Pidgeot, @@ -1774,6 +1801,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PidgeotMega, .iconSprite = gMonIcon_PidgeotMega, .iconPalIndex = 0, + SHADOW(-7, 19, SHADOW_SIZE_M) FOOTPRINT(Pidgeot) .isMegaEvolution = TRUE, .levelUpLearnset = sPidgeotLevelUpLearnset, @@ -1836,6 +1864,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Rattata, .iconSprite = gMonIcon_Rattata, .iconPalIndex = 2, + SHADOW(1, -3, SHADOW_SIZE_S) FOOTPRINT(Rattata) OVERWORLD( sPicTable_Rattata, @@ -1903,6 +1932,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Raticate, .iconSprite = gMonIcon_Raticate, .iconPalIndex = 2, + SHADOW(0, 8, SHADOW_SIZE_L) FOOTPRINT(Raticate) OVERWORLD( sPicTable_Raticate, @@ -1966,6 +1996,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_RattataAlolan, .iconSprite = gMonIcon_RattataAlolan, .iconPalIndex = 2, + SHADOW(-3, 2, SHADOW_SIZE_S) FOOTPRINT(Rattata) OVERWORLD( sPicTable_RattataAlolan, @@ -2028,6 +2059,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_RaticateAlolan, .iconSprite = gMonIcon_RaticateAlolan, .iconPalIndex = 2, + SHADOW(-4, 3, SHADOW_SIZE_L) FOOTPRINT(Raticate) OVERWORLD( sPicTable_RaticateAlolan, @@ -2087,9 +2119,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_RaticateAlolan, .iconSprite = gMonIcon_RaticateAlolan, .iconPalIndex = 2, + SHADOW(-4, 3, SHADOW_SIZE_L) FOOTPRINT(Raticate) .isTotem = TRUE, .isAlolanForm = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRaticateAlolanLevelUpLearnset, .teachableLearnset = sRaticateAlolanTeachableLearnset, .formSpeciesIdTable = sRaticateFormSpeciesIdTable, @@ -2146,6 +2180,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Spearow, .iconSprite = gMonIcon_Spearow, .iconPalIndex = 0, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Spearow) OVERWORLD( sPicTable_Spearow, @@ -2211,6 +2246,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Fearow, .iconSprite = gMonIcon_Fearow, .iconPalIndex = 0, + SHADOW(0, 17, SHADOW_SIZE_M) FOOTPRINT(Fearow) OVERWORLD( sPicTable_Fearow, @@ -2274,6 +2310,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Ekans, .iconSprite = gMonIcon_Ekans, .iconPalIndex = 2, + SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Ekans) OVERWORLD( sPicTable_Ekans, @@ -2342,6 +2379,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Arbok, .iconSprite = gMonIcon_Arbok, .iconPalIndex = 2, + SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Arbok) OVERWORLD( sPicTable_Arbok, @@ -2402,6 +2440,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Pichu, .iconSprite = gMonIcon_Pichu, .iconPalIndex = 1, + SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Pichu) OVERWORLD( sPicTable_Pichu, @@ -2462,6 +2501,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PichuSpikyEared, .iconSprite = gMonIcon_PichuSpikyEared, .iconPalIndex = 1, + SHADOW(2, 0, SHADOW_SIZE_S) FOOTPRINT(Pichu) OVERWORLD( sPicTable_PichuSpikyEared, @@ -2539,6 +2579,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconSpriteFemale = gMonIcon_PikachuF, .iconPalIndexFemale = 2, #endif + SHADOW(-3, 5, SHADOW_SIZE_M) OVERWORLD( sPicTable_Pikachu, SIZE_32x32, @@ -2601,6 +2642,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuCosplay, .iconSprite = gMonIcon_PikachuCosplay, .iconPalIndex = 2, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -2651,6 +2693,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuRockStar, .iconSprite = gMonIcon_PikachuRockStar, .iconPalIndex = 1, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -2702,6 +2745,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuBelle, .iconSprite = gMonIcon_PikachuBelle, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -2753,6 +2797,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuPopStar, .iconSprite = gMonIcon_PikachuPopStar, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -2803,6 +2848,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuPhD, .iconSprite = gMonIcon_PikachuPhD, .iconPalIndex = 1, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -2853,6 +2899,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuLibre, .iconSprite = gMonIcon_PikachuLibre, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -2911,6 +2958,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuOriginalCap, .iconSprite = gMonIcon_PikachuOriginalCap, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -2965,6 +3013,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuHoennCap, .iconSprite = gMonIcon_PikachuHoennCap, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -3019,6 +3068,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuSinnohCap, .iconSprite = gMonIcon_PikachuSinnohCap, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -3073,6 +3123,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuUnovaCap, .iconSprite = gMonIcon_PikachuUnovaCap, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -3127,6 +3178,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuKalosCap, .iconSprite = gMonIcon_PikachuKalosCap, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -3181,6 +3233,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuAlolaCap, .iconSprite = gMonIcon_PikachuAlolaCap, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -3236,6 +3289,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuPartnerCap, .iconSprite = gMonIcon_PikachuPartnerCap, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -3290,6 +3344,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuWorldCap, .iconSprite = gMonIcon_PikachuWorldCap, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, @@ -3347,6 +3402,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PikachuGigantamax, .iconSprite = gMonIcon_PikachuGigantamax, .iconPalIndex = 2, + SHADOW(-3, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Pikachu) .isGigantamax = TRUE, .levelUpLearnset = sPikachuLevelUpLearnset, @@ -3409,9 +3465,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconSpriteFemale = gMonIcon_PikachuPartnerF, .iconPalIndexFemale = 2, #endif + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Pikachu) .cannotBeTraded = TRUE, - .allPerfectIVs = TRUE, + .perfectIVCount = NUM_STATS, .levelUpLearnset = sPikachuLevelUpLearnset, .teachableLearnset = sPikachuTeachableLearnset, .formSpeciesIdTable = sPikachuFormSpeciesIdTable, @@ -3478,6 +3535,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Raichu, .iconSprite = gMonIcon_Raichu, .iconPalIndex = 0, + SHADOW(2, 10, SHADOW_SIZE_M) FOOTPRINT(Raichu) OVERWORLD( sPicTable_Raichu, @@ -3541,6 +3599,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_RaichuAlolan, .iconSprite = gMonIcon_RaichuAlolan, .iconPalIndex = 2, + SHADOW(3, 15, SHADOW_SIZE_M) FOOTPRINT(Raichu) OVERWORLD( sPicTable_RaichuAlolan, @@ -3607,6 +3666,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Sandshrew, .iconSprite = gMonIcon_Sandshrew, .iconPalIndex = 2, + SHADOW(0, 1, SHADOW_SIZE_M) FOOTPRINT(Sandshrew) OVERWORLD( sPicTable_Sandshrew, @@ -3671,6 +3731,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Sandslash, .iconSprite = gMonIcon_Sandslash, .iconPalIndex = 2, + SHADOW(4, 4, SHADOW_SIZE_L) FOOTPRINT(Sandslash) OVERWORLD( sPicTable_Sandslash, @@ -3734,6 +3795,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SandshrewAlolan, .iconSprite = gMonIcon_SandshrewAlolan, .iconPalIndex = 0, + SHADOW(-2, -1, SHADOW_SIZE_M) FOOTPRINT(Sandshrew) OVERWORLD( sPicTable_SandshrewAlolan, @@ -3799,6 +3861,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SandslashAlolan, .iconSprite = gMonIcon_SandslashAlolan, .iconPalIndex = 0, + SHADOW(0, 9, SHADOW_SIZE_L) FOOTPRINT(Sandslash) OVERWORLD( sPicTable_SandslashAlolan, @@ -3869,6 +3932,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_NidoranF, .iconSprite = gMonIcon_NidoranF, .iconPalIndex = 0, + SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(NidoranF) OVERWORLD( sPicTable_NidoranF, @@ -3935,6 +3999,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Nidorina, .iconSprite = gMonIcon_Nidorina, .iconPalIndex = 0, + SHADOW(3, 5, SHADOW_SIZE_M) FOOTPRINT(Nidorina) OVERWORLD( sPicTable_Nidorina, @@ -4008,6 +4073,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Nidoqueen, .iconSprite = gMonIcon_Nidoqueen, .iconPalIndex = 2, + SHADOW(1, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Nidoqueen) OVERWORLD( sPicTable_Nidoqueen, @@ -4072,6 +4138,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_NidoranM, .iconSprite = gMonIcon_NidoranM, .iconPalIndex = 2, + SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(NidoranM) OVERWORLD( sPicTable_NidoranM, @@ -4138,6 +4205,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Nidorino, .iconSprite = gMonIcon_Nidorino, .iconPalIndex = 2, + SHADOW(2, 1, SHADOW_SIZE_L) FOOTPRINT(Nidorino) OVERWORLD( sPicTable_Nidorino, @@ -4212,6 +4280,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Nidoking, .iconSprite = gMonIcon_Nidoking, .iconPalIndex = 2, + SHADOW(0, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Nidoking) OVERWORLD( sPicTable_Nidoking, @@ -4287,6 +4356,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Cleffa, .iconSprite = gMonIcon_Cleffa, .iconPalIndex = 0, + SHADOW(0, -4, SHADOW_SIZE_S) FOOTPRINT(Cleffa) OVERWORLD( sPicTable_Cleffa, @@ -4356,6 +4426,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Clefairy, .iconSprite = gMonIcon_Clefairy, .iconPalIndex = 0, + SHADOW(1, 1, SHADOW_SIZE_S) FOOTPRINT(Clefairy) OVERWORLD( sPicTable_Clefairy, @@ -4431,6 +4502,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Clefable, .iconSprite = gMonIcon_Clefable, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Clefable) OVERWORLD( sPicTable_Clefable, @@ -4494,6 +4566,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Vulpix, .iconSprite = gMonIcon_Vulpix, .iconPalIndex = 5, + SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Vulpix) OVERWORLD( sPicTable_Vulpix, @@ -4559,6 +4632,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Ninetales, .iconSprite = gMonIcon_Ninetales, .iconPalIndex = 3, + SHADOW(1, 7, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Ninetales) OVERWORLD( sPicTable_Ninetales, @@ -4622,6 +4696,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_VulpixAlolan, .iconSprite = gMonIcon_VulpixAlolan, .iconPalIndex = 2, + SHADOW(-2, 3, SHADOW_SIZE_M) FOOTPRINT(Vulpix) OVERWORLD( sPicTable_VulpixAlolan, @@ -4688,6 +4763,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_NinetalesAlolan, .iconSprite = gMonIcon_NinetalesAlolan, .iconPalIndex = 2, + SHADOW(0, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Ninetales) OVERWORLD( sPicTable_NinetalesAlolan, @@ -4765,6 +4841,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Igglybuff, .iconSprite = gMonIcon_Igglybuff, .iconPalIndex = 1, + SHADOW(0, -3, SHADOW_SIZE_S) FOOTPRINT(Igglybuff) OVERWORLD( sPicTable_Igglybuff, @@ -4834,6 +4911,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Jigglypuff, .iconSprite = gMonIcon_Jigglypuff, .iconPalIndex = 0, + SHADOW(-1, -1, SHADOW_SIZE_S) FOOTPRINT(Jigglypuff) OVERWORLD( sPicTable_Jigglypuff, @@ -4909,6 +4987,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Wigglytuff, .iconSprite = gMonIcon_Wigglytuff, .iconPalIndex = 0, + SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Wigglytuff) OVERWORLD( sPicTable_Wigglytuff, @@ -4976,6 +5055,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Zubat, .iconSprite = gMonIcon_Zubat, .iconPalIndex = 2, + SHADOW(-4, 11, SHADOW_SIZE_S) FOOTPRINT(Zubat) OVERWORLD( sPicTable_Zubat, @@ -5043,6 +5123,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Golbat, .iconSprite = gMonIcon_Golbat, .iconPalIndex = 2, + SHADOW(2, 14, SHADOW_SIZE_M) FOOTPRINT(Golbat) OVERWORLD( sPicTable_Golbat, @@ -5112,6 +5193,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Crobat, .iconSprite = gMonIcon_Crobat, .iconPalIndex = 2, + SHADOW(-3, 14, SHADOW_SIZE_M) FOOTPRINT(Crobat) OVERWORLD( sPicTable_Crobat, @@ -5176,6 +5258,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Oddish, .iconSprite = gMonIcon_Oddish, .iconPalIndex = 4, + SHADOW(0, -2, SHADOW_SIZE_S) FOOTPRINT(Oddish) OVERWORLD( sPicTable_Oddish, @@ -5243,6 +5326,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Gloom, .iconSprite = gMonIcon_Gloom, .iconPalIndex = 0, + SHADOW(-1, 3, SHADOW_SIZE_M) FOOTPRINT(Gloom) OVERWORLD( sPicTable_Gloom, @@ -5318,6 +5402,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Vileplume, .iconSprite = gMonIcon_Vileplume, .iconPalIndex = 0, + SHADOW(-1, 7, SHADOW_SIZE_L) FOOTPRINT(Vileplume) OVERWORLD( sPicTable_Vileplume, @@ -5388,6 +5473,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Bellossom, .iconSprite = gMonIcon_Bellossom, .iconPalIndex = 1, + SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Bellossom) OVERWORLD( sPicTable_Bellossom, @@ -5458,6 +5544,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Paras, .iconSprite = gMonIcon_Paras, .iconPalIndex = 0, + SHADOW(7, -11, SHADOW_SIZE_M) FOOTPRINT(Paras) OVERWORLD( sPicTable_Paras, @@ -5528,6 +5615,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Parasect, .iconSprite = gMonIcon_Parasect, .iconPalIndex = 0, + SHADOW(5, 2, SHADOW_SIZE_L) FOOTPRINT(Parasect) OVERWORLD( sPicTable_Parasect, @@ -5595,6 +5683,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Venonat, .iconSprite = gMonIcon_Venonat, .iconPalIndex = 2, + SHADOW(-1, 5, SHADOW_SIZE_M) FOOTPRINT(Venonat) OVERWORLD( sPicTable_Venonat, @@ -5664,6 +5753,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Venomoth, .iconSprite = gMonIcon_Venomoth, .iconPalIndex = 2, + SHADOW(-5, 18, SHADOW_SIZE_M) FOOTPRINT(Venomoth) OVERWORLD( sPicTable_Venomoth, @@ -5739,6 +5829,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Diglett, .iconSprite = gMonIcon_Diglett, .iconPalIndex = 2, + NO_SHADOW FOOTPRINT(Diglett) OVERWORLD( sPicTable_Diglett, @@ -5804,6 +5895,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Dugtrio, .iconSprite = gMonIcon_Dugtrio, .iconPalIndex = 2, + NO_SHADOW FOOTPRINT(Dugtrio) OVERWORLD( sPicTable_Dugtrio, @@ -5867,6 +5959,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_DiglettAlolan, .iconSprite = gMonIcon_DiglettAlolan, .iconPalIndex = 2, + NO_SHADOW FOOTPRINT(Diglett) OVERWORLD( sPicTable_DiglettAlolan, @@ -5933,6 +6026,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_DugtrioAlolan, .iconSprite = gMonIcon_DugtrioAlolan, .iconPalIndex = 2, + NO_SHADOW FOOTPRINT(Dugtrio) OVERWORLD( sPicTable_DugtrioAlolan, @@ -6004,6 +6098,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Meowth, .iconSprite = gMonIcon_Meowth, .iconPalIndex = 1, + SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Meowth) OVERWORLD( sPicTable_Meowth, @@ -6074,6 +6169,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Persian, .iconSprite = gMonIcon_Persian, .iconPalIndex = 1, + SHADOW(-2, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Persian) OVERWORLD( sPicTable_Persian, @@ -6137,6 +6233,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MeowthAlolan, .iconSprite = gMonIcon_MeowthAlolan, .iconPalIndex = 2, + SHADOW(-2, 5, SHADOW_SIZE_M) FOOTPRINT(Meowth) OVERWORLD( sPicTable_MeowthAlolan, @@ -6202,6 +6299,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PersianAlolan, .iconSprite = gMonIcon_PersianAlolan, .iconPalIndex = 2, + SHADOW(-1, 9, SHADOW_SIZE_L) FOOTPRINT(Persian) OVERWORLD( sPicTable_PersianAlolan, @@ -6266,6 +6364,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MeowthGalarian, .iconSprite = gMonIcon_MeowthGalarian, .iconPalIndex = 0, + SHADOW(1, 4, SHADOW_SIZE_M) FOOTPRINT(Meowth) OVERWORLD( sPicTable_MeowthGalarian, @@ -6329,6 +6428,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Perrserker, .iconSprite = gMonIcon_Perrserker, .iconPalIndex = 2, + SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Perrserker) OVERWORLD( sPicTable_Perrserker, @@ -6392,6 +6492,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MeowthGigantamax, .iconSprite = gMonIcon_MeowthGigantamax, .iconPalIndex = 1, + SHADOW(4, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Meowth) .isGigantamax = TRUE, .levelUpLearnset = sMeowthLevelUpLearnset, @@ -6451,6 +6552,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Psyduck, .iconSprite = gMonIcon_Psyduck, .iconPalIndex = 1, + SHADOW(1, 2, SHADOW_SIZE_M) FOOTPRINT(Psyduck) OVERWORLD( sPicTable_Psyduck, @@ -6513,6 +6615,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Golduck, .iconSprite = gMonIcon_Golduck, .iconPalIndex = 0, + SHADOW(1, 6, SHADOW_SIZE_M) FOOTPRINT(Golduck) OVERWORLD( sPicTable_Golduck, @@ -6580,6 +6683,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Mankey, .iconSprite = gMonIcon_Mankey, .iconPalIndex = 1, + SHADOW(-1, 1, SHADOW_SIZE_M) FOOTPRINT(Mankey) OVERWORLD( sPicTable_Mankey, @@ -6646,6 +6750,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Primeape, .iconSprite = gMonIcon_Primeape, .iconPalIndex = 2, + SHADOW(0, 7, SHADOW_SIZE_L) FOOTPRINT(Primeape) OVERWORLD( sPicTable_Primeape, @@ -6708,7 +6813,16 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Annihilape, .iconSprite = gMonIcon_Annihilape, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Annihilape) + OVERWORLD( + sPicTable_Annihilape, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Annihilape, + gShinyOverworldPalette_Annihilape + ) .levelUpLearnset = sAnnihilapeLevelUpLearnset, .teachableLearnset = sAnnihilapeTeachableLearnset, }, @@ -6764,6 +6878,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Growlithe, .iconSprite = gMonIcon_Growlithe, .iconPalIndex = 3, + SHADOW(0, 4, SHADOW_SIZE_M) FOOTPRINT(Growlithe) OVERWORLD( sPicTable_Growlithe, @@ -6828,6 +6943,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Arcanine, .iconSprite = gMonIcon_Arcanine, .iconPalIndex = 3, + SHADOW(-4, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Arcanine) OVERWORLD( sPicTable_Arcanine, @@ -6890,6 +7006,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GrowlitheHisuian, .iconSprite = gMonIcon_GrowlitheHisuian, .iconPalIndex = 0, + SHADOW(2, -2, SHADOW_SIZE_M) FOOTPRINT(Growlithe) OVERWORLD( sPicTable_GrowlitheHisuian, @@ -6953,6 +7070,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_ArcanineHisuian, .iconSprite = gMonIcon_ArcanineHisuian, .iconPalIndex = 0, + SHADOW(-1, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Arcanine) OVERWORLD( sPicTable_ArcanineHisuian, @@ -7019,6 +7137,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Poliwag, .iconSprite = gMonIcon_Poliwag, .iconPalIndex = 0, + SHADOW(-3, 0, SHADOW_SIZE_S) FOOTPRINT(Poliwag) OVERWORLD( sPicTable_Poliwag, @@ -7084,6 +7203,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Poliwhirl, .iconSprite = gMonIcon_Poliwhirl, .iconPalIndex = 0, + SHADOW(-1, 4, SHADOW_SIZE_M) FOOTPRINT(Poliwhirl) OVERWORLD( sPicTable_Poliwhirl, @@ -7157,6 +7277,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Poliwrath, .iconSprite = gMonIcon_Poliwrath, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_L) FOOTPRINT(Poliwrath) OVERWORLD( sPicTable_Poliwrath, @@ -7231,6 +7352,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Politoed, .iconSprite = gMonIcon_Politoed, .iconPalIndex = 1, + SHADOW(1, 9, SHADOW_SIZE_M) FOOTPRINT(Politoed) OVERWORLD( sPicTable_Politoed, @@ -7301,6 +7423,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Abra, .iconSprite = gMonIcon_Abra, .iconPalIndex = 2, + SHADOW(0, 0, SHADOW_SIZE_L) FOOTPRINT(Abra) OVERWORLD( sPicTable_Abra, @@ -7369,6 +7492,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Kadabra, .iconSprite = gMonIcon_Kadabra, .iconPalIndex = 2, + SHADOW(1, 6, SHADOW_SIZE_L) FOOTPRINT(Kadabra) OVERWORLD( sPicTable_Kadabra, @@ -7446,6 +7570,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Alakazam, .iconSprite = gMonIcon_Alakazam, .iconPalIndex = 2, + SHADOW(-1, 9, SHADOW_SIZE_L) FOOTPRINT(Alakazam) OVERWORLD( sPicTable_Alakazam, @@ -7510,6 +7635,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_AlakazamMega, .iconSprite = gMonIcon_AlakazamMega, .iconPalIndex = 2, + SHADOW(0, 18, SHADOW_SIZE_L) FOOTPRINT(Alakazam) .isMegaEvolution = TRUE, .levelUpLearnset = sAlakazamLevelUpLearnset, @@ -7579,6 +7705,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Machop, .iconSprite = gMonIcon_Machop, .iconPalIndex = 0, + SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Machop) OVERWORLD( sPicTable_Machop, @@ -7647,6 +7774,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Machoke, .iconSprite = gMonIcon_Machoke, .iconPalIndex = 2, + SHADOW(-1, 9, SHADOW_SIZE_M) FOOTPRINT(Machoke) OVERWORLD( sPicTable_Machoke, @@ -7722,6 +7850,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Machamp, .iconSprite = gMonIcon_Machamp, .iconPalIndex = 0, + SHADOW(7, 13, SHADOW_SIZE_L) FOOTPRINT(Machamp) OVERWORLD( sPicTable_Machamp, @@ -7790,6 +7919,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MachampGigantamax, .iconSprite = gMonIcon_MachampGigantamax, .iconPalIndex = 0, + SHADOW(7, 13, SHADOW_SIZE_L) FOOTPRINT(Machamp) .isGigantamax = TRUE, .levelUpLearnset = sMachampLevelUpLearnset, @@ -7848,6 +7978,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Bellsprout, .iconSprite = gMonIcon_Bellsprout, .iconPalIndex = 1, + SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Bellsprout) OVERWORLD( sPicTable_Bellsprout, @@ -7911,6 +8042,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Weepinbell, .iconSprite = gMonIcon_Weepinbell, .iconPalIndex = 1, + SHADOW(-3, 3, SHADOW_SIZE_M) FOOTPRINT(Weepinbell) OVERWORLD( sPicTable_Weepinbell, @@ -7980,6 +8112,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Victreebel, .iconSprite = gMonIcon_Victreebel, .iconPalIndex = 1, + SHADOW(3, 8, SHADOW_SIZE_M) FOOTPRINT(Victreebel) OVERWORLD( sPicTable_Victreebel, @@ -8043,6 +8176,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Tentacool, .iconSprite = gMonIcon_Tentacool, .iconPalIndex = 0, + SHADOW(1, 6, SHADOW_SIZE_M) FOOTPRINT(Tentacool) OVERWORLD( sPicTable_Tentacool, @@ -8106,6 +8240,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Tentacruel, .iconSprite = gMonIcon_Tentacruel, .iconPalIndex = 0, + SHADOW(2, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Tentacruel) OVERWORLD( sPicTable_Tentacruel, @@ -8191,6 +8326,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Geodude, .iconSprite = gMonIcon_Geodude, .iconPalIndex = 1, + SHADOW(1, 2, SHADOW_SIZE_M) FOOTPRINT(Geodude) OVERWORLD( sPicTable_Geodude, @@ -8255,6 +8391,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Graveler, .iconSprite = gMonIcon_Graveler, .iconPalIndex = 1, + SHADOW(0, 3, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Graveler) OVERWORLD( sPicTable_Graveler, @@ -8319,6 +8456,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Golem, .iconSprite = gMonIcon_Golem, .iconPalIndex = 2, + SHADOW(3, 5, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Golem) OVERWORLD( sPicTable_Golem, @@ -8383,6 +8521,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GeodudeAlolan, .iconSprite = gMonIcon_GeodudeAlolan, .iconPalIndex = 2, + SHADOW(-1, 10, SHADOW_SIZE_M) FOOTPRINT(Geodude) OVERWORLD( sPicTable_GeodudeAlolan, @@ -8448,6 +8587,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GravelerAlolan, .iconSprite = gMonIcon_GravelerAlolan, .iconPalIndex = 2, + SHADOW(1, 5, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Graveler) OVERWORLD( sPicTable_GravelerAlolan, @@ -8513,6 +8653,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GolemAlolan, .iconSprite = gMonIcon_GolemAlolan, .iconPalIndex = 2, + SHADOW(2, 11, SHADOW_SIZE_L) FOOTPRINT(Golem) OVERWORLD( sPicTable_GolemAlolan, @@ -8579,6 +8720,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Ponyta, .iconSprite = gMonIcon_Ponyta, .iconPalIndex = 3, + SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Ponyta) OVERWORLD( sPicTable_Ponyta, @@ -8642,6 +8784,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Rapidash, .iconSprite = gMonIcon_Rapidash, .iconPalIndex = 3, + SHADOW(-1, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Rapidash) OVERWORLD( sPicTable_Rapidash, @@ -8704,6 +8847,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PonytaGalarian, .iconSprite = gMonIcon_PonytaGalarian, .iconPalIndex = 2, + SHADOW(-5, 5, SHADOW_SIZE_M) FOOTPRINT(Ponyta) OVERWORLD( sPicTable_PonytaGalarian, @@ -8768,6 +8912,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_RapidashGalarian, .iconSprite = gMonIcon_RapidashGalarian, .iconPalIndex = 2, + SHADOW(0, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Rapidash) OVERWORLD( sPicTable_RapidashGalarian, @@ -8834,6 +8979,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Slowpoke, .iconSprite = gMonIcon_Slowpoke, .iconPalIndex = 0, + SHADOW(1, -5, SHADOW_SIZE_L) FOOTPRINT(Slowpoke) OVERWORLD( sPicTable_Slowpoke, @@ -8900,6 +9046,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Slowbro, .iconSprite = gMonIcon_Slowbro, .iconPalIndex = 0, + SHADOW(-1, 8, SHADOW_SIZE_L) FOOTPRINT(Slowbro) OVERWORLD( sPicTable_Slowbro, @@ -8964,6 +9111,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Slowking, .iconSprite = gMonIcon_Slowking, .iconPalIndex = 0, + SHADOW(-2, 11, SHADOW_SIZE_M) FOOTPRINT(Slowking) OVERWORLD( sPicTable_Slowking, @@ -9028,6 +9176,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SlowbroMega, .iconSprite = gMonIcon_SlowbroMega, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Slowbro) .isMegaEvolution = TRUE, .levelUpLearnset = sSlowbroLevelUpLearnset, @@ -9085,6 +9234,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SlowpokeGalarian, .iconSprite = gMonIcon_SlowpokeGalarian, .iconPalIndex = 0, + SHADOW(-3, -8, SHADOW_SIZE_L) FOOTPRINT(Slowpoke) OVERWORLD( sPicTable_SlowpokeGalarian, @@ -9151,6 +9301,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SlowbroGalarian, .iconSprite = gMonIcon_SlowbroGalarian, .iconPalIndex = 0, + SHADOW(-5, 9, SHADOW_SIZE_L) FOOTPRINT(Slowbro) OVERWORLD( sPicTable_SlowbroGalarian, @@ -9214,6 +9365,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SlowkingGalarian, .iconSprite = gMonIcon_SlowkingGalarian, .iconPalIndex = 0, + SHADOW(-2, 12, SHADOW_SIZE_M) FOOTPRINT(Slowking) OVERWORLD( sPicTable_SlowkingGalarian, @@ -9282,6 +9434,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Magnemite, .iconSprite = gMonIcon_Magnemite, .iconPalIndex = 0, + SHADOW(-1, 8, SHADOW_SIZE_S) FOOTPRINT(Magnemite) OVERWORLD( sPicTable_Magnemite, @@ -9345,6 +9498,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Magneton, .iconSprite = gMonIcon_Magneton, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Magneton) OVERWORLD( sPicTable_Magneton, @@ -9416,6 +9570,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Magnezone, .iconSprite = gMonIcon_Magnezone, .iconPalIndex = 0, + SHADOW(4, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Magnezone) OVERWORLD( sPicTable_Magnezone, @@ -9490,6 +9645,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Farfetchd, .iconSprite = gMonIcon_Farfetchd, .iconPalIndex = 1, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Farfetchd) OVERWORLD( sPicTable_Farfetchd, @@ -9554,6 +9710,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_FarfetchdGalarian, .iconSprite = gMonIcon_FarfetchdGalarian, .iconPalIndex = 1, + SHADOW(-7, 2, SHADOW_SIZE_L) FOOTPRINT(Farfetchd) OVERWORLD( sPicTable_FarfetchdGalarian, @@ -9619,6 +9776,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Sirfetchd, .iconSprite = gMonIcon_Sirfetchd, .iconPalIndex = 1, + SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Sirfetchd) OVERWORLD( sPicTable_Sirfetchd, @@ -9687,6 +9845,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Doduo, .iconSprite = gMonIcon_Doduo, .iconPalIndex = 2, + SHADOW(6, 5, SHADOW_SIZE_M) FOOTPRINT(Doduo) OVERWORLD( sPicTable_Doduo, @@ -9760,6 +9919,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Dodrio, .iconSprite = gMonIcon_Dodrio, .iconPalIndex = 2, + SHADOW(3, 12, SHADOW_SIZE_L) FOOTPRINT(Dodrio) OVERWORLD( sPicTable_Dodrio, @@ -9826,6 +9986,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Seel, .iconSprite = gMonIcon_Seel, .iconPalIndex = 0, + SHADOW(0, 3, SHADOW_SIZE_L) FOOTPRINT(Seel) OVERWORLD( sPicTable_Seel, @@ -9892,6 +10053,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Dewgong, .iconSprite = gMonIcon_Dewgong, .iconPalIndex = 2, + SHADOW(2, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Dewgong) OVERWORLD( sPicTable_Dewgong, @@ -9955,6 +10117,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Grimer, .iconSprite = gMonIcon_Grimer, .iconPalIndex = 2, + SHADOW(2, 3, SHADOW_SIZE_M) FOOTPRINT(Grimer) OVERWORLD( sPicTable_Grimer, @@ -10021,6 +10184,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Muk, .iconSprite = gMonIcon_Muk, .iconPalIndex = 2, + SHADOW(-1, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Muk) OVERWORLD( sPicTable_Muk, @@ -10084,6 +10248,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GrimerAlolan, .iconSprite = gMonIcon_GrimerAlolan, .iconPalIndex = 1, + SHADOW(2, 1, SHADOW_SIZE_M) FOOTPRINT(Grimer) OVERWORLD( sPicTable_GrimerAlolan, @@ -10151,6 +10316,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MukAlolan, .iconSprite = gMonIcon_MukAlolan, .iconPalIndex = 0, + SHADOW(-1, 7, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Muk) OVERWORLD( sPicTable_MukAlolan, @@ -10223,6 +10389,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Shellder, .iconSprite = gMonIcon_Shellder, .iconPalIndex = 2, + SHADOW(0, -4, SHADOW_SIZE_S) FOOTPRINT(Shellder) OVERWORLD( sPicTable_Shellder, @@ -10291,6 +10458,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Cloyster, .iconSprite = gMonIcon_Cloyster, .iconPalIndex = 2, + SHADOW(4, 8, SHADOW_SIZE_M) FOOTPRINT(Cloyster) OVERWORLD( sPicTable_Cloyster, @@ -10354,6 +10522,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Gastly, .iconSprite = gMonIcon_Gastly, .iconPalIndex = 2, + SHADOW(0, 11, SHADOW_SIZE_S) FOOTPRINT(Gastly) OVERWORLD( sPicTable_Gastly, @@ -10418,6 +10587,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Haunter, .iconSprite = gMonIcon_Haunter, .iconPalIndex = 2, + SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Haunter) OVERWORLD( sPicTable_Haunter, @@ -10492,6 +10662,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Gengar, .iconSprite = gMonIcon_Gengar, .iconPalIndex = 2, + SHADOW(3, 5, SHADOW_SIZE_L) FOOTPRINT(Gengar) OVERWORLD( sPicTable_Gengar, @@ -10555,6 +10726,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GengarMega, .iconSprite = gMonIcon_GengarMega, .iconPalIndex = 2, + SHADOW(6, 1, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gengar) .isMegaEvolution = TRUE, .levelUpLearnset = sGengarLevelUpLearnset, @@ -10612,6 +10784,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GengarGigantamax, .iconSprite = gMonIcon_GengarGigantamax, .iconPalIndex = 2, + NO_SHADOW FOOTPRINT(Gengar) .isGigantamax = TRUE, .levelUpLearnset = sGengarLevelUpLearnset, @@ -10670,6 +10843,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Onix, .iconSprite = gMonIcon_Onix, .iconPalIndex = 2, + SHADOW(0, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Onix) OVERWORLD( sPicTable_Onix, @@ -10740,6 +10914,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Steelix, .iconSprite = gMonIcon_Steelix, .iconPalIndex = 0, + SHADOW(2, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Steelix) OVERWORLD( sPicTable_Steelix, @@ -10804,6 +10979,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SteelixMega, .iconSprite = gMonIcon_SteelixMega, .iconPalIndex = 0, + SHADOW(1, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Steelix) .isMegaEvolution = TRUE, .levelUpLearnset = sSteelixLevelUpLearnset, @@ -10868,6 +11044,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Drowzee, .iconSprite = gMonIcon_Drowzee, .iconPalIndex = 2, + SHADOW(1, 6, SHADOW_SIZE_M) FOOTPRINT(Drowzee) OVERWORLD( sPicTable_Drowzee, @@ -10939,6 +11116,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Hypno, .iconSprite = gMonIcon_Hypno, .iconPalIndex = 2, + SHADOW(-3, 9, SHADOW_SIZE_L) FOOTPRINT(Hypno) OVERWORLD( sPicTable_Hypno, @@ -11001,6 +11179,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Krabby, .iconSprite = gMonIcon_Krabby, .iconPalIndex = 0, + SHADOW(0, -1, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Krabby) OVERWORLD( sPicTable_Krabby, @@ -11065,6 +11244,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Kingler, .iconSprite = gMonIcon_Kingler, .iconPalIndex = 0, + SHADOW(-2, 4, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kingler) OVERWORLD( sPicTable_Kingler, @@ -11129,6 +11309,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_KinglerGigantamax, .iconSprite = gMonIcon_KinglerGigantamax, .iconPalIndex = 0, + SHADOW(-3, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kingler) .isGigantamax = TRUE, .levelUpLearnset = sKinglerLevelUpLearnset, @@ -11195,6 +11376,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Voltorb, .iconSprite = gMonIcon_Voltorb, .iconPalIndex = 0, + SHADOW(0, -2, SHADOW_SIZE_S) FOOTPRINT(Voltorb) OVERWORLD( sPicTable_Voltorb, @@ -11257,6 +11439,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Electrode, .iconSprite = gMonIcon_Electrode, .iconPalIndex = 0, + SHADOW(1, 2, SHADOW_SIZE_M) FOOTPRINT(Electrode) OVERWORLD( sPicTable_Electrode, @@ -11319,6 +11502,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_VoltorbHisuian, .iconSprite = gMonIcon_VoltorbHisuian, .iconPalIndex = 0, + SHADOW(1, -4, SHADOW_SIZE_S) FOOTPRINT(Voltorb) OVERWORLD( sPicTable_VoltorbHisuian, @@ -11382,6 +11566,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_ElectrodeHisuian, .iconSprite = gMonIcon_ElectrodeHisuian, .iconPalIndex = 1, + SHADOW(-1, 4, SHADOW_SIZE_M) FOOTPRINT(Electrode) OVERWORLD( sPicTable_ElectrodeHisuian, @@ -11448,6 +11633,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Exeggcute, .iconSprite = gMonIcon_Exeggcute, .iconPalIndex = 0, + SHADOW(0, -5, SHADOW_SIZE_L) FOOTPRINT(Exeggcute) OVERWORLD( sPicTable_Exeggcute, @@ -11521,6 +11707,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Exeggutor, .iconSprite = gMonIcon_Exeggutor, .iconPalIndex = 1, + SHADOW(2, 13, SHADOW_SIZE_L) FOOTPRINT(Exeggutor) OVERWORLD( sPicTable_Exeggutor, @@ -11583,6 +11770,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_ExeggutorAlolan, .iconSprite = gMonIcon_ExeggutorAlolan, .iconPalIndex = 1, + SHADOW(6, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Exeggutor) OVERWORLD( sPicTable_ExeggutorAlolan, @@ -11650,6 +11838,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Cubone, .iconSprite = gMonIcon_Cubone, .iconPalIndex = 2, + SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(Cubone) OVERWORLD( sPicTable_Cubone, @@ -11715,6 +11904,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Marowak, .iconSprite = gMonIcon_Marowak, .iconPalIndex = 2, + SHADOW(6, 6, SHADOW_SIZE_M) FOOTPRINT(Marowak) OVERWORLD( sPicTable_Marowak, @@ -11774,6 +11964,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MarowakAlolan, .iconSprite = gMonIcon_MarowakAlolan, .iconPalIndex = 1, + SHADOW(-2, 11, SHADOW_SIZE_M) FOOTPRINT(Marowak) OVERWORLD( sPicTable_MarowakAlolan, @@ -11833,9 +12024,11 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MarowakAlolan, .iconSprite = gMonIcon_MarowakAlolan, .iconPalIndex = 1, + SHADOW(-2, 11, SHADOW_SIZE_M) FOOTPRINT(Marowak) .isTotem = TRUE, .isAlolanForm = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMarowakAlolanLevelUpLearnset, .teachableLearnset = sMarowakAlolanTeachableLearnset, .formSpeciesIdTable = sMarowakFormSpeciesIdTable, @@ -11896,6 +12089,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Tyrogue, .iconSprite = gMonIcon_Tyrogue, .iconPalIndex = 2, + SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Tyrogue) OVERWORLD( sPicTable_Tyrogue, @@ -11965,6 +12159,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Hitmonlee, .iconSprite = gMonIcon_Hitmonlee, .iconPalIndex = 2, + SHADOW(2, 8, SHADOW_SIZE_M) FOOTPRINT(Hitmonlee) OVERWORLD( sPicTable_Hitmonlee, @@ -12029,6 +12224,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Hitmonchan, .iconSprite = gMonIcon_Hitmonchan, .iconPalIndex = 2, + SHADOW(1, 9, SHADOW_SIZE_M) FOOTPRINT(Hitmonchan) OVERWORLD( sPicTable_Hitmonchan, @@ -12094,6 +12290,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Hitmontop, .iconSprite = gMonIcon_Hitmontop, .iconPalIndex = 2, + SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Hitmontop) OVERWORLD( sPicTable_Hitmontop, @@ -12158,6 +12355,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Lickitung, .iconSprite = gMonIcon_Lickitung, .iconPalIndex = 0, + SHADOW(2, 6, SHADOW_SIZE_M) FOOTPRINT(Lickitung) OVERWORLD( sPicTable_Lickitung, @@ -12222,6 +12420,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Lickilicky, .iconSprite = gMonIcon_Lickilicky, .iconPalIndex = 1, + SHADOW(1, 11, SHADOW_SIZE_M) FOOTPRINT(Lickilicky) OVERWORLD( sPicTable_Lickilicky, @@ -12291,6 +12490,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Koffing, .iconSprite = gMonIcon_Koffing, .iconPalIndex = 2, + SHADOW(0, 15, SHADOW_SIZE_S) FOOTPRINT(Koffing) OVERWORLD( sPicTable_Koffing, @@ -12361,6 +12561,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Weezing, .iconSprite = gMonIcon_Weezing, .iconPalIndex = 2, + SHADOW(5, 14, SHADOW_SIZE_M) FOOTPRINT(Weezing) OVERWORLD( sPicTable_Weezing, @@ -12426,6 +12627,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_WeezingGalarian, .iconSprite = gMonIcon_WeezingGalarian, .iconPalIndex = 1, + SHADOW(7, 17, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Weezing) OVERWORLD( sPicTable_WeezingGalarian, @@ -12495,6 +12697,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Rhyhorn, .iconSprite = gMonIcon_Rhyhorn, .iconPalIndex = 1, + SHADOW(0, 0, SHADOW_SIZE_L) FOOTPRINT(Rhyhorn) OVERWORLD( sPicTable_Rhyhorn, @@ -12561,6 +12764,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Rhydon, .iconSprite = gMonIcon_Rhydon, .iconPalIndex = 1, + SHADOW(3, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Rhydon) OVERWORLD( sPicTable_Rhydon, @@ -12634,6 +12838,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Rhyperior, .iconSprite = gMonIcon_Rhyperior, .iconPalIndex = 0, + SHADOW(2, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Rhyperior) OVERWORLD( sPicTable_Rhyperior, @@ -12699,6 +12904,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Happiny, .iconSprite = gMonIcon_Happiny, .iconPalIndex = 0, + SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Happiny) OVERWORLD( sPicTable_Happiny, @@ -12764,6 +12970,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Chansey, .iconSprite = gMonIcon_Chansey, .iconPalIndex = 0, + SHADOW(1, 4, SHADOW_SIZE_L) FOOTPRINT(Chansey) OVERWORLD( sPicTable_Chansey, @@ -12828,6 +13035,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Blissey, .iconSprite = gMonIcon_Blissey, .iconPalIndex = 0, + SHADOW(1, 8, SHADOW_SIZE_L) FOOTPRINT(Blissey) OVERWORLD( sPicTable_Blissey, @@ -12895,6 +13103,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Tangela, .iconSprite = gMonIcon_Tangela, .iconPalIndex = 0, + SHADOW(-1, 1, SHADOW_SIZE_M) FOOTPRINT(Tangela) OVERWORLD( sPicTable_Tangela, @@ -12960,6 +13169,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Tangrowth, .iconSprite = gMonIcon_Tangrowth, .iconPalIndex = 0, + SHADOW(-2, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Tangrowth) OVERWORLD( sPicTable_Tangrowth, @@ -13023,6 +13233,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Kangaskhan, .iconSprite = gMonIcon_Kangaskhan, .iconPalIndex = 2, + SHADOW(0, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kangaskhan) OVERWORLD( sPicTable_Kangaskhan, @@ -13087,6 +13298,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_KangaskhanMega, .iconSprite = gMonIcon_KangaskhanMega, .iconPalIndex = 2, + SHADOW(0, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kangaskhan) .isMegaEvolution = TRUE, .levelUpLearnset = sKangaskhanLevelUpLearnset, @@ -13151,6 +13363,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Horsea, .iconSprite = gMonIcon_Horsea, .iconPalIndex = 0, + SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Horsea) OVERWORLD( sPicTable_Horsea, @@ -13219,6 +13432,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Seadra, .iconSprite = gMonIcon_Seadra, .iconPalIndex = 0, + SHADOW(-2, 7, SHADOW_SIZE_M) FOOTPRINT(Seadra) OVERWORLD( sPicTable_Seadra, @@ -13295,6 +13509,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Kingdra, .iconSprite = gMonIcon_Kingdra, .iconPalIndex = 0, + SHADOW(3, 12, SHADOW_SIZE_M) FOOTPRINT(Kingdra) OVERWORLD( sPicTable_Kingdra, @@ -13363,6 +13578,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Goldeen, .iconSprite = gMonIcon_Goldeen, .iconPalIndex = 0, + SHADOW(-6, 0, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Goldeen) OVERWORLD( sPicTable_Goldeen, @@ -13430,6 +13646,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Seaking, .iconSprite = gMonIcon_Seaking, .iconPalIndex = 0, + SHADOW(0, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Seaking) OVERWORLD( sPicTable_Seaking, @@ -13495,6 +13712,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Staryu, .iconSprite = gMonIcon_Staryu, .iconPalIndex = 2, + SHADOW(-1, 2, SHADOW_SIZE_M) FOOTPRINT(Staryu) OVERWORLD( sPicTable_Staryu, @@ -13558,6 +13776,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Starmie, .iconSprite = gMonIcon_Starmie, .iconPalIndex = 2, + SHADOW(0, 7, SHADOW_SIZE_L) FOOTPRINT(Starmie) OVERWORLD( sPicTable_Starmie, @@ -13629,6 +13848,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MimeJr, .iconSprite = gMonIcon_MimeJr, .iconPalIndex = 0, + SHADOW(-5, 4, SHADOW_SIZE_S) FOOTPRINT(MimeJr) OVERWORLD( sPicTable_MimeJr, @@ -13697,6 +13917,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MrMime, .iconSprite = gMonIcon_MrMime, .iconPalIndex = 0, + SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(MrMime) OVERWORLD( sPicTable_MrMime, @@ -13760,6 +13981,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MrMimeGalarian, .iconSprite = gMonIcon_MrMimeGalarian, .iconPalIndex = 0, + SHADOW(-1, 6, SHADOW_SIZE_M) FOOTPRINT(MrMime) OVERWORLD( sPicTable_MrMimeGalarian, @@ -13823,6 +14045,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MrRime, .iconSprite = gMonIcon_MrRime, .iconPalIndex = 0, + SHADOW(3, 9, SHADOW_SIZE_L) FOOTPRINT(MrRime) OVERWORLD( sPicTable_MrRime, @@ -13893,6 +14116,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Scyther, .iconSprite = gMonIcon_Scyther, .iconPalIndex = 1, + SHADOW(0, 7, SHADOW_SIZE_L) FOOTPRINT(Scyther) OVERWORLD( sPicTable_Scyther, @@ -13965,6 +14189,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Scizor, .iconSprite = gMonIcon_Scizor, .iconPalIndex = 0, + SHADOW(3, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Scizor) OVERWORLD( sPicTable_Scizor, @@ -14028,6 +14253,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_ScizorMega, .iconSprite = gMonIcon_ScizorMega, .iconPalIndex = 0, + SHADOW(5, 15, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Scizor) .isMegaEvolution = TRUE, .levelUpLearnset = sScizorLevelUpLearnset, @@ -14086,6 +14312,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Kleavor, .iconSprite = gMonIcon_Kleavor, .iconPalIndex = 2, + SHADOW(2, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kleavor) OVERWORLD( sPicTable_Kleavor, @@ -14155,6 +14382,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Smoochum, .iconSprite = gMonIcon_Smoochum, .iconPalIndex = 1, + SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Smoochum) OVERWORLD( sPicTable_Smoochum, @@ -14222,6 +14450,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Jynx, .iconSprite = gMonIcon_Jynx, .iconPalIndex = 2, + SHADOW(0, 3, SHADOW_SIZE_L) FOOTPRINT(Jynx) OVERWORLD( sPicTable_Jynx, @@ -14287,6 +14516,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Elekid, .iconSprite = gMonIcon_Elekid, .iconPalIndex = 1, + SHADOW(-1, 1, SHADOW_SIZE_M) FOOTPRINT(Elekid) OVERWORLD( sPicTable_Elekid, @@ -14352,6 +14582,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Electabuzz, .iconSprite = gMonIcon_Electabuzz, .iconPalIndex = 1, + SHADOW(-2, 9, SHADOW_SIZE_L) FOOTPRINT(Electabuzz) OVERWORLD( sPicTable_Electabuzz, @@ -14422,6 +14653,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Electivire, .iconSprite = gMonIcon_Electivire, .iconPalIndex = 1, + SHADOW(-3, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Electivire) OVERWORLD( sPicTable_Electivire, @@ -14488,6 +14720,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Magby, .iconSprite = gMonIcon_Magby, .iconPalIndex = 0, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Magby) OVERWORLD( sPicTable_Magby, @@ -14552,6 +14785,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Magmar, .iconSprite = gMonIcon_Magmar, .iconPalIndex = 0, + SHADOW(3, 8, SHADOW_SIZE_L) FOOTPRINT(Magmar) OVERWORLD( sPicTable_Magmar, @@ -14623,6 +14857,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Magmortar, .iconSprite = gMonIcon_Magmortar, .iconPalIndex = 0, + SHADOW(4, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Magmortar) OVERWORLD( sPicTable_Magmortar, @@ -14690,6 +14925,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Pinsir, .iconSprite = gMonIcon_Pinsir, .iconPalIndex = 2, + SHADOW(5, 7, SHADOW_SIZE_L) FOOTPRINT(Pinsir) OVERWORLD( sPicTable_Pinsir, @@ -14755,6 +14991,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PinsirMega, .iconSprite = gMonIcon_PinsirMega, .iconPalIndex = 2, + SHADOW(3, 12, SHADOW_SIZE_L) FOOTPRINT(Pinsir) .isMegaEvolution = TRUE, .levelUpLearnset = sPinsirLevelUpLearnset, @@ -14820,6 +15057,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Tauros, .iconSprite = gMonIcon_Tauros, .iconPalIndex = 2, + SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Tauros) OVERWORLD( sPicTable_Tauros, @@ -14882,7 +15120,16 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_TaurosPaldeanCombatBreed, .iconSprite = gMonIcon_TaurosPaldeanCombatBreed, .iconPalIndex = 0, + SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Tauros) + OVERWORLD( + sPicTable_TaurosPaldeanCombatBreed, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_TaurosPaldeanCombatBreed, + gShinyOverworldPalette_TaurosPaldeanCombatBreed + ) .isPaldeanForm = TRUE, .levelUpLearnset = sTaurosPaldeanCombatBreedLevelUpLearnset, .teachableLearnset = sTaurosPaldeanCombatBreedTeachableLearnset, @@ -14937,7 +15184,16 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_TaurosPaldeanBlazeBreed, .iconSprite = gMonIcon_TaurosPaldeanBlazeBreed, .iconPalIndex = 0, + SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Tauros) + OVERWORLD( + sPicTable_TaurosPaldeanBlazeBreed, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_TaurosPaldeanBlazeBreed, + gShinyOverworldPalette_TaurosPaldeanBlazeBreed + ) .isPaldeanForm = TRUE, .levelUpLearnset = sTaurosPaldeanBlazeBreedLevelUpLearnset, .teachableLearnset = sTaurosPaldeanBlazeBreedTeachableLearnset, @@ -14992,7 +15248,16 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_TaurosPaldeanAquaBreed, .iconSprite = gMonIcon_TaurosPaldeanAquaBreed, .iconPalIndex = 0, + SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Tauros) + OVERWORLD( + sPicTable_TaurosPaldeanAquaBreed, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_TaurosPaldeanAquaBreed, + gShinyOverworldPalette_TaurosPaldeanAquaBreed + ) .isPaldeanForm = TRUE, .levelUpLearnset = sTaurosPaldeanAquaBreedLevelUpLearnset, .teachableLearnset = sTaurosPaldeanAquaBreedTeachableLearnset, @@ -15054,6 +15319,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Magikarp, .iconSprite = gMonIcon_Magikarp, .iconPalIndex = 0, + SHADOW(1, 7, SHADOW_SIZE_M) FOOTPRINT(Magikarp) OVERWORLD( sPicTable_Magikarp, @@ -15120,6 +15386,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Gyarados, .iconSprite = gMonIcon_Gyarados, .iconPalIndex = 0, + SHADOW(5, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gyarados) OVERWORLD( sPicTable_Gyarados, @@ -15184,6 +15451,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_GyaradosMega, .iconSprite = gMonIcon_GyaradosMega, .iconPalIndex = 0, + SHADOW(3, 17, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gyarados) .isMegaEvolution = TRUE, .levelUpLearnset = sGyaradosLevelUpLearnset, @@ -15244,6 +15512,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Lapras, .iconSprite = gMonIcon_Lapras, .iconPalIndex = 2, + SHADOW(2, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Lapras) OVERWORLD( sPicTable_Lapras, @@ -15310,6 +15579,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_LaprasGigantamax, .iconSprite = gMonIcon_LaprasGigantamax, .iconPalIndex = 2, + SHADOW(2, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Lapras) .isGigantamax = TRUE, .levelUpLearnset = sLaprasLevelUpLearnset, @@ -15371,6 +15641,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Ditto, .iconSprite = gMonIcon_Ditto, .iconPalIndex = 2, + SHADOW(0, -4, SHADOW_SIZE_M) FOOTPRINT(Ditto) OVERWORLD( sPicTable_Ditto, @@ -15438,6 +15709,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Eevee, .iconSprite = gMonIcon_Eevee, .iconPalIndex = 2, + SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Eevee) OVERWORLD( sPicTable_Eevee, @@ -15512,6 +15784,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_EeveeGigantamax, .iconSprite = gMonIcon_EeveeGigantamax, .iconPalIndex = 2, + SHADOW(0, 4, SHADOW_SIZE_L) FOOTPRINT(Eevee) .isGigantamax = TRUE, .levelUpLearnset = sEeveeLevelUpLearnset, @@ -15573,9 +15846,10 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .iconSpriteFemale = gMonIcon_EeveePartnerF, .iconPalIndexFemale = 2, #endif + SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Eevee) .cannotBeTraded = TRUE, - .allPerfectIVs = TRUE, + .perfectIVCount = NUM_STATS, .levelUpLearnset = sEeveeLevelUpLearnset, .teachableLearnset = sEeveeTeachableLearnset, .eggMoveLearnset = sEeveeEggMoveLearnset, @@ -15629,6 +15903,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Vaporeon, .iconSprite = gMonIcon_Vaporeon, .iconPalIndex = 0, + SHADOW(-4, 3, SHADOW_SIZE_M) FOOTPRINT(Vaporeon) OVERWORLD( sPicTable_Vaporeon, @@ -15689,6 +15964,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Jolteon, .iconSprite = gMonIcon_Jolteon, .iconPalIndex = 2, + SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Jolteon) OVERWORLD( sPicTable_Jolteon, @@ -15749,6 +16025,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Flareon, .iconSprite = gMonIcon_Flareon, .iconPalIndex = 3, + SHADOW(-2, 1, SHADOW_SIZE_L) FOOTPRINT(Flareon) OVERWORLD( sPicTable_Flareon, @@ -15810,6 +16087,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Espeon, .iconSprite = gMonIcon_Espeon, .iconPalIndex = 2, + SHADOW(2, 4, SHADOW_SIZE_M) FOOTPRINT(Espeon) OVERWORLD( sPicTable_Espeon, @@ -15870,6 +16148,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Umbreon, .iconSprite = gMonIcon_Umbreon, .iconPalIndex = 0, + SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Umbreon) OVERWORLD( sPicTable_Umbreon, @@ -15932,6 +16211,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Leafeon, .iconSprite = gMonIcon_Leafeon, .iconPalIndex = 1, + SHADOW(0, 4, SHADOW_SIZE_M) FOOTPRINT(Leafeon) OVERWORLD( sPicTable_Leafeon, @@ -15992,6 +16272,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Glaceon, .iconSprite = gMonIcon_Glaceon, .iconPalIndex = 0, + SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Glaceon) OVERWORLD( sPicTable_Glaceon, @@ -16055,6 +16336,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Sylveon, .iconSprite = gMonIcon_Sylveon, .iconPalIndex = 0, + SHADOW(2, 9, SHADOW_SIZE_M) FOOTPRINT(Sylveon) OVERWORLD( sPicTable_Sylveon, @@ -16122,6 +16404,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Porygon, .iconSprite = gMonIcon_Porygon, .iconPalIndex = 0, + SHADOW(0, -2, SHADOW_SIZE_S) FOOTPRINT(Porygon) OVERWORLD( sPicTable_Porygon, @@ -16190,6 +16473,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Porygon2, .iconSprite = gMonIcon_Porygon2, .iconPalIndex = 0, + SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Porygon2) OVERWORLD( sPicTable_Porygon2, @@ -16260,6 +16544,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_PorygonZ, .iconSprite = gMonIcon_PorygonZ, .iconPalIndex = 0, + SHADOW(0, 17, SHADOW_SIZE_S) FOOTPRINT(PorygonZ) OVERWORLD( sPicTable_PorygonZ, @@ -16330,6 +16615,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Omanyte, .iconSprite = gMonIcon_Omanyte, .iconPalIndex = 0, + SHADOW(-2, -2, SHADOW_SIZE_S) FOOTPRINT(Omanyte) OVERWORLD( sPicTable_Omanyte, @@ -16392,6 +16678,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Omastar, .iconSprite = gMonIcon_Omastar, .iconPalIndex = 0, + SHADOW(0, 4, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Omastar) OVERWORLD( sPicTable_Omastar, @@ -16460,6 +16747,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Kabuto, .iconSprite = gMonIcon_Kabuto, .iconPalIndex = 2, + SHADOW(2, -3, SHADOW_SIZE_S) FOOTPRINT(Kabuto) OVERWORLD( sPicTable_Kabuto, @@ -16528,6 +16816,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Kabutops, .iconSprite = gMonIcon_Kabutops, .iconPalIndex = 2, + SHADOW(1, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kabutops) OVERWORLD( sPicTable_Kabutops, @@ -16591,6 +16880,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Aerodactyl, .iconSprite = gMonIcon_Aerodactyl, .iconPalIndex = 2, + SHADOW(-2, 16, SHADOW_SIZE_M) FOOTPRINT(Aerodactyl) OVERWORLD( sPicTable_Aerodactyl, @@ -16655,6 +16945,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_AerodactylMega, .iconSprite = gMonIcon_AerodactylMega, .iconPalIndex = 2, + SHADOW(-2, 16, SHADOW_SIZE_M) FOOTPRINT(Aerodactyl) .isMegaEvolution = TRUE, .levelUpLearnset = sAerodactylLevelUpLearnset, @@ -16717,6 +17008,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Munchlax, .iconSprite = gMonIcon_Munchlax, .iconPalIndex = 3, + SHADOW(-1, 2, SHADOW_SIZE_M) FOOTPRINT(Munchlax) OVERWORLD( sPicTable_Munchlax, @@ -16782,6 +17074,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Snorlax, .iconSprite = gMonIcon_Snorlax, .iconPalIndex = 3, + SHADOW(0, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Snorlax) OVERWORLD( sPicTable_Snorlax, @@ -16848,6 +17141,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_SnorlaxGigantamax, .iconSprite = gMonIcon_SnorlaxGigantamax, .iconPalIndex = 3, + SHADOW(0, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Snorlax) .isGigantamax = TRUE, .levelUpLearnset = sSnorlaxLevelUpLearnset, @@ -16913,6 +17207,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Articuno, .iconSprite = gMonIcon_Articuno, .iconPalIndex = 2, + SHADOW(3, 10, SHADOW_SIZE_M) FOOTPRINT(Articuno) OVERWORLD( sPicTable_Articuno, @@ -16923,6 +17218,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Articuno ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sArticunoLevelUpLearnset, .teachableLearnset = sArticunoTeachableLearnset, .formSpeciesIdTable = sArticunoFormSpeciesIdTable, @@ -16977,6 +17273,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_ArticunoGalarian, .iconSprite = gMonIcon_ArticunoGalarian, .iconPalIndex = 2, + SHADOW(3, 14, SHADOW_SIZE_M) FOOTPRINT(Articuno) OVERWORLD( sPicTable_ArticunoGalarian, @@ -16988,6 +17285,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = ) .isLegendary = TRUE, .isGalarianForm = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sArticunoGalarianLevelUpLearnset, .teachableLearnset = sArticunoGalarianTeachableLearnset, .formSpeciesIdTable = sArticunoFormSpeciesIdTable, @@ -17054,6 +17352,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Zapdos, .iconSprite = gMonIcon_Zapdos, .iconPalIndex = 0, + SHADOW(1, 15, SHADOW_SIZE_M) FOOTPRINT(Zapdos) OVERWORLD( sPicTable_Zapdos, @@ -17064,6 +17363,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Zapdos ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZapdosLevelUpLearnset, .teachableLearnset = sZapdosTeachableLearnset, .formSpeciesIdTable = sZapdosFormSpeciesIdTable, @@ -17117,6 +17417,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_ZapdosGalarian, .iconSprite = gMonIcon_ZapdosGalarian, .iconPalIndex = 0, + SHADOW(-2, 11, SHADOW_SIZE_M) FOOTPRINT(Zapdos) OVERWORLD( sPicTable_ZapdosGalarian, @@ -17128,6 +17429,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = ) .isLegendary = TRUE, .isGalarianForm = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZapdosGalarianLevelUpLearnset, .teachableLearnset = sZapdosGalarianTeachableLearnset, .formSpeciesIdTable = sZapdosFormSpeciesIdTable, @@ -17189,6 +17491,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Moltres, .iconSprite = gMonIcon_Moltres, .iconPalIndex = 0, + SHADOW(-1, 12, SHADOW_SIZE_M) FOOTPRINT(Moltres) OVERWORLD( sPicTable_Moltres, @@ -17199,6 +17502,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = gShinyOverworldPalette_Moltres ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMoltresLevelUpLearnset, .teachableLearnset = sMoltresTeachableLearnset, .formSpeciesIdTable = sMoltresFormSpeciesIdTable, @@ -17252,6 +17556,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MoltresGalarian, .iconSprite = gMonIcon_MoltresGalarian, .iconPalIndex = 0, + SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Moltres) OVERWORLD( sPicTable_MoltresGalarian, @@ -17263,6 +17568,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = ) .isLegendary = TRUE, .isGalarianForm = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMoltresGalarianLevelUpLearnset, .teachableLearnset = sMoltresGalarianTeachableLearnset, .formSpeciesIdTable = sMoltresFormSpeciesIdTable, @@ -17319,6 +17625,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Dratini, .iconSprite = gMonIcon_Dratini, .iconPalIndex = 0, + SHADOW(3, 3, SHADOW_SIZE_L) FOOTPRINT(Dratini) OVERWORLD( sPicTable_Dratini, @@ -17382,6 +17689,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Dragonair, .iconSprite = gMonIcon_Dragonair, .iconPalIndex = 0, + SHADOW(0, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Dragonair) OVERWORLD( sPicTable_Dragonair, @@ -17450,6 +17758,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Dragonite, .iconSprite = gMonIcon_Dragonite, .iconPalIndex = 2, + SHADOW(0, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Dragonite) OVERWORLD( sPicTable_Dragonite, @@ -17518,6 +17827,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Mewtwo, .iconSprite = gMonIcon_Mewtwo, .iconPalIndex = 2, + SHADOW(6, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Mewtwo) OVERWORLD( sPicTable_Mewtwo, @@ -17529,6 +17839,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMewtwoLevelUpLearnset, .teachableLearnset = sMewtwoTeachableLearnset, .formSpeciesIdTable = sMewtwoFormSpeciesIdTable, @@ -17583,10 +17894,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MewtwoMegaX, .iconSprite = gMonIcon_MewtwoMegaX, .iconPalIndex = 2, + SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Mewtwo) .isLegendary = TRUE, .isMegaEvolution = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMewtwoLevelUpLearnset, .teachableLearnset = sMewtwoTeachableLearnset, .formSpeciesIdTable = sMewtwoFormSpeciesIdTable, @@ -17641,10 +17954,12 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_MewtwoMegaY, .iconSprite = gMonIcon_MewtwoMegaY, .iconPalIndex = 2, + SHADOW(0, 14, SHADOW_SIZE_S) FOOTPRINT(Mewtwo) .isLegendary = TRUE, .isMegaEvolution = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMewtwoLevelUpLearnset, .teachableLearnset = sMewtwoTeachableLearnset, .formSpeciesIdTable = sMewtwoFormSpeciesIdTable, @@ -17710,6 +18025,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = .shinyPalette = gMonShinyPalette_Mew, .iconSprite = gMonIcon_Mew, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Mew) OVERWORLD( sPicTable_Mew, @@ -17721,6 +18037,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMewLevelUpLearnset, .teachableLearnset = sMewTeachableLearnset, }, diff --git a/src/data/pokemon/species_info/gen_2_families.h b/src/data/pokemon/species_info/gen_2_families.h index 1bfbb41bec..f59e8a5417 100644 --- a/src/data/pokemon/species_info/gen_2_families.h +++ b/src/data/pokemon/species_info/gen_2_families.h @@ -51,6 +51,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Chikorita, .iconSprite = gMonIcon_Chikorita, .iconPalIndex = 1, + SHADOW(-1, 2, SHADOW_SIZE_S) FOOTPRINT(Chikorita) OVERWORLD( sPicTable_Chikorita, @@ -114,6 +115,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Bayleef, .iconSprite = gMonIcon_Bayleef, .iconPalIndex = 1, + SHADOW(-1, 10, SHADOW_SIZE_M) FOOTPRINT(Bayleef) OVERWORLD( sPicTable_Bayleef, @@ -186,6 +188,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Meganium, .iconSprite = gMonIcon_Meganium, .iconPalIndex = 1, + SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Meganium) OVERWORLD( sPicTable_Meganium, @@ -248,6 +251,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Cyndaquil, .iconSprite = gMonIcon_Cyndaquil, .iconPalIndex = 3, + SHADOW(0, -1, SHADOW_SIZE_S) FOOTPRINT(Cyndaquil) OVERWORLD( sPicTable_Cyndaquil, @@ -311,6 +315,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Quilava, .iconSprite = gMonIcon_Quilava, .iconPalIndex = 3, + SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Quilava) OVERWORLD( sPicTable_Quilava, @@ -382,6 +387,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Typhlosion, .iconSprite = gMonIcon_Typhlosion, .iconPalIndex = 3, + SHADOW(4, 14, SHADOW_SIZE_L) FOOTPRINT(Typhlosion) OVERWORLD( sPicTable_Typhlosion, @@ -444,6 +450,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_TyphlosionHisuian, .iconSprite = gMonIcon_TyphlosionHisuian, .iconPalIndex = 1, + SHADOW(2, 14, SHADOW_SIZE_L) FOOTPRINT(Typhlosion) OVERWORLD( sPicTable_TyphlosionHisuian, @@ -509,6 +516,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Totodile, .iconSprite = gMonIcon_Totodile, .iconPalIndex = 0, + SHADOW(2, 0, SHADOW_SIZE_S) FOOTPRINT(Totodile) OVERWORLD( sPicTable_Totodile, @@ -573,6 +581,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Croconaw, .iconSprite = gMonIcon_Croconaw, .iconPalIndex = 0, + SHADOW(2, 8, SHADOW_SIZE_M) FOOTPRINT(Croconaw) OVERWORLD( sPicTable_Croconaw, @@ -642,6 +651,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Feraligatr, .iconSprite = gMonIcon_Feraligatr, .iconPalIndex = 0, + SHADOW(3, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Feraligatr) OVERWORLD( sPicTable_Feraligatr, @@ -704,6 +714,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Sentret, .iconSprite = gMonIcon_Sentret, .iconPalIndex = 2, + SHADOW(0, 11, SHADOW_SIZE_S) FOOTPRINT(Sentret) OVERWORLD( sPicTable_Sentret, @@ -766,6 +777,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Furret, .iconSprite = gMonIcon_Furret, .iconPalIndex = 2, + SHADOW(-1, 9, SHADOW_SIZE_M) FOOTPRINT(Furret) OVERWORLD( sPicTable_Furret, @@ -828,6 +840,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Hoothoot, .iconSprite = gMonIcon_Hoothoot, .iconPalIndex = 2, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Hoothoot) OVERWORLD( sPicTable_Hoothoot, @@ -896,6 +909,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Noctowl, .iconSprite = gMonIcon_Noctowl, .iconPalIndex = 2, + SHADOW(-2, 10, SHADOW_SIZE_S) FOOTPRINT(Noctowl) OVERWORLD( sPicTable_Noctowl, @@ -962,6 +976,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Ledyba, .iconSprite = gMonIcon_Ledyba, .iconPalIndex = 0, + SHADOW(2, 4, SHADOW_SIZE_M) FOOTPRINT(Ledyba) OVERWORLD( sPicTable_Ledyba, @@ -1029,6 +1044,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Ledian, .iconSprite = gMonIcon_Ledian, .iconPalIndex = 0, + SHADOW(0, 15, SHADOW_SIZE_S) FOOTPRINT(Ledian) OVERWORLD( sPicTable_Ledian, @@ -1091,6 +1107,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Spinarak, .iconSprite = gMonIcon_Spinarak, .iconPalIndex = 1, + SHADOW(0, -8, SHADOW_SIZE_M) FOOTPRINT(Spinarak) OVERWORLD( sPicTable_Spinarak, @@ -1159,6 +1176,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Ariados, .iconSprite = gMonIcon_Ariados, .iconPalIndex = 0, + SHADOW(1, 3, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Ariados) OVERWORLD( sPicTable_Ariados, @@ -1222,6 +1240,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Chinchou, .iconSprite = gMonIcon_Chinchou, .iconPalIndex = 2, + SHADOW(-1, 1, SHADOW_SIZE_M) FOOTPRINT(Chinchou) OVERWORLD( sPicTable_Chinchou, @@ -1285,6 +1304,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Lanturn, .iconSprite = gMonIcon_Lanturn, .iconPalIndex = 0, + SHADOW(5, 4, SHADOW_SIZE_M) FOOTPRINT(Lanturn) OVERWORLD( sPicTable_Lanturn, @@ -1349,6 +1369,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Togepi, .iconSprite = gMonIcon_Togepi, .iconPalIndex = 0, + SHADOW(-1, -3, SHADOW_SIZE_S) FOOTPRINT(Togepi) OVERWORLD( sPicTable_Togepi, @@ -1411,6 +1432,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Togetic, .iconSprite = gMonIcon_Togetic, .iconPalIndex = 0, + SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Togetic) OVERWORLD( sPicTable_Togetic, @@ -1482,6 +1504,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Togekiss, .iconSprite = gMonIcon_Togekiss, .iconPalIndex = 2, + SHADOW(4, 15, SHADOW_SIZE_M) FOOTPRINT(Togekiss) OVERWORLD( sPicTable_Togekiss, @@ -1546,6 +1569,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Natu, .iconSprite = gMonIcon_Natu, .iconPalIndex = 1, + SHADOW(-2, -4, SHADOW_SIZE_S) FOOTPRINT(Natu) OVERWORLD( sPicTable_Natu, @@ -1611,6 +1635,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Xatu, .iconSprite = gMonIcon_Xatu, .iconPalIndex = 1, + SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Xatu) OVERWORLD( sPicTable_Xatu, @@ -1674,6 +1699,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Mareep, .iconSprite = gMonIcon_Mareep, .iconPalIndex = 0, + SHADOW(1, 1, SHADOW_SIZE_M) FOOTPRINT(Mareep) OVERWORLD( sPicTable_Mareep, @@ -1736,6 +1762,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Flaaffy, .iconSprite = gMonIcon_Flaaffy, .iconPalIndex = 0, + SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Flaaffy) OVERWORLD( sPicTable_Flaaffy, @@ -1808,6 +1835,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Ampharos, .iconSprite = gMonIcon_Ampharos, .iconPalIndex = 0, + SHADOW(3, 11, SHADOW_SIZE_M) FOOTPRINT(Ampharos) OVERWORLD( sPicTable_Ampharos, @@ -1871,6 +1899,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_AmpharosMega, .iconSprite = gMonIcon_AmpharosMega, .iconPalIndex = 0, + SHADOW(-7, 13, SHADOW_SIZE_M) FOOTPRINT(Ampharos) .isMegaEvolution = TRUE, .levelUpLearnset = sAmpharosLevelUpLearnset, @@ -1934,6 +1963,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Azurill, .iconSprite = gMonIcon_Azurill, .iconPalIndex = 0, + SHADOW(-4, 3, SHADOW_SIZE_S) FOOTPRINT(Azurill) OVERWORLD( sPicTable_Azurill, @@ -2001,6 +2031,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Marill, .iconSprite = gMonIcon_Marill, .iconPalIndex = 0, + SHADOW(-2, 0, SHADOW_SIZE_S) FOOTPRINT(Marill) OVERWORLD( sPicTable_Marill, @@ -2075,6 +2106,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Azumarill, .iconSprite = gMonIcon_Azumarill, .iconPalIndex = 0, + SHADOW(-4, 8, SHADOW_SIZE_S) FOOTPRINT(Azumarill) OVERWORLD( sPicTable_Azumarill, @@ -2138,6 +2170,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Bonsly, .iconSprite = gMonIcon_Bonsly, .iconPalIndex = 1, + SHADOW(-3, 4, SHADOW_SIZE_S) FOOTPRINT(Bonsly) OVERWORLD( sPicTable_Bonsly, @@ -2205,6 +2238,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Sudowoodo, .iconSprite = gMonIcon_Sudowoodo, .iconPalIndex = 1, + SHADOW(-2, 7, SHADOW_SIZE_S) FOOTPRINT(Sudowoodo) OVERWORLD( sPicTable_Sudowoodo, @@ -2273,6 +2307,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Hoppip, .iconSprite = gMonIcon_Hoppip, .iconPalIndex = 1, + SHADOW(-5, 12, SHADOW_SIZE_S) FOOTPRINT(Hoppip) OVERWORLD( sPicTable_Hoppip, @@ -2340,6 +2375,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Skiploom, .iconSprite = gMonIcon_Skiploom, .iconPalIndex = 1, + SHADOW(-1, 10, SHADOW_SIZE_S) FOOTPRINT(Skiploom) OVERWORLD( sPicTable_Skiploom, @@ -2414,6 +2450,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Jumpluff, .iconSprite = gMonIcon_Jumpluff, .iconPalIndex = 2, + SHADOW(-2, 11, SHADOW_SIZE_S) FOOTPRINT(Jumpluff) OVERWORLD( sPicTable_Jumpluff, @@ -2480,6 +2517,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Aipom, .iconSprite = gMonIcon_Aipom, .iconPalIndex = 2, + SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Aipom) OVERWORLD( sPicTable_Aipom, @@ -2547,6 +2585,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Ambipom, .iconSprite = gMonIcon_Ambipom, .iconPalIndex = 2, + SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Ambipom) OVERWORLD( sPicTable_Ambipom, @@ -2614,6 +2653,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Sunkern, .iconSprite = gMonIcon_Sunkern, .iconPalIndex = 1, + SHADOW(-1, -4, SHADOW_SIZE_S) FOOTPRINT(Sunkern) OVERWORLD( sPicTable_Sunkern, @@ -2680,6 +2720,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Sunflora, .iconSprite = gMonIcon_Sunflora, .iconPalIndex = 1, + SHADOW(-1, 6, SHADOW_SIZE_S) FOOTPRINT(Sunflora) OVERWORLD( sPicTable_Sunflora, @@ -2744,6 +2785,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Yanma, .iconSprite = gMonIcon_Yanma, .iconPalIndex = 1, + SHADOW(-2, 10, SHADOW_SIZE_S) FOOTPRINT(Yanma) OVERWORLD( sPicTable_Yanma, @@ -2809,6 +2851,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Yanmega, .iconSprite = gMonIcon_Yanmega, .iconPalIndex = 1, + SHADOW(-1, 12, SHADOW_SIZE_M) FOOTPRINT(Yanmega) OVERWORLD( sPicTable_Yanmega, @@ -2876,6 +2919,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Wooper, .iconSprite = gMonIcon_Wooper, .iconPalIndex = 0, + SHADOW(1, -2, SHADOW_SIZE_S) FOOTPRINT(Wooper) OVERWORLD( sPicTable_Wooper, @@ -2943,6 +2987,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Quagsire, .iconSprite = gMonIcon_Quagsire, .iconPalIndex = 0, + SHADOW(0, 8, SHADOW_SIZE_M) FOOTPRINT(Quagsire) OVERWORLD( sPicTable_Quagsire, @@ -3004,7 +3049,16 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_WooperPaldean, .iconSprite = gMonIcon_WooperPaldean, .iconPalIndex = 2, + SHADOW(-1, -2, SHADOW_SIZE_S) FOOTPRINT(Wooper) + OVERWORLD( + sPicTable_WooperPaldean, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_WooperPaldean, + gShinyOverworldPalette_WooperPaldean + ) .isPaldeanForm = TRUE, .levelUpLearnset = sWooperPaldeanLevelUpLearnset, .teachableLearnset = sWooperPaldeanTeachableLearnset, @@ -3060,7 +3114,16 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Clodsire, .iconSprite = gMonIcon_Clodsire, .iconPalIndex = 0, + SHADOW(-2, 3, SHADOW_SIZE_L) FOOTPRINT(Clodsire) + OVERWORLD( + sPicTable_Clodsire, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Clodsire, + gShinyOverworldPalette_Clodsire + ) .levelUpLearnset = sClodsireLevelUpLearnset, .teachableLearnset = sClodsireTeachableLearnset, }, @@ -3124,6 +3187,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Murkrow, .iconSprite = gMonIcon_Murkrow, .iconPalIndex = 2, + SHADOW(-2, 8, SHADOW_SIZE_S) FOOTPRINT(Murkrow) OVERWORLD( sPicTable_Murkrow, @@ -3187,6 +3251,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Honchkrow, .iconSprite = gMonIcon_Honchkrow, .iconPalIndex = 2, + SHADOW(5, 7, SHADOW_SIZE_M) FOOTPRINT(Honchkrow) OVERWORLD( sPicTable_Honchkrow, @@ -3252,6 +3317,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Misdreavus, .iconSprite = gMonIcon_Misdreavus, .iconPalIndex = 0, + SHADOW(0, 10, SHADOW_SIZE_S) FOOTPRINT(Misdreavus) OVERWORLD( sPicTable_Misdreavus, @@ -3317,6 +3383,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Mismagius, .iconSprite = gMonIcon_Mismagius, .iconPalIndex = 2, + SHADOW(1, 11, SHADOW_SIZE_M) FOOTPRINT(Mismagius) OVERWORLD( sPicTable_Mismagius, @@ -3379,8 +3446,9 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Unown, \ .iconSprite = gMonIcon_Unown ##letter, \ .iconPalIndex = 0, \ + SHADOW(0, 3, SHADOW_SIZE_S) \ FOOTPRINT(Unown) \ - OVERWORLD( \ + OVERWORLD( \ sPicTable_Unown ##letter, \ SIZE_32x32, \ SHADOW_SIZE_M, \ @@ -3474,6 +3542,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Wynaut, .iconSprite = gMonIcon_Wynaut, .iconPalIndex = 0, + SHADOW(-1, 2, SHADOW_SIZE_S) FOOTPRINT(Wynaut) OVERWORLD( sPicTable_Wynaut, @@ -3545,6 +3614,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .iconSpriteFemale = gMonIcon_WobbuffetF, .iconPalIndexFemale = 0, #endif + SHADOW(-3, 8, SHADOW_SIZE_M) FOOTPRINT(Wobbuffet) OVERWORLD( sPicTable_Wobbuffet, @@ -3612,6 +3682,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Girafarig, .iconSprite = gMonIcon_Girafarig, .iconPalIndex = 1, + SHADOW(2, 13, SHADOW_SIZE_M) FOOTPRINT(Girafarig) OVERWORLD( sPicTable_Girafarig, @@ -3675,7 +3746,16 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Farigiraf, .iconSprite = gMonIcon_Farigiraf, .iconPalIndex = 0, + SHADOW(11, 13, SHADOW_SIZE_L) FOOTPRINT(Farigiraf) + OVERWORLD( + sPicTable_Farigiraf, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Farigiraf, + gShinyOverworldPalette_Farigiraf + ) .levelUpLearnset = sFarigirafLevelUpLearnset, .teachableLearnset = sFarigirafTeachableLearnset, }, @@ -3730,6 +3810,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Pineco, .iconSprite = gMonIcon_Pineco, .iconPalIndex = 0, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Pineco) OVERWORLD( sPicTable_Pineco, @@ -3792,6 +3873,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Forretress, .iconSprite = gMonIcon_Forretress, .iconPalIndex = 2, + SHADOW(0, 6, SHADOW_SIZE_L) FOOTPRINT(Forretress) OVERWORLD( sPicTable_Forretress, @@ -3861,6 +3943,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Dunsparce, .iconSprite = gMonIcon_Dunsparce, .iconPalIndex = 0, + SHADOW(0, -4, SHADOW_SIZE_M) FOOTPRINT(Dunsparce) OVERWORLD( sPicTable_Dunsparce, @@ -3897,7 +3980,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), .abilities = { ABILITY_SERENE_GRACE, ABILITY_RUN_AWAY, ABILITY_RATTLED }, .bodyColor = BODY_COLOR_YELLOW, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Dudunsprce", "Dudunsparce"), + .speciesName = _("Dudunsparce"), .cryId = CRY_DUDUNSPARCE, .natDexNum = NATIONAL_DEX_DUDUNSPARCE, .categoryName = _("Land Snake"), @@ -3925,7 +4008,16 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Dudunsparce, .iconSprite = gMonIcon_Dudunsparce, .iconPalIndex = 0, + SHADOW(0, 5, SHADOW_SIZE_L) FOOTPRINT(Dudunsparce) + OVERWORLD( + sPicTable_DudunsparceTwoSegment, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_SLITHER, + gOverworldPalette_Dudunsparce, + gShinyOverworldPalette_Dudunsparce + ) .levelUpLearnset = sDudunsparceLevelUpLearnset, .teachableLearnset = sDudunsparceTeachableLearnset, .formSpeciesIdTable = sDudunsparceFormSpeciesIdTable, @@ -3950,7 +4042,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD), .abilities = { ABILITY_SERENE_GRACE, ABILITY_RUN_AWAY, ABILITY_RATTLED }, .bodyColor = BODY_COLOR_YELLOW, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Dudunsprce", "Dudunsparce"), + .speciesName = _("Dudunsparce"), .cryId = CRY_DUDUNSPARCE, .natDexNum = NATIONAL_DEX_DUDUNSPARCE, .categoryName = _("Land Snake"), @@ -3978,7 +4070,16 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Dudunsparce, .iconSprite = gMonIcon_Dudunsparce, .iconPalIndex = 0, + SHADOW(4, 4, SHADOW_SIZE_L) FOOTPRINT(Dudunsparce) + OVERWORLD( + sPicTable_DudunsparceThreeSegment, + SIZE_64x64, + SHADOW_SIZE_M, + TRACKS_SLITHER, + gOverworldPalette_DudunsparceThreeSegment, + gShinyOverworldPalette_DudunsparceThreeSegment + ) .levelUpLearnset = sDudunsparceLevelUpLearnset, .teachableLearnset = sDudunsparceTeachableLearnset, .formSpeciesIdTable = sDudunsparceFormSpeciesIdTable, @@ -4039,6 +4140,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Gligar, .iconSprite = gMonIcon_Gligar, .iconPalIndex = 0, + SHADOW(0, 15, SHADOW_SIZE_S) FOOTPRINT(Gligar) OVERWORLD( sPicTable_Gligar, @@ -4104,6 +4206,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Gliscor, .iconSprite = gMonIcon_Gliscor, .iconPalIndex = 2, + SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Gliscor) OVERWORLD( sPicTable_Gliscor, @@ -4171,6 +4274,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Snubbull, .iconSprite = gMonIcon_Snubbull, .iconPalIndex = 0, + SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Snubbull) OVERWORLD( sPicTable_Snubbull, @@ -4241,6 +4345,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Granbull, .iconSprite = gMonIcon_Granbull, .iconPalIndex = 2, + SHADOW(3, 10, SHADOW_SIZE_L) FOOTPRINT(Granbull) OVERWORLD( sPicTable_Granbull, @@ -4314,6 +4419,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Qwilfish, .iconSprite = gMonIcon_Qwilfish, .iconPalIndex = 0, + SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Qwilfish) OVERWORLD( sPicTable_Qwilfish, @@ -4379,6 +4485,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_QwilfishHisuian, .iconSprite = gMonIcon_QwilfishHisuian, .iconPalIndex = 1, + SHADOW(-5, 4, SHADOW_SIZE_S) FOOTPRINT(Qwilfish) OVERWORLD( sPicTable_QwilfishHisuian, @@ -4442,6 +4549,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Overqwil, .iconSprite = gMonIcon_Overqwil, .iconPalIndex = 2, + SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Overqwil) OVERWORLD( sPicTable_Overqwil, @@ -4512,6 +4620,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Shuckle, .iconSprite = gMonIcon_Shuckle, .iconPalIndex = 1, + SHADOW(1, 3, SHADOW_SIZE_M) FOOTPRINT(Shuckle) OVERWORLD( sPicTable_Shuckle, @@ -4579,6 +4688,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Heracross, .iconSprite = gMonIcon_Heracross, .iconPalIndex = 0, + SHADOW(-1, 10, SHADOW_SIZE_M) FOOTPRINT(Heracross) OVERWORLD( sPicTable_Heracross, @@ -4643,6 +4753,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_HeracrossMega, .iconSprite = gMonIcon_HeracrossMega, .iconPalIndex = 0, + SHADOW(2, 13, SHADOW_SIZE_M) FOOTPRINT(Heracross) .isMegaEvolution = TRUE, .levelUpLearnset = sHeracrossLevelUpLearnset, @@ -4708,6 +4819,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Sneasel, .iconSprite = gMonIcon_Sneasel, .iconPalIndex = 0, + SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Sneasel) OVERWORLD( sPicTable_Sneasel, @@ -4779,6 +4891,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Weavile, .iconSprite = gMonIcon_Weavile, .iconPalIndex = 0, + SHADOW(-4, 10, SHADOW_SIZE_M) FOOTPRINT(Weavile) OVERWORLD( sPicTable_Weavile, @@ -4847,6 +4960,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_SneaselHisuian, .iconSprite = gMonIcon_SneaselHisuian, .iconPalIndex = 0, + SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Sneasel) OVERWORLD( sPicTable_SneaselHisuian, @@ -4911,6 +5025,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Sneasler, .iconSprite = gMonIcon_Sneasler, .iconPalIndex = 2, + SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Sneasler) OVERWORLD( sPicTable_Sneasler, @@ -4980,6 +5095,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Teddiursa, .iconSprite = gMonIcon_Teddiursa, .iconPalIndex = 0, + SHADOW(-2, 1, SHADOW_SIZE_S) FOOTPRINT(Teddiursa) OVERWORLD( sPicTable_Teddiursa, @@ -5050,6 +5166,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Ursaring, .iconSprite = gMonIcon_Ursaring, .iconPalIndex = 2, + SHADOW(1, 14, SHADOW_SIZE_L) FOOTPRINT(Ursaring) OVERWORLD( sPicTable_Ursaring, @@ -5112,6 +5229,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Ursaluna, .iconSprite = gMonIcon_Ursaluna, .iconPalIndex = 2, + SHADOW(1, 4, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Ursaluna) OVERWORLD( sPicTable_Ursaluna, @@ -5173,6 +5291,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_UrsalunaBloodmoon, .iconSprite = gMonIcon_UrsalunaBloodmoon, .iconPalIndex = 2, + SHADOW(6, 11, SHADOW_SIZE_L) FOOTPRINT(Ursaluna) .levelUpLearnset = sUrsalunaBloodmoonLevelUpLearnset, .teachableLearnset = sUrsalunaBloodmoonTeachableLearnset, @@ -5229,6 +5348,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Slugma, .iconSprite = gMonIcon_Slugma, .iconPalIndex = 0, + SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Slugma) OVERWORLD( sPicTable_Slugma, @@ -5298,6 +5418,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Magcargo, .iconSprite = gMonIcon_Magcargo, .iconPalIndex = 0, + SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Magcargo) OVERWORLD( sPicTable_Magcargo, @@ -5364,6 +5485,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Swinub, .iconSprite = gMonIcon_Swinub, .iconPalIndex = 2, + SHADOW(-3, -6, SHADOW_SIZE_S) FOOTPRINT(Swinub) OVERWORLD( sPicTable_Swinub, @@ -5435,6 +5557,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Piloswine, .iconSprite = gMonIcon_Piloswine, .iconPalIndex = 2, + SHADOW(-1, 3, SHADOW_SIZE_M) FOOTPRINT(Piloswine) OVERWORLD( sPicTable_Piloswine, @@ -5505,6 +5628,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Mamoswine, .iconSprite = gMonIcon_Mamoswine, .iconPalIndex = 2, + SHADOW(7, 7, SHADOW_SIZE_L) FOOTPRINT(Mamoswine) OVERWORLD( sPicTable_Mamoswine, @@ -5580,6 +5704,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Corsola, .iconSprite = gMonIcon_Corsola, .iconPalIndex = 0, + SHADOW(0, 1, SHADOW_SIZE_M) FOOTPRINT(Corsola) OVERWORLD( sPicTable_Corsola, @@ -5643,6 +5768,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_CorsolaGalarian, .iconSprite = gMonIcon_CorsolaGalarian, .iconPalIndex = 0, + SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Corsola) OVERWORLD( sPicTable_CorsolaGalarian, @@ -5707,6 +5833,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Cursola, .iconSprite = gMonIcon_Cursola, .iconPalIndex = 0, + SHADOW(-3, 13, SHADOW_SIZE_S) FOOTPRINT(Cursola) OVERWORLD( sPicTable_Cursola, @@ -5774,6 +5901,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Remoraid, .iconSprite = gMonIcon_Remoraid, .iconPalIndex = 0, + SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Remoraid) OVERWORLD( sPicTable_Remoraid, @@ -5846,6 +5974,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Octillery, .iconSprite = gMonIcon_Octillery, .iconPalIndex = 0, + SHADOW(1, 4, SHADOW_SIZE_M) FOOTPRINT(Octillery) OVERWORLD( sPicTable_Octillery, @@ -5908,6 +6037,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Delibird, .iconSprite = gMonIcon_Delibird, .iconPalIndex = 1, + SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Delibird) OVERWORLD( sPicTable_Delibird, @@ -5972,6 +6102,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Mantyke, .iconSprite = gMonIcon_Mantyke, .iconPalIndex = 0, + SHADOW(-1, 3, SHADOW_SIZE_S) FOOTPRINT(Mantyke) OVERWORLD( sPicTable_Mantyke, @@ -6042,6 +6173,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Mantine, .iconSprite = gMonIcon_Mantine, .iconPalIndex = 2, + SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Mantine) OVERWORLD( sPicTable_Mantine, @@ -6106,6 +6238,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Skarmory, .iconSprite = gMonIcon_Skarmory, .iconPalIndex = 0, + SHADOW(2, 9, SHADOW_SIZE_M) FOOTPRINT(Skarmory) OVERWORLD( sPicTable_Skarmory, @@ -6169,6 +6302,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Houndour, .iconSprite = gMonIcon_Houndour, .iconPalIndex = 0, + SHADOW(0, 4, SHADOW_SIZE_M) FOOTPRINT(Houndour) OVERWORLD( sPicTable_Houndour, @@ -6235,6 +6369,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Houndoom, .iconSprite = gMonIcon_Houndoom, .iconPalIndex = 0, + SHADOW(-5, 13, SHADOW_SIZE_L) FOOTPRINT(Houndoom) OVERWORLD( sPicTable_Houndoom, @@ -6297,6 +6432,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_HoundoomMega, .iconSprite = gMonIcon_HoundoomMega, .iconPalIndex = 0, + SHADOW(-5, 13, SHADOW_SIZE_L) FOOTPRINT(Houndoom) .isMegaEvolution = TRUE, .levelUpLearnset = sHoundoomLevelUpLearnset, @@ -6355,6 +6491,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Phanpy, .iconSprite = gMonIcon_Phanpy, .iconPalIndex = 0, + SHADOW(3, -2, SHADOW_SIZE_M) FOOTPRINT(Phanpy) OVERWORLD( sPicTable_Phanpy, @@ -6422,6 +6559,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Donphan, .iconSprite = gMonIcon_Donphan, .iconPalIndex = 0, + SHADOW(7, 2, SHADOW_SIZE_L) FOOTPRINT(Donphan) OVERWORLD( sPicTable_Donphan, @@ -6488,6 +6626,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Stantler, .iconSprite = gMonIcon_Stantler, .iconPalIndex = 2, + SHADOW(3, 13, SHADOW_SIZE_M) FOOTPRINT(Stantler) OVERWORLD( sPicTable_Stantler, @@ -6552,6 +6691,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Wyrdeer, .iconSprite = gMonIcon_Wyrdeer, .iconPalIndex = 2, + SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Wyrdeer) OVERWORLD( sPicTable_Wyrdeer, @@ -6619,6 +6759,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Smeargle, .iconSprite = gMonIcon_Smeargle, .iconPalIndex = 1, + SHADOW(6, 7, SHADOW_SIZE_S) FOOTPRINT(Smeargle) OVERWORLD( sPicTable_Smeargle, @@ -6688,6 +6829,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Miltank, .iconSprite = gMonIcon_Miltank, .iconPalIndex = 0, + SHADOW(-3, 4, SHADOW_SIZE_M) FOOTPRINT(Miltank) OVERWORLD( sPicTable_Miltank, @@ -6762,6 +6904,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Raikou, .iconSprite = gMonIcon_Raikou, .iconPalIndex = 2, + SHADOW(-4, 7, SHADOW_SIZE_L) FOOTPRINT(Raikou) OVERWORLD( sPicTable_Raikou, @@ -6772,6 +6915,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Raikou ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRaikouLevelUpLearnset, .teachableLearnset = sRaikouTeachableLearnset, }, @@ -6836,6 +6980,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Entei, .iconSprite = gMonIcon_Entei, .iconPalIndex = 2, + SHADOW(-1, 8, SHADOW_SIZE_L) FOOTPRINT(Entei) OVERWORLD( sPicTable_Entei, @@ -6846,6 +6991,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Entei ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sEnteiLevelUpLearnset, .teachableLearnset = sEnteiTeachableLearnset, }, @@ -6910,6 +7056,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Suicune, .iconSprite = gMonIcon_Suicune, .iconPalIndex = 2, + SHADOW(3, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Suicune) OVERWORLD( sPicTable_Suicune, @@ -6920,6 +7067,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = gShinyOverworldPalette_Suicune ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sSuicuneLevelUpLearnset, .teachableLearnset = sSuicuneTeachableLearnset, }, @@ -6973,6 +7121,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Larvitar, .iconSprite = gMonIcon_Larvitar, .iconPalIndex = 1, + SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Larvitar) OVERWORLD( sPicTable_Larvitar, @@ -7035,6 +7184,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Pupitar, .iconSprite = gMonIcon_Pupitar, .iconPalIndex = 2, + SHADOW(3, 3, SHADOW_SIZE_S) FOOTPRINT(Pupitar) OVERWORLD( sPicTable_Pupitar, @@ -7103,6 +7253,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Tyranitar, .iconSprite = gMonIcon_Tyranitar, .iconPalIndex = 4, + SHADOW(-1, 11, SHADOW_SIZE_L) FOOTPRINT(Tyranitar) OVERWORLD( sPicTable_Tyranitar, @@ -7166,6 +7317,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_TyranitarMega, .iconSprite = gMonIcon_TyranitarMega, .iconPalIndex = 1, + SHADOW(-1, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Tyranitar) .isMegaEvolution = TRUE, .levelUpLearnset = sTyranitarLevelUpLearnset, @@ -7232,6 +7384,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Lugia, .iconSprite = gMonIcon_Lugia, .iconPalIndex = 0, + SHADOW(2, 17, SHADOW_SIZE_L) FOOTPRINT(Lugia) OVERWORLD( sPicTable_Lugia, @@ -7243,6 +7396,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLugiaLevelUpLearnset, .teachableLearnset = sLugiaTeachableLearnset, }, @@ -7305,6 +7459,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_HoOh, .iconSprite = gMonIcon_HoOh, .iconPalIndex = 1, + SHADOW(1, 17, SHADOW_SIZE_L) FOOTPRINT(HoOh) OVERWORLD( sPicTable_HoOh, @@ -7316,6 +7471,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sHoOhLevelUpLearnset, .teachableLearnset = sHoOhTeachableLearnset, }, @@ -7378,6 +7534,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = .shinyPalette = gMonShinyPalette_Celebi, .iconSprite = gMonIcon_Celebi, .iconPalIndex = 1, + SHADOW(0, 14, SHADOW_SIZE_S) FOOTPRINT(Celebi) OVERWORLD( sPicTable_Celebi, @@ -7389,6 +7546,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCelebiLevelUpLearnset, .teachableLearnset = sCelebiTeachableLearnset, }, diff --git a/src/data/pokemon/species_info/gen_3_families.h b/src/data/pokemon/species_info/gen_3_families.h index 8a23bb05fd..e9d566096a 100644 --- a/src/data/pokemon/species_info/gen_3_families.h +++ b/src/data/pokemon/species_info/gen_3_families.h @@ -51,6 +51,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Treecko, .iconSprite = gMonIcon_Treecko, .iconPalIndex = 1, + SHADOW(-3, 4, SHADOW_SIZE_S) FOOTPRINT(Treecko) OVERWORLD( sPicTable_Treecko, @@ -113,6 +114,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Grovyle, .iconSprite = gMonIcon_Grovyle, .iconPalIndex = 1, + SHADOW(1, 7, SHADOW_SIZE_M) FOOTPRINT(Grovyle) OVERWORLD( sPicTable_Grovyle, @@ -180,6 +182,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Sceptile, .iconSprite = gMonIcon_Sceptile, .iconPalIndex = 1, + SHADOW(2, 11, SHADOW_SIZE_L) FOOTPRINT(Sceptile) OVERWORLD( sPicTable_Sceptile, @@ -243,6 +246,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_SceptileMega, .iconSprite = gMonIcon_SceptileMega, .iconPalIndex = 1, + SHADOW(3, 11, SHADOW_SIZE_L) FOOTPRINT(Sceptile) .isMegaEvolution = TRUE, .levelUpLearnset = sSceptileLevelUpLearnset, @@ -303,6 +307,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Torchic, .iconSprite = gMonIcon_Torchic, .iconPalIndex = 0, + SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Torchic) OVERWORLD( sPicTable_Torchic, @@ -370,6 +375,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Combusken, .iconSprite = gMonIcon_Combusken, .iconPalIndex = 0, + SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Combusken) OVERWORLD( sPicTable_Combusken, @@ -441,6 +447,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Blaziken, .iconSprite = gMonIcon_Blaziken, .iconPalIndex = 0, + SHADOW(4, 8, SHADOW_SIZE_M) FOOTPRINT(Blaziken) OVERWORLD( sPicTable_Blaziken, @@ -504,6 +511,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_BlazikenMega, .iconSprite = gMonIcon_BlazikenMega, .iconPalIndex = 0, + SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Blaziken) .isMegaEvolution = TRUE, .levelUpLearnset = sBlazikenLevelUpLearnset, @@ -562,6 +570,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Mudkip, .iconSprite = gMonIcon_Mudkip, .iconPalIndex = 0, + SHADOW(1, 1, SHADOW_SIZE_S) FOOTPRINT(Mudkip) OVERWORLD( sPicTable_Mudkip, @@ -624,6 +633,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Marshtomp, .iconSprite = gMonIcon_Marshtomp, .iconPalIndex = 0, + SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Marshtomp) OVERWORLD( sPicTable_Marshtomp, @@ -691,6 +701,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Swampert, .iconSprite = gMonIcon_Swampert, .iconPalIndex = 0, + SHADOW(5, 7, SHADOW_SIZE_L) FOOTPRINT(Swampert) OVERWORLD( sPicTable_Swampert, @@ -754,6 +765,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_SwampertMega, .iconSprite = gMonIcon_SwampertMega, .iconPalIndex = 0, + SHADOW(6, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Swampert) .isMegaEvolution = TRUE, .levelUpLearnset = sSwampertLevelUpLearnset, @@ -822,6 +834,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Poochyena, .iconSprite = gMonIcon_Poochyena, .iconPalIndex = 2, + SHADOW(0, 2, SHADOW_SIZE_M) FOOTPRINT(Poochyena) OVERWORLD( sPicTable_Poochyena, @@ -888,6 +901,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Mightyena, .iconSprite = gMonIcon_Mightyena, .iconPalIndex = 2, + SHADOW(-2, 6, SHADOW_SIZE_L) FOOTPRINT(Mightyena) OVERWORLD( sPicTable_Mightyena, @@ -964,6 +978,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Zigzagoon, .iconSprite = gMonIcon_Zigzagoon, .iconPalIndex = 2, + SHADOW(-4, 0, SHADOW_SIZE_M) FOOTPRINT(Zigzagoon) OVERWORLD( sPicTable_Zigzagoon, @@ -1033,6 +1048,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Linoone, .iconSprite = gMonIcon_Linoone, .iconPalIndex = 2, + SHADOW(-6, 0, SHADOW_SIZE_L) FOOTPRINT(Linoone) OVERWORLD( sPicTable_Linoone, @@ -1095,6 +1111,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_ZigzagoonGalarian, .iconSprite = gMonIcon_ZigzagoonGalarian, .iconPalIndex = 0, + SHADOW(-5, 0, SHADOW_SIZE_M) FOOTPRINT(Zigzagoon) OVERWORLD( sPicTable_ZigzagoonGalarian, @@ -1159,6 +1176,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_LinooneGalarian, .iconSprite = gMonIcon_LinooneGalarian, .iconPalIndex = 0, + SHADOW(-4, 0, SHADOW_SIZE_L) FOOTPRINT(Linoone) OVERWORLD( sPicTable_LinooneGalarian, @@ -1222,6 +1240,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Obstagoon, .iconSprite = gMonIcon_Obstagoon, .iconPalIndex = 0, + SHADOW(2, 13, SHADOW_SIZE_M) FOOTPRINT(Obstagoon) OVERWORLD( sPicTable_Obstagoon, @@ -1293,6 +1312,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Wurmple, .iconSprite = gMonIcon_Wurmple, .iconPalIndex = 0, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Wurmple) OVERWORLD( sPicTable_Wurmple, @@ -1356,6 +1376,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Silcoon, .iconSprite = gMonIcon_Silcoon, .iconPalIndex = 2, + SHADOW(0, -4, SHADOW_SIZE_M) FOOTPRINT(Silcoon) OVERWORLD( sPicTable_Silcoon, @@ -1432,6 +1453,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Beautifly, .iconSprite = gMonIcon_Beautifly, .iconPalIndex = 0, + SHADOW(-5, 12, SHADOW_SIZE_S) FOOTPRINT(Beautifly) OVERWORLD( sPicTable_Beautifly, @@ -1498,6 +1520,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Cascoon, .iconSprite = gMonIcon_Cascoon, .iconPalIndex = 2, + SHADOW(0, -4, SHADOW_SIZE_M) FOOTPRINT(Cascoon) OVERWORLD( sPicTable_Cascoon, @@ -1576,6 +1599,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Dustox, .iconSprite = gMonIcon_Dustox, .iconPalIndex = 5, + SHADOW(-2, 11, SHADOW_SIZE_S) FOOTPRINT(Dustox) OVERWORLD( sPicTable_Dustox, @@ -1639,6 +1663,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Lotad, .iconSprite = gMonIcon_Lotad, .iconPalIndex = 4, + SHADOW(2, -3, SHADOW_SIZE_S) FOOTPRINT(Lotad) OVERWORLD( sPicTable_Lotad, @@ -1702,6 +1727,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Lombre, .iconSprite = gMonIcon_Lombre, .iconPalIndex = 1, + SHADOW(4, 2, SHADOW_SIZE_S) FOOTPRINT(Lombre) OVERWORLD( sPicTable_Lombre, @@ -1774,6 +1800,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Ludicolo, .iconSprite = gMonIcon_Ludicolo, .iconPalIndex = 1, + SHADOW(-3, 14, SHADOW_SIZE_M) FOOTPRINT(Ludicolo) OVERWORLD( sPicTable_Ludicolo, @@ -1837,6 +1864,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Seedot, .iconSprite = gMonIcon_Seedot, .iconPalIndex = 2, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Seedot) OVERWORLD( sPicTable_Seedot, @@ -1904,6 +1932,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Nuzleaf, .iconSprite = gMonIcon_Nuzleaf, .iconPalIndex = 1, + SHADOW(-3, 5, SHADOW_SIZE_S) FOOTPRINT(Nuzleaf) OVERWORLD( sPicTable_Nuzleaf, @@ -1980,6 +2009,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Shiftry, .iconSprite = gMonIcon_Shiftry, .iconPalIndex = 5, + SHADOW(-5, 5, SHADOW_SIZE_M) FOOTPRINT(Shiftry) OVERWORLD( sPicTable_Shiftry, @@ -2042,6 +2072,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Taillow, .iconSprite = gMonIcon_Taillow, .iconPalIndex = 2, + SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Taillow) OVERWORLD( sPicTable_Taillow, @@ -2110,6 +2141,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Swellow, .iconSprite = gMonIcon_Swellow, .iconPalIndex = 2, + SHADOW(-7, 7, SHADOW_SIZE_M) FOOTPRINT(Swellow) OVERWORLD( sPicTable_Swellow, @@ -2178,6 +2210,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Wingull, .iconSprite = gMonIcon_Wingull, .iconPalIndex = 0, + SHADOW(-2, 15, SHADOW_SIZE_S) FOOTPRINT(Wingull) OVERWORLD( sPicTable_Wingull, @@ -2252,6 +2285,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Pelipper, .iconSprite = gMonIcon_Pelipper, .iconPalIndex = 2, + SHADOW(-1, 17, SHADOW_SIZE_M) FOOTPRINT(Pelipper) OVERWORLD( sPicTable_Pelipper, @@ -2322,6 +2356,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Ralts, .iconSprite = gMonIcon_Ralts, .iconPalIndex = 1, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Ralts) OVERWORLD( sPicTable_Ralts, @@ -2384,6 +2419,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Kirlia, .iconSprite = gMonIcon_Kirlia, .iconPalIndex = 1, + SHADOW(-2, 7, SHADOW_SIZE_S) FOOTPRINT(Kirlia) OVERWORLD( sPicTable_Kirlia, @@ -2452,6 +2488,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Gardevoir, .iconSprite = gMonIcon_Gardevoir, .iconPalIndex = 1, + SHADOW(0, 14, SHADOW_SIZE_L) FOOTPRINT(Gardevoir) OVERWORLD( sPicTable_Gardevoir, @@ -2515,6 +2552,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_GardevoirMega, .iconSprite = gMonIcon_GardevoirMega, .iconPalIndex = 1, + SHADOW(1, 14, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gardevoir) .isMegaEvolution = TRUE, .levelUpLearnset = sGardevoirLevelUpLearnset, @@ -2582,6 +2620,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Gallade, .iconSprite = gMonIcon_Gallade, .iconPalIndex = 1, + SHADOW(4, 13, SHADOW_SIZE_L) FOOTPRINT(Gallade) OVERWORLD( sPicTable_Gallade, @@ -2645,6 +2684,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_GalladeMega, .iconSprite = gMonIcon_GalladeMega, .iconPalIndex = 1, + SHADOW(-2, 13, SHADOW_SIZE_L) FOOTPRINT(Gallade) .isMegaEvolution = TRUE, .levelUpLearnset = sGalladeLevelUpLearnset, @@ -2705,6 +2745,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Surskit, .iconSprite = gMonIcon_Surskit, .iconPalIndex = 0, + SHADOW(-1, -3, SHADOW_SIZE_S) FOOTPRINT(Surskit) OVERWORLD( sPicTable_Surskit, @@ -2776,6 +2817,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Masquerain, .iconSprite = gMonIcon_Masquerain, .iconPalIndex = 0, + SHADOW(-4, 17, SHADOW_SIZE_M) FOOTPRINT(Masquerain) OVERWORLD( sPicTable_Masquerain, @@ -2844,6 +2886,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Shroomish, .iconSprite = gMonIcon_Shroomish, .iconPalIndex = 1, + SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Shroomish) OVERWORLD( sPicTable_Shroomish, @@ -2912,6 +2955,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Breloom, .iconSprite = gMonIcon_Breloom, .iconPalIndex = 1, + SHADOW(-4, 9, SHADOW_SIZE_M) FOOTPRINT(Breloom) OVERWORLD( sPicTable_Breloom, @@ -2974,6 +3018,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Slakoth, .iconSprite = gMonIcon_Slakoth, .iconPalIndex = 2, + SHADOW(1, -4, SHADOW_SIZE_M) FOOTPRINT(Slakoth) OVERWORLD( sPicTable_Slakoth, @@ -3036,6 +3081,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Vigoroth, .iconSprite = gMonIcon_Vigoroth, .iconPalIndex = 2, + SHADOW(4, 6, SHADOW_SIZE_M) FOOTPRINT(Vigoroth) OVERWORLD( sPicTable_Vigoroth, @@ -3103,6 +3149,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Slaking, .iconSprite = gMonIcon_Slaking, .iconPalIndex = 2, + SHADOW(0, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Slaking) OVERWORLD( sPicTable_Slaking, @@ -3166,6 +3213,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Nincada, .iconSprite = gMonIcon_Nincada, .iconPalIndex = 1, + SHADOW(2, -3, SHADOW_SIZE_M) FOOTPRINT(Nincada) OVERWORLD( sPicTable_Nincada, @@ -3230,6 +3278,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Ninjask, .iconSprite = gMonIcon_Ninjask, .iconPalIndex = 1, + SHADOW(-2, 10, SHADOW_SIZE_S) FOOTPRINT(Ninjask) OVERWORLD( sPicTable_Ninjask, @@ -3291,6 +3340,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Shedinja, .iconSprite = gMonIcon_Shedinja, .iconPalIndex = 1, + SHADOW(-2, 9, SHADOW_SIZE_S) FOOTPRINT(Shedinja) OVERWORLD( sPicTable_Shedinja, @@ -3353,6 +3403,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Whismur, .iconSprite = gMonIcon_Whismur, .iconPalIndex = 1, + SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(Whismur) OVERWORLD( sPicTable_Whismur, @@ -3415,6 +3466,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Loudred, .iconSprite = gMonIcon_Loudred, .iconPalIndex = 2, + SHADOW(1, 9, SHADOW_SIZE_M) FOOTPRINT(Loudred) OVERWORLD( sPicTable_Loudred, @@ -3484,6 +3536,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Exploud, .iconSprite = gMonIcon_Exploud, .iconPalIndex = 2, + SHADOW(0, 12, SHADOW_SIZE_L) FOOTPRINT(Exploud) OVERWORLD( sPicTable_Exploud, @@ -3547,6 +3600,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Makuhita, .iconSprite = gMonIcon_Makuhita, .iconPalIndex = 1, + SHADOW(1, 5, SHADOW_SIZE_M) FOOTPRINT(Makuhita) OVERWORLD( sPicTable_Makuhita, @@ -3610,6 +3664,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Hariyama, .iconSprite = gMonIcon_Hariyama, .iconPalIndex = 2, + SHADOW(-3, 9, SHADOW_SIZE_L) FOOTPRINT(Hariyama) OVERWORLD( sPicTable_Hariyama, @@ -3673,6 +3728,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Nosepass, .iconSprite = gMonIcon_Nosepass, .iconPalIndex = 0, + SHADOW(-1, 3, SHADOW_SIZE_M) FOOTPRINT(Nosepass) OVERWORLD( sPicTable_Nosepass, @@ -3740,6 +3796,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Probopass, .iconSprite = gMonIcon_Probopass, .iconPalIndex = 0, + SHADOW(-1, 13, SHADOW_SIZE_L) FOOTPRINT(Probopass) OVERWORLD( sPicTable_Probopass, @@ -3807,6 +3864,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Skitty, .iconSprite = gMonIcon_Skitty, .iconPalIndex = 0, + SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Skitty) OVERWORLD( sPicTable_Skitty, @@ -3880,6 +3938,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Delcatty, .iconSprite = gMonIcon_Delcatty, .iconPalIndex = 2, + SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Delcatty) OVERWORLD( sPicTable_Delcatty, @@ -3948,6 +4007,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Sableye, .iconSprite = gMonIcon_Sableye, .iconPalIndex = 2, + SHADOW(2, 3, SHADOW_SIZE_S) FOOTPRINT(Sableye) OVERWORLD( sPicTable_Sableye, @@ -4012,6 +4072,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_SableyeMega, .iconSprite = gMonIcon_SableyeMega, .iconPalIndex = 2, + SHADOW(3, 7, SHADOW_SIZE_S) FOOTPRINT(Sableye) .isMegaEvolution = TRUE, .levelUpLearnset = sSableyeLevelUpLearnset, @@ -4079,6 +4140,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Mawile, .iconSprite = gMonIcon_Mawile, .iconPalIndex = 2, + SHADOW(1, 4, SHADOW_SIZE_L) FOOTPRINT(Mawile) OVERWORLD( sPicTable_Mawile, @@ -4144,6 +4206,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_MawileMega, .iconSprite = gMonIcon_MawileMega, .iconPalIndex = 0, + SHADOW(0, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Mawile) .isMegaEvolution = TRUE, .levelUpLearnset = sMawileLevelUpLearnset, @@ -4204,6 +4267,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Aron, .iconSprite = gMonIcon_Aron, .iconPalIndex = 2, + SHADOW(2, -3, SHADOW_SIZE_S) FOOTPRINT(Aron) OVERWORLD( sPicTable_Aron, @@ -4267,6 +4331,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Lairon, .iconSprite = gMonIcon_Lairon, .iconPalIndex = 2, + SHADOW(4, 2, SHADOW_SIZE_L) FOOTPRINT(Lairon) OVERWORLD( sPicTable_Lairon, @@ -4335,6 +4400,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Aggron, .iconSprite = gMonIcon_Aggron, .iconPalIndex = 2, + SHADOW(5, 12, SHADOW_SIZE_L) FOOTPRINT(Aggron) OVERWORLD( sPicTable_Aggron, @@ -4399,6 +4465,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_AggronMega, .iconSprite = gMonIcon_AggronMega, .iconPalIndex = 2, + SHADOW(1, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Aggron) .isMegaEvolution = TRUE, .levelUpLearnset = sAggronLevelUpLearnset, @@ -4461,6 +4528,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Meditite, .iconSprite = gMonIcon_Meditite, .iconPalIndex = 0, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Meditite) OVERWORLD( sPicTable_Meditite, @@ -4527,6 +4595,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Medicham, .iconSprite = gMonIcon_Medicham, .iconPalIndex = 0, + SHADOW(-2, 13, SHADOW_SIZE_S) FOOTPRINT(Medicham) OVERWORLD( sPicTable_Medicham, @@ -4590,6 +4659,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_MedichamMega, .iconSprite = gMonIcon_MedichamMega, .iconPalIndex = 0, + SHADOW(-2, 13, SHADOW_SIZE_S) FOOTPRINT(Medicham) .isMegaEvolution = TRUE, .levelUpLearnset = sMedichamLevelUpLearnset, @@ -4648,6 +4718,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Electrike, .iconSprite = gMonIcon_Electrike, .iconPalIndex = 1, + SHADOW(3, -1, SHADOW_SIZE_M) FOOTPRINT(Electrike) OVERWORLD( sPicTable_Electrike, @@ -4710,6 +4781,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Manectric, .iconSprite = gMonIcon_Manectric, .iconPalIndex = 0, + SHADOW(1, 10, SHADOW_SIZE_M) FOOTPRINT(Manectric) OVERWORLD( sPicTable_Manectric, @@ -4772,6 +4844,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_ManectricMega, .iconSprite = gMonIcon_ManectricMega, .iconPalIndex = 0, + SHADOW(1, 10, SHADOW_SIZE_L) FOOTPRINT(Manectric) .isMegaEvolution = TRUE, .levelUpLearnset = sManectricLevelUpLearnset, @@ -4835,6 +4908,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Plusle, .iconSprite = gMonIcon_Plusle, .iconPalIndex = 0, + SHADOW(2, 3, SHADOW_SIZE_S) FOOTPRINT(Plusle) OVERWORLD( sPicTable_Plusle, @@ -4903,6 +4977,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Minun, .iconSprite = gMonIcon_Minun, .iconPalIndex = 0, + SHADOW(-4, 3, SHADOW_SIZE_S) FOOTPRINT(Minun) OVERWORLD( sPicTable_Minun, @@ -4973,6 +5048,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Volbeat, .iconSprite = gMonIcon_Volbeat, .iconPalIndex = 0, + SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Volbeat) OVERWORLD( sPicTable_Volbeat, @@ -5045,6 +5121,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Illumise, .iconSprite = gMonIcon_Illumise, .iconPalIndex = 2, + SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Illumise) OVERWORLD( sPicTable_Illumise, @@ -5111,6 +5188,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Budew, .iconSprite = gMonIcon_Budew, .iconPalIndex = 1, + SHADOW(-3, 0, SHADOW_SIZE_S) FOOTPRINT(Budew) OVERWORLD( sPicTable_Budew, @@ -5180,6 +5258,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Roselia, .iconSprite = gMonIcon_Roselia, .iconPalIndex = 4, + SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Roselia) OVERWORLD( sPicTable_Roselia, @@ -5257,6 +5336,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Roserade, .iconSprite = gMonIcon_Roserade, .iconPalIndex = 0, + SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Roserade) OVERWORLD( sPicTable_Roserade, @@ -5326,6 +5406,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Gulpin, .iconSprite = gMonIcon_Gulpin, .iconPalIndex = 1, + SHADOW(1, -2, SHADOW_SIZE_S) FOOTPRINT(Gulpin) OVERWORLD( sPicTable_Gulpin, @@ -5394,6 +5475,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Swalot, .iconSprite = gMonIcon_Swalot, .iconPalIndex = 2, + SHADOW(4, 3, SHADOW_SIZE_L) FOOTPRINT(Swalot) OVERWORLD( sPicTable_Swalot, @@ -5457,6 +5539,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Carvanha, .iconSprite = gMonIcon_Carvanha, .iconPalIndex = 0, + SHADOW(-1, 8, SHADOW_SIZE_S) FOOTPRINT(Carvanha) OVERWORLD( sPicTable_Carvanha, @@ -5520,6 +5603,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Sharpedo, .iconSprite = gMonIcon_Sharpedo, .iconPalIndex = 0, + SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Sharpedo) OVERWORLD( sPicTable_Sharpedo, @@ -5585,6 +5669,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_SharpedoMega, .iconSprite = gMonIcon_SharpedoMega, .iconPalIndex = 0, + SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Sharpedo) .isMegaEvolution = TRUE, .levelUpLearnset = sSharpedoLevelUpLearnset, @@ -5643,6 +5728,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Wailmer, .iconSprite = gMonIcon_Wailmer, .iconPalIndex = 2, + SHADOW(0, 3, SHADOW_SIZE_L) FOOTPRINT(Wailmer) OVERWORLD( sPicTable_Wailmer, @@ -5706,6 +5792,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Wailord, .iconSprite = gMonIcon_Wailord, .iconPalIndex = 0, + SHADOW(1, 7, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Wailord) OVERWORLD( sPicTable_Wailord, @@ -5776,6 +5863,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Numel, .iconSprite = gMonIcon_Numel, .iconPalIndex = 1, + SHADOW(4, 2, SHADOW_SIZE_S) FOOTPRINT(Numel) OVERWORLD( sPicTable_Numel, @@ -5847,6 +5935,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Camerupt, .iconSprite = gMonIcon_Camerupt, .iconPalIndex = 0, + SHADOW(2, 4, SHADOW_SIZE_L) FOOTPRINT(Camerupt) OVERWORLD( sPicTable_Camerupt, @@ -5911,6 +6000,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_CameruptMega, .iconSprite = gMonIcon_CameruptMega, .iconPalIndex = 0, + SHADOW(1, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Camerupt) .isMegaEvolution = TRUE, .levelUpLearnset = sCameruptLevelUpLearnset, @@ -5974,6 +6064,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Torkoal, .iconSprite = gMonIcon_Torkoal, .iconPalIndex = 2, + SHADOW(2, 7, SHADOW_SIZE_L) FOOTPRINT(Torkoal) OVERWORLD( sPicTable_Torkoal, @@ -6037,6 +6128,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Spoink, .iconSprite = gMonIcon_Spoink, .iconPalIndex = 0, + SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Spoink) OVERWORLD( sPicTable_Spoink, @@ -6100,6 +6192,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Grumpig, .iconSprite = gMonIcon_Grumpig, .iconPalIndex = 2, + SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Grumpig) OVERWORLD( sPicTable_Grumpig, @@ -6167,6 +6260,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Spinda, .iconSprite = gMonIcon_Spinda, .iconPalIndex = 1, + SHADOW(2, 6, SHADOW_SIZE_S) FOOTPRINT(Spinda) OVERWORLD( sPicTable_Spinda, @@ -6235,6 +6329,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Trapinch, .iconSprite = gMonIcon_Trapinch, .iconPalIndex = 0, + SHADOW(4, -1, SHADOW_SIZE_S) FOOTPRINT(Trapinch) OVERWORLD( sPicTable_Trapinch, @@ -6302,6 +6397,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Vibrava, .iconSprite = gMonIcon_Vibrava, .iconPalIndex = 1, + SHADOW(-2, 0, SHADOW_SIZE_L) FOOTPRINT(Vibrava) OVERWORLD( sPicTable_Vibrava, @@ -6375,6 +6471,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Flygon, .iconSprite = gMonIcon_Flygon, .iconPalIndex = 1, + SHADOW(0, 17, SHADOW_SIZE_M) FOOTPRINT(Flygon) OVERWORLD( sPicTable_Flygon, @@ -6438,6 +6535,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Cacnea, .iconSprite = gMonIcon_Cacnea, .iconPalIndex = 1, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Cacnea) OVERWORLD( sPicTable_Cacnea, @@ -6504,6 +6602,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Cacturne, .iconSprite = gMonIcon_Cacturne, .iconPalIndex = 1, + SHADOW(-1, 14, SHADOW_SIZE_M) FOOTPRINT(Cacturne) OVERWORLD( sPicTable_Cacturne, @@ -6566,6 +6665,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Swablu, .iconSprite = gMonIcon_Swablu, .iconPalIndex = 0, + SHADOW(-2, 0, SHADOW_SIZE_S) FOOTPRINT(Swablu) OVERWORLD( sPicTable_Swablu, @@ -6628,6 +6728,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Altaria, .iconSprite = gMonIcon_Altaria, .iconPalIndex = 0, + SHADOW(-1, 14, SHADOW_SIZE_L) FOOTPRINT(Altaria) OVERWORLD( sPicTable_Altaria, @@ -6692,6 +6793,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_AltariaMega, .iconSprite = gMonIcon_AltariaMega, .iconPalIndex = 0, + SHADOW(-2, 17, SHADOW_SIZE_L) FOOTPRINT(Altaria) .isMegaEvolution = TRUE, .levelUpLearnset = sAltariaLevelUpLearnset, @@ -6752,6 +6854,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Zangoose, .iconSprite = gMonIcon_Zangoose, .iconPalIndex = 0, + SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Zangoose) OVERWORLD( sPicTable_Zangoose, @@ -6818,6 +6921,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Seviper, .iconSprite = gMonIcon_Seviper, .iconPalIndex = 2, + SHADOW(-3, 7, SHADOW_SIZE_L) FOOTPRINT(Seviper) OVERWORLD( sPicTable_Seviper, @@ -6890,6 +6994,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Lunatone, .iconSprite = gMonIcon_Lunatone, .iconPalIndex = 1, + SHADOW(0, 15, SHADOW_SIZE_S) FOOTPRINT(Lunatone) OVERWORLD( sPicTable_Lunatone, @@ -6961,6 +7066,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Solrock, .iconSprite = gMonIcon_Solrock, .iconPalIndex = 0, + SHADOW(0, 15, SHADOW_SIZE_M) FOOTPRINT(Solrock) OVERWORLD( sPicTable_Solrock, @@ -7028,6 +7134,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Barboach, .iconSprite = gMonIcon_Barboach, .iconPalIndex = 0, + SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Barboach) OVERWORLD( sPicTable_Barboach, @@ -7094,6 +7201,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Whiscash, .iconSprite = gMonIcon_Whiscash, .iconPalIndex = 0, + SHADOW(0, 3, SHADOW_SIZE_L) FOOTPRINT(Whiscash) OVERWORLD( sPicTable_Whiscash, @@ -7156,6 +7264,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Corphish, .iconSprite = gMonIcon_Corphish, .iconPalIndex = 0, + SHADOW(1, 5, SHADOW_SIZE_M) FOOTPRINT(Corphish) OVERWORLD( sPicTable_Corphish, @@ -7218,6 +7327,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Crawdaunt, .iconSprite = gMonIcon_Crawdaunt, .iconPalIndex = 0, + SHADOW(6, 9, SHADOW_SIZE_M) FOOTPRINT(Crawdaunt) OVERWORLD( sPicTable_Crawdaunt, @@ -7282,6 +7392,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Baltoy, .iconSprite = gMonIcon_Baltoy, .iconPalIndex = 2, + SHADOW(-2, 5, SHADOW_SIZE_S) FOOTPRINT(Baltoy) OVERWORLD( sPicTable_Baltoy, @@ -7345,6 +7456,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Claydol, .iconSprite = gMonIcon_Claydol, .iconPalIndex = 0, + SHADOW(0, 18, SHADOW_SIZE_M) FOOTPRINT(Claydol) OVERWORLD( sPicTable_Claydol, @@ -7414,6 +7526,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Lileep, .iconSprite = gMonIcon_Lileep, .iconPalIndex = 2, + SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Lileep) OVERWORLD( sPicTable_Lileep, @@ -7483,6 +7596,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Cradily, .iconSprite = gMonIcon_Cradily, .iconPalIndex = 1, + SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Cradily) OVERWORLD( sPicTable_Cradily, @@ -7551,6 +7665,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Anorith, .iconSprite = gMonIcon_Anorith, .iconPalIndex = 0, + SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Anorith) OVERWORLD( sPicTable_Anorith, @@ -7619,6 +7734,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Armaldo, .iconSprite = gMonIcon_Armaldo, .iconPalIndex = 2, + SHADOW(-2, 11, SHADOW_SIZE_L) FOOTPRINT(Armaldo) OVERWORLD( sPicTable_Armaldo, @@ -7685,6 +7801,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Feebas, .iconSprite = gMonIcon_Feebas, .iconPalIndex = 2, + SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Feebas) OVERWORLD( sPicTable_Feebas, @@ -7758,6 +7875,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Milotic, .iconSprite = gMonIcon_Milotic, .iconPalIndex = 2, + SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Milotic) OVERWORLD( sPicTable_Milotic, @@ -7823,6 +7941,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_CastformNormal, .iconSprite = gMonIcon_CastformNormal, .iconPalIndex = 0, + SHADOW(1, 10, SHADOW_SIZE_S) FOOTPRINT(Castform) OVERWORLD( sPicTable_CastformNormal, @@ -7889,6 +8008,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_CastformSunny, .iconSprite = gMonIcon_CastformSunny, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Castform) OVERWORLD( sPicTable_CastformSunny, @@ -7955,6 +8075,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_CastformRainy, .iconSprite = gMonIcon_CastformRainy, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Castform) OVERWORLD( sPicTable_CastformRainy, @@ -8021,6 +8142,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_CastformSnowy, .iconSprite = gMonIcon_CastformSnowy, .iconPalIndex = 0, + SHADOW(0, 8, SHADOW_SIZE_S) FOOTPRINT(Castform) OVERWORLD( sPicTable_CastformSnowy, @@ -8091,6 +8213,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Kecleon, .iconSprite = gMonIcon_Kecleon, .iconPalIndex = 1, + SHADOW(2, 8, SHADOW_SIZE_S) FOOTPRINT(Kecleon) OVERWORLD( sPicTable_Kecleon, @@ -8160,6 +8283,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Shuppet, .iconSprite = gMonIcon_Shuppet, .iconPalIndex = 0, + SHADOW(2, 12, SHADOW_SIZE_S) FOOTPRINT(Shuppet) OVERWORLD( sPicTable_Shuppet, @@ -8227,6 +8351,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Banette, .iconSprite = gMonIcon_Banette, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Banette) OVERWORLD( sPicTable_Banette, @@ -8291,6 +8416,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_BanetteMega, .iconSprite = gMonIcon_BanetteMega, .iconPalIndex = 0, + SHADOW(0, 16, SHADOW_SIZE_M) FOOTPRINT(Banette) .isMegaEvolution = TRUE, .levelUpLearnset = sBanetteLevelUpLearnset, @@ -8356,6 +8482,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Duskull, .iconSprite = gMonIcon_Duskull, .iconPalIndex = 0, + SHADOW(0, 12, SHADOW_SIZE_S) FOOTPRINT(Duskull) OVERWORLD( sPicTable_Duskull, @@ -8425,6 +8552,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Dusclops, .iconSprite = gMonIcon_Dusclops, .iconPalIndex = 0, + SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Dusclops) OVERWORLD( sPicTable_Dusclops, @@ -8501,6 +8629,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Dusknoir, .iconSprite = gMonIcon_Dusknoir, .iconPalIndex = 2, + SHADOW(6, 13, SHADOW_SIZE_M) FOOTPRINT(Dusknoir) OVERWORLD( sPicTable_Dusknoir, @@ -8568,6 +8697,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Tropius, .iconSprite = gMonIcon_Tropius, .iconPalIndex = 1, + SHADOW(-6, 13, SHADOW_SIZE_L) FOOTPRINT(Tropius) OVERWORLD( sPicTable_Tropius, @@ -8633,6 +8763,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Chingling, .iconSprite = gMonIcon_Chingling, .iconPalIndex = 1, + SHADOW(-1, -2, SHADOW_SIZE_S) FOOTPRINT(Chingling) OVERWORLD( sPicTable_Chingling, @@ -8705,6 +8836,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Chimecho, .iconSprite = gMonIcon_Chimecho, .iconPalIndex = 0, + SHADOW(-3, 16, SHADOW_SIZE_S) FOOTPRINT(Chimecho) OVERWORLD( sPicTable_Chimecho, @@ -8774,6 +8906,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Absol, .iconSprite = gMonIcon_Absol, .iconPalIndex = 0, + SHADOW(4, 6, SHADOW_SIZE_L) FOOTPRINT(Absol) OVERWORLD( sPicTable_Absol, @@ -8839,6 +8972,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_AbsolMega, .iconSprite = gMonIcon_AbsolMega, .iconPalIndex = 0, + SHADOW(1, 7, SHADOW_SIZE_L) FOOTPRINT(Absol) .isMegaEvolution = TRUE, .levelUpLearnset = sAbsolLevelUpLearnset, @@ -8904,6 +9038,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Snorunt, .iconSprite = gMonIcon_Snorunt, .iconPalIndex = 2, + SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Snorunt) OVERWORLD( sPicTable_Snorunt, @@ -8972,6 +9107,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Glalie, .iconSprite = gMonIcon_Glalie, .iconPalIndex = 0, + SHADOW(1, 15, SHADOW_SIZE_M) FOOTPRINT(Glalie) OVERWORLD( sPicTable_Glalie, @@ -9035,6 +9171,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_GlalieMega, .iconSprite = gMonIcon_GlalieMega, .iconPalIndex = 0, + SHADOW(3, 18, SHADOW_SIZE_L) FOOTPRINT(Glalie) .isMegaEvolution = TRUE, .levelUpLearnset = sGlalieLevelUpLearnset, @@ -9093,6 +9230,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Froslass, .iconSprite = gMonIcon_Froslass, .iconPalIndex = 0, + SHADOW(-1, 10, SHADOW_SIZE_S) FOOTPRINT(Froslass) OVERWORLD( sPicTable_Froslass, @@ -9161,6 +9299,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Spheal, .iconSprite = gMonIcon_Spheal, .iconPalIndex = 2, + SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Spheal) OVERWORLD( sPicTable_Spheal, @@ -9227,6 +9366,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Sealeo, .iconSprite = gMonIcon_Sealeo, .iconPalIndex = 2, + SHADOW(-1, 2, SHADOW_SIZE_L) FOOTPRINT(Sealeo) OVERWORLD( sPicTable_Sealeo, @@ -9298,6 +9438,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Walrein, .iconSprite = gMonIcon_Walrein, .iconPalIndex = 0, + SHADOW(0, 8, SHADOW_SIZE_L) FOOTPRINT(Walrein) OVERWORLD( sPicTable_Walrein, @@ -9362,6 +9503,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Clamperl, .iconSprite = gMonIcon_Clamperl, .iconPalIndex = 0, + SHADOW(-1, 1, SHADOW_SIZE_M) FOOTPRINT(Clamperl) OVERWORLD( sPicTable_Clamperl, @@ -9429,6 +9571,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Huntail, .iconSprite = gMonIcon_Huntail, .iconPalIndex = 0, + SHADOW(2, 7, SHADOW_SIZE_L) FOOTPRINT(Huntail) OVERWORLD( sPicTable_Huntail, @@ -9490,6 +9633,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Gorebyss, .iconSprite = gMonIcon_Gorebyss, .iconPalIndex = 0, + SHADOW(-1, 5, SHADOW_SIZE_M) FOOTPRINT(Gorebyss) OVERWORLD( sPicTable_Gorebyss, @@ -9558,6 +9702,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Relicanth, .iconSprite = gMonIcon_Relicanth, .iconPalIndex = 2, + SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Relicanth) OVERWORLD( sPicTable_Relicanth, @@ -9622,6 +9767,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Luvdisc, .iconSprite = gMonIcon_Luvdisc, .iconPalIndex = 0, + SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Luvdisc) OVERWORLD( sPicTable_Luvdisc, @@ -9686,6 +9832,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Bagon, .iconSprite = gMonIcon_Bagon, .iconPalIndex = 0, + SHADOW(4, 3, SHADOW_SIZE_S) FOOTPRINT(Bagon) OVERWORLD( sPicTable_Bagon, @@ -9749,6 +9896,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Shelgon, .iconSprite = gMonIcon_Shelgon, .iconPalIndex = 2, + SHADOW(1, 2, SHADOW_SIZE_M) FOOTPRINT(Shelgon) OVERWORLD( sPicTable_Shelgon, @@ -9818,6 +9966,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Salamence, .iconSprite = gMonIcon_Salamence, .iconPalIndex = 0, + SHADOW(3, 8, SHADOW_SIZE_L) FOOTPRINT(Salamence) OVERWORLD( sPicTable_Salamence, @@ -9882,6 +10031,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_SalamenceMega, .iconSprite = gMonIcon_SalamenceMega, .iconPalIndex = 0, + SHADOW(3, 8, SHADOW_SIZE_L) FOOTPRINT(Salamence) .isMegaEvolution = TRUE, .levelUpLearnset = sSalamenceLevelUpLearnset, @@ -9942,6 +10092,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Beldum, .iconSprite = gMonIcon_Beldum, .iconPalIndex = 0, + SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Beldum) OVERWORLD( sPicTable_Beldum, @@ -10005,6 +10156,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Metang, .iconSprite = gMonIcon_Metang, .iconPalIndex = 0, + SHADOW(1, 2, SHADOW_SIZE_M) FOOTPRINT(Metang) OVERWORLD( sPicTable_Metang, @@ -10073,6 +10225,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Metagross, .iconSprite = gMonIcon_Metagross, .iconPalIndex = 0, + SHADOW(2, -2, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Metagross) OVERWORLD( sPicTable_Metagross, @@ -10137,6 +10290,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_MetagrossMega, .iconSprite = gMonIcon_MetagrossMega, .iconPalIndex = 0, + SHADOW(1, 15, SHADOW_SIZE_L) FOOTPRINT(Metagross) .isMegaEvolution = TRUE, .levelUpLearnset = sMetagrossLevelUpLearnset, @@ -10202,6 +10356,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Regirock, .iconSprite = gMonIcon_Regirock, .iconPalIndex = 2, + SHADOW(1, 10, SHADOW_SIZE_L) FOOTPRINT(Regirock) OVERWORLD( sPicTable_Regirock, @@ -10212,6 +10367,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Regirock ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegirockLevelUpLearnset, .teachableLearnset = sRegirockTeachableLearnset, }, @@ -10271,6 +10427,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Regice, .iconSprite = gMonIcon_Regice, .iconPalIndex = 0, + SHADOW(1, 10, SHADOW_SIZE_L) FOOTPRINT(Regice) OVERWORLD( sPicTable_Regice, @@ -10281,6 +10438,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Regice ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegiceLevelUpLearnset, .teachableLearnset = sRegiceTeachableLearnset, }, @@ -10341,6 +10499,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Registeel, .iconSprite = gMonIcon_Registeel, .iconPalIndex = 2, + SHADOW(4, 8, SHADOW_SIZE_L) FOOTPRINT(Registeel) OVERWORLD( sPicTable_Registeel, @@ -10351,6 +10510,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Registeel ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegisteelLevelUpLearnset, .teachableLearnset = sRegisteelTeachableLearnset, }, @@ -10411,6 +10571,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Latias, .iconSprite = gMonIcon_Latias, .iconPalIndex = 0, + SHADOW(3, 15, SHADOW_SIZE_M) FOOTPRINT(Latias) OVERWORLD( sPicTable_Latias, @@ -10421,6 +10582,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Latias ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLatiasLevelUpLearnset, .teachableLearnset = sLatiasTeachableLearnset, .formSpeciesIdTable = sLatiasFormSpeciesIdTable, @@ -10476,9 +10638,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_LatiasMega, .iconSprite = gMonIcon_LatiasMega, .iconPalIndex = 2, + SHADOW(-1, 19, SHADOW_SIZE_L) FOOTPRINT(Latias) .isLegendary = TRUE, .isMegaEvolution = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLatiasLevelUpLearnset, .teachableLearnset = sLatiasTeachableLearnset, .formSpeciesIdTable = sLatiasFormSpeciesIdTable, @@ -10542,6 +10706,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Latios, .iconSprite = gMonIcon_Latios, .iconPalIndex = 0, + SHADOW(1, 17, SHADOW_SIZE_M) FOOTPRINT(Latios) OVERWORLD( sPicTable_Latios, @@ -10552,6 +10717,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = gShinyOverworldPalette_Latios ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLatiosLevelUpLearnset, .teachableLearnset = sLatiosTeachableLearnset, .formSpeciesIdTable = sLatiosFormSpeciesIdTable, @@ -10607,9 +10773,11 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_LatiosMega, .iconSprite = gMonIcon_LatiosMega, .iconPalIndex = 2, + SHADOW(-1, 19, SHADOW_SIZE_L) FOOTPRINT(Latios) .isLegendary = TRUE, .isMegaEvolution = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLatiosLevelUpLearnset, .teachableLearnset = sLatiosTeachableLearnset, .formSpeciesIdTable = sLatiosFormSpeciesIdTable, @@ -10673,6 +10841,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Kyogre, .iconSprite = gMonIcon_Kyogre, .iconPalIndex = 2, + SHADOW(-1, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kyogre) OVERWORLD( sPicTable_Kyogre, @@ -10684,6 +10853,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKyogreLevelUpLearnset, .teachableLearnset = sKyogreTeachableLearnset, .formSpeciesIdTable = sKyogreFormSpeciesIdTable, @@ -10737,10 +10907,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_KyogrePrimal, .iconSprite = gMonIcon_KyogrePrimal, .iconPalIndex = 0, + SHADOW(-1, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Kyogre) .isLegendary = TRUE, .isPrimalReversion = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKyogreLevelUpLearnset, .teachableLearnset = sKyogreTeachableLearnset, .formSpeciesIdTable = sKyogreFormSpeciesIdTable, @@ -10803,6 +10975,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Groudon, .iconSprite = gMonIcon_Groudon, .iconPalIndex = 0, + SHADOW(2, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Groudon) OVERWORLD( sPicTable_Groudon, @@ -10814,6 +10987,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGroudonLevelUpLearnset, .teachableLearnset = sGroudonTeachableLearnset, .formSpeciesIdTable = sGroudonFormSpeciesIdTable, @@ -10868,10 +11042,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_GroudonPrimal, .iconSprite = gMonIcon_GroudonPrimal, .iconPalIndex = 0, + SHADOW(2, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Groudon) .isLegendary = TRUE, .isPrimalReversion = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGroudonLevelUpLearnset, .teachableLearnset = sGroudonTeachableLearnset, .formSpeciesIdTable = sGroudonFormSpeciesIdTable, @@ -10937,6 +11113,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Rayquaza, .iconSprite = gMonIcon_Rayquaza, .iconPalIndex = 1, + SHADOW(0, 17, SHADOW_SIZE_L) FOOTPRINT(Rayquaza) OVERWORLD( sPicTable_Rayquaza, @@ -10948,6 +11125,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRayquazaLevelUpLearnset, .teachableLearnset = sRayquazaTeachableLearnset, .formSpeciesIdTable = sRayquazaFormSpeciesIdTable, @@ -11004,10 +11182,12 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_RayquazaMega, .iconSprite = gMonIcon_RayquazaMega, .iconPalIndex = 1, + SHADOW(0, 15, SHADOW_SIZE_L) FOOTPRINT(Rayquaza) .isLegendary = TRUE, .isMegaEvolution = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRayquazaLevelUpLearnset, .teachableLearnset = sRayquazaTeachableLearnset, .formSpeciesIdTable = sRayquazaFormSpeciesIdTable, @@ -11073,6 +11253,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_Jirachi, .iconSprite = gMonIcon_Jirachi, .iconPalIndex = 0, + SHADOW(0, 12, SHADOW_SIZE_S) FOOTPRINT(Jirachi) OVERWORLD( sPicTable_Jirachi, @@ -11084,6 +11265,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sJirachiLevelUpLearnset, .teachableLearnset = sJirachiTeachableLearnset, }, @@ -11143,6 +11325,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_DeoxysNormal, .iconSprite = gMonIcon_DeoxysNormal, .iconPalIndex = 0, + SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Deoxys) OVERWORLD( sPicTable_DeoxysNormal, @@ -11154,6 +11337,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDeoxysNormalLevelUpLearnset, .teachableLearnset = sDeoxysNormalTeachableLearnset, .formSpeciesIdTable = sDeoxysFormSpeciesIdTable, @@ -11204,7 +11388,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_DeoxysAttack, .iconSprite = gMonIcon_DeoxysAttack, .iconPalIndex = 0, - FOOTPRINT(Deoxys) + SHADOW(0, 14, SHADOW_SIZE_M) OVERWORLD( sPicTable_DeoxysAttack, SIZE_32x32, @@ -11215,6 +11399,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDeoxysAttackLevelUpLearnset, .teachableLearnset = sDeoxysAttackTeachableLearnset, .formSpeciesIdTable = sDeoxysFormSpeciesIdTable, @@ -11265,6 +11450,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_DeoxysDefense, .iconSprite = gMonIcon_DeoxysDefense, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Deoxys) OVERWORLD( sPicTable_DeoxysDefense, @@ -11276,6 +11462,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDeoxysDefenseLevelUpLearnset, .teachableLearnset = sDeoxysDefenseTeachableLearnset, .formSpeciesIdTable = sDeoxysFormSpeciesIdTable, @@ -11326,6 +11513,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = .shinyPalette = gMonShinyPalette_DeoxysSpeed, .iconSprite = gMonIcon_DeoxysSpeed, .iconPalIndex = 0, + SHADOW(3, 13, SHADOW_SIZE_M) FOOTPRINT(Deoxys) OVERWORLD( sPicTable_DeoxysSpeed, @@ -11337,6 +11525,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDeoxysSpeedLevelUpLearnset, .teachableLearnset = sDeoxysSpeedTeachableLearnset, .formSpeciesIdTable = sDeoxysFormSpeciesIdTable, diff --git a/src/data/pokemon/species_info/gen_4_families.h b/src/data/pokemon/species_info/gen_4_families.h index faa9ed73b4..c63d6f613b 100644 --- a/src/data/pokemon/species_info/gen_4_families.h +++ b/src/data/pokemon/species_info/gen_4_families.h @@ -51,6 +51,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Turtwig, .iconSprite = gMonIcon_Turtwig, .iconPalIndex = 1, + SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Turtwig) OVERWORLD( sPicTable_Turtwig, @@ -114,6 +115,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Grotle, .iconSprite = gMonIcon_Grotle, .iconPalIndex = 1, + SHADOW(1, 2, SHADOW_SIZE_L) FOOTPRINT(Grotle) OVERWORLD( sPicTable_Grotle, @@ -183,6 +185,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Torterra, .iconSprite = gMonIcon_Torterra, .iconPalIndex = 1, + SHADOW(1, 10, SHADOW_SIZE_L) FOOTPRINT(Torterra) OVERWORLD( sPicTable_Torterra, @@ -246,6 +249,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Chimchar, .iconSprite = gMonIcon_Chimchar, .iconPalIndex = 1, + SHADOW(4, 3, SHADOW_SIZE_S) FOOTPRINT(Chimchar) OVERWORLD( sPicTable_Chimchar, @@ -310,6 +314,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Monferno, .iconSprite = gMonIcon_Monferno, .iconPalIndex = 0, + SHADOW(-7, 6, SHADOW_SIZE_S) FOOTPRINT(Monferno) OVERWORLD( sPicTable_Monferno, @@ -379,6 +384,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Infernape, .iconSprite = gMonIcon_Infernape, .iconPalIndex = 0, + SHADOW(0, 9, SHADOW_SIZE_L) FOOTPRINT(Infernape) OVERWORLD( sPicTable_Infernape, @@ -445,6 +451,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Piplup, .iconSprite = gMonIcon_Piplup, .iconPalIndex = 0, + SHADOW(0, -1, SHADOW_SIZE_S) FOOTPRINT(Piplup) OVERWORLD( sPicTable_Piplup, @@ -511,6 +518,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Prinplup, .iconSprite = gMonIcon_Prinplup, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Prinplup) OVERWORLD( sPicTable_Prinplup, @@ -582,6 +590,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Empoleon, .iconSprite = gMonIcon_Empoleon, .iconPalIndex = 0, + SHADOW(2, 12, SHADOW_SIZE_M) FOOTPRINT(Empoleon) OVERWORLD( sPicTable_Empoleon, @@ -652,6 +661,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Starly, .iconSprite = gMonIcon_Starly, .iconPalIndex = 0, + SHADOW(-2, 1, SHADOW_SIZE_S) FOOTPRINT(Starly) OVERWORLD( sPicTable_Starly, @@ -718,6 +728,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Staravia, .iconSprite = gMonIcon_Staravia, .iconPalIndex = 0, + SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Staravia) OVERWORLD( sPicTable_Staravia, @@ -789,6 +800,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Staraptor, .iconSprite = gMonIcon_Staraptor, .iconPalIndex = 0, + SHADOW(1, 10, SHADOW_SIZE_M) FOOTPRINT(Staraptor) OVERWORLD( sPicTable_Staraptor, @@ -855,6 +867,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Bidoof, .iconSprite = gMonIcon_Bidoof, .iconPalIndex = 2, + SHADOW(1, 1, SHADOW_SIZE_M) FOOTPRINT(Bidoof) OVERWORLD( sPicTable_Bidoof, @@ -919,6 +932,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Bibarel, .iconSprite = gMonIcon_Bibarel, .iconPalIndex = 2, + SHADOW(-5, 5, SHADOW_SIZE_M) FOOTPRINT(Bibarel) OVERWORLD( sPicTable_Bibarel, @@ -986,6 +1000,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Kricketot, .iconSprite = gMonIcon_Kricketot, .iconPalIndex = 2, + SHADOW(-5, 2, SHADOW_SIZE_S) FOOTPRINT(Kricketot) OVERWORLD( sPicTable_Kricketot, @@ -1053,6 +1068,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Kricketune, .iconSprite = gMonIcon_Kricketune, .iconPalIndex = 2, + SHADOW(-3, 6, SHADOW_SIZE_S) FOOTPRINT(Kricketune) OVERWORLD( sPicTable_Kricketune, @@ -1119,6 +1135,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Shinx, .iconSprite = gMonIcon_Shinx, .iconPalIndex = 0, + SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Shinx) OVERWORLD( sPicTable_Shinx, @@ -1185,6 +1202,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Luxio, .iconSprite = gMonIcon_Luxio, .iconPalIndex = 0, + SHADOW(-4, 2, SHADOW_SIZE_M) FOOTPRINT(Luxio) OVERWORLD( sPicTable_Luxio, @@ -1256,6 +1274,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Luxray, .iconSprite = gMonIcon_Luxray, .iconPalIndex = 0, + SHADOW(-1, 10, SHADOW_SIZE_L) FOOTPRINT(Luxray) OVERWORLD( sPicTable_Luxray, @@ -1318,6 +1337,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Cranidos, .iconSprite = gMonIcon_Cranidos, .iconPalIndex = 0, + SHADOW(4, 4, SHADOW_SIZE_S) FOOTPRINT(Cranidos) OVERWORLD( sPicTable_Cranidos, @@ -1380,6 +1400,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Rampardos, .iconSprite = gMonIcon_Rampardos, .iconPalIndex = 0, + SHADOW(7, 11, SHADOW_SIZE_L) FOOTPRINT(Rampardos) OVERWORLD( sPicTable_Rampardos, @@ -1442,6 +1463,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Shieldon, .iconSprite = gMonIcon_Shieldon, .iconPalIndex = 1, + SHADOW(3, -1, SHADOW_SIZE_S) FOOTPRINT(Shieldon) OVERWORLD( sPicTable_Shieldon, @@ -1504,6 +1526,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Bastiodon, .iconSprite = gMonIcon_Bastiodon, .iconPalIndex = 1, + SHADOW(1, 6, SHADOW_SIZE_L) FOOTPRINT(Bastiodon) OVERWORLD( sPicTable_Bastiodon, @@ -1567,6 +1590,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_BurmyPlantCloak, .iconSprite = gMonIcon_BurmyPlantCloak, .iconPalIndex = 1, + SHADOW(-1, 8, SHADOW_SIZE_S) FOOTPRINT(Burmy) OVERWORLD( sPicTable_BurmyPlantCloak, @@ -1633,6 +1657,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_BurmySandyCloak, .iconSprite = gMonIcon_BurmySandyCloak, .iconPalIndex = 1, + SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Burmy) OVERWORLD( sPicTable_BurmySandyCloak, @@ -1699,6 +1724,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_BurmyTrashCloak, .iconSprite = gMonIcon_BurmyTrashCloak, .iconPalIndex = 0, + SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Burmy) OVERWORLD( sPicTable_BurmyTrashCloak, @@ -1766,6 +1792,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_WormadamPlantCloak, .iconSprite = gMonIcon_WormadamPlantCloak, .iconPalIndex = 1, + SHADOW(0, 9, SHADOW_SIZE_S) FOOTPRINT(Wormadam) OVERWORLD( sPicTable_WormadamPlantCloak, @@ -1829,6 +1856,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_WormadamSandyCloak, .iconSprite = gMonIcon_WormadamSandyCloak, .iconPalIndex = 1, + SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Wormadam) OVERWORLD( sPicTable_WormadamSandyCloak, @@ -1893,6 +1921,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_WormadamTrashCloak, .iconSprite = gMonIcon_WormadamTrashCloak, .iconPalIndex = 0, + SHADOW(0, 9, SHADOW_SIZE_S) FOOTPRINT(Wormadam) OVERWORLD( sPicTable_WormadamTrashCloak, @@ -1953,6 +1982,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Mothim, \ .iconSprite = gMonIcon_Mothim, \ .iconPalIndex = 0, \ + SHADOW(-1, 9, SHADOW_SIZE_S) \ FOOTPRINT(Mothim) \ OVERWORLD( \ sPicTable_Mothim, \ @@ -2024,6 +2054,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPaletteFemale = gMonShinyPalette_CombeeF, .iconSprite = gMonIcon_Combee, .iconPalIndex = 0, + SHADOW(-4, 10, SHADOW_SIZE_S) FOOTPRINT(Combee) OVERWORLD( sPicTable_Combee, @@ -2089,6 +2120,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Vespiquen, .iconSprite = gMonIcon_Vespiquen, .iconPalIndex = 0, + SHADOW(-1, 11, SHADOW_SIZE_L) FOOTPRINT(Vespiquen) OVERWORLD( sPicTable_Vespiquen, @@ -2153,6 +2185,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Pachirisu, .iconSprite = gMonIcon_Pachirisu, .iconPalIndex = 0, + SHADOW(-2, 1, SHADOW_SIZE_S) FOOTPRINT(Pachirisu) OVERWORLD( sPicTable_Pachirisu, @@ -2218,6 +2251,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Buizel, .iconSprite = gMonIcon_Buizel, .iconPalIndex = 0, + SHADOW(1, 4, SHADOW_SIZE_S) FOOTPRINT(Buizel) OVERWORLD( sPicTable_Buizel, @@ -2282,6 +2316,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Floatzel, .iconSprite = gMonIcon_Floatzel, .iconPalIndex = 0, + SHADOW(-4, 10, SHADOW_SIZE_M) FOOTPRINT(Floatzel) OVERWORLD( sPicTable_Floatzel, @@ -2345,6 +2380,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Cherubi, .iconSprite = gMonIcon_Cherubi, .iconPalIndex = 1, + SHADOW(-4, -2, SHADOW_SIZE_S) FOOTPRINT(Cherubi) OVERWORLD( sPicTable_Cherubi, @@ -2408,6 +2444,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_CherrimOvercast, .iconSprite = gMonIcon_CherrimOvercast, .iconPalIndex = 0, + SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Cherrim) OVERWORLD( sPicTable_CherrimOvercast, @@ -2471,6 +2508,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_CherrimSunshine, .iconSprite = gMonIcon_CherrimSunshine, .iconPalIndex = 1, + SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Cherrim) .levelUpLearnset = sCherrimLevelUpLearnset, .teachableLearnset = sCherrimTeachableLearnset, @@ -2527,6 +2565,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_ShellosWestSea, .iconSprite = gMonIcon_ShellosWestSea, .iconPalIndex = 0, + SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(Shellos) OVERWORLD( sPicTable_ShellosWestSea, @@ -2590,6 +2629,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_ShellosEastSea, .iconSprite = gMonIcon_ShellosEastSea, .iconPalIndex = 0, + SHADOW(2, -1, SHADOW_SIZE_S) FOOTPRINT(Shellos) OVERWORLD( sPicTable_ShellosEastSea, @@ -2653,6 +2693,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_GastrodonWestSea, .iconSprite = gMonIcon_GastrodonWestSea, .iconPalIndex = 0, + SHADOW(1, 3, SHADOW_SIZE_M) FOOTPRINT(Gastrodon) OVERWORLD( sPicTable_GastrodonWestSea, @@ -2714,6 +2755,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_GastrodonEastSea, .iconSprite = gMonIcon_GastrodonEastSea, .iconPalIndex = 0, + SHADOW(2, 4, SHADOW_SIZE_M) FOOTPRINT(Gastrodon) OVERWORLD( sPicTable_GastrodonEastSea, @@ -2778,6 +2820,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Drifloon, .iconSprite = gMonIcon_Drifloon, .iconPalIndex = 2, + SHADOW(1, 9, SHADOW_SIZE_S) FOOTPRINT(Drifloon) OVERWORLD( sPicTable_Drifloon, @@ -2841,6 +2884,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Drifblim, .iconSprite = gMonIcon_Drifblim, .iconPalIndex = 2, + SHADOW(0, 11, SHADOW_SIZE_M) FOOTPRINT(Drifblim) OVERWORLD( sPicTable_Drifblim, @@ -2903,6 +2947,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Buneary, .iconSprite = gMonIcon_Buneary, .iconPalIndex = 2, + SHADOW(3, 5, SHADOW_SIZE_S) FOOTPRINT(Buneary) OVERWORLD( sPicTable_Buneary, @@ -2965,6 +3010,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Lopunny, .iconSprite = gMonIcon_Lopunny, .iconPalIndex = 2, + SHADOW(0, 10, SHADOW_SIZE_S) FOOTPRINT(Lopunny) OVERWORLD( sPicTable_Lopunny, @@ -3028,6 +3074,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_LopunnyMega, .iconSprite = gMonIcon_LopunnyMega, .iconPalIndex = 2, + SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Lopunny) .isMegaEvolution = TRUE, .levelUpLearnset = sLopunnyLevelUpLearnset, @@ -3086,6 +3133,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Glameow, .iconSprite = gMonIcon_Glameow, .iconPalIndex = 0, + SHADOW(-3, 6, SHADOW_SIZE_S) FOOTPRINT(Glameow) OVERWORLD( sPicTable_Glameow, @@ -3148,6 +3196,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Purugly, .iconSprite = gMonIcon_Purugly, .iconPalIndex = 0, + SHADOW(4, 8, SHADOW_SIZE_L) FOOTPRINT(Purugly) OVERWORLD( sPicTable_Purugly, @@ -3210,6 +3259,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Stunky, .iconSprite = gMonIcon_Stunky, .iconPalIndex = 2, + SHADOW(-1, 0, SHADOW_SIZE_M) FOOTPRINT(Stunky) OVERWORLD( sPicTable_Stunky, @@ -3272,6 +3322,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Skuntank, .iconSprite = gMonIcon_Skuntank, .iconPalIndex = 2, + SHADOW(-3, 6, SHADOW_SIZE_L) FOOTPRINT(Skuntank) OVERWORLD( sPicTable_Skuntank, @@ -3336,6 +3387,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Bronzor, .iconSprite = gMonIcon_Bronzor, .iconPalIndex = 0, + SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Bronzor) OVERWORLD( sPicTable_Bronzor, @@ -3400,6 +3452,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Bronzong, .iconSprite = gMonIcon_Bronzong, .iconPalIndex = 0, + SHADOW(5, 12, SHADOW_SIZE_M) FOOTPRINT(Bronzong) OVERWORLD( sPicTable_Bronzong, @@ -3463,6 +3516,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Chatot, .iconSprite = gMonIcon_Chatot, .iconPalIndex = 0, + SHADOW(-1, 3, SHADOW_SIZE_S) FOOTPRINT(Chatot) OVERWORLD( sPicTable_Chatot, @@ -3527,6 +3581,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Spiritomb, .iconSprite = gMonIcon_Spiritomb, .iconPalIndex = 5, + SHADOW(-1, 7, SHADOW_SIZE_L) FOOTPRINT(Spiritomb) OVERWORLD( sPicTable_Spiritomb, @@ -3594,6 +3649,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Gible, .iconSprite = gMonIcon_Gible, .iconPalIndex = 0, + SHADOW(1, 5, SHADOW_SIZE_M) FOOTPRINT(Gible) OVERWORLD( sPicTable_Gible, @@ -3660,6 +3716,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Gabite, .iconSprite = gMonIcon_Gabite, .iconPalIndex = 0, + SHADOW(3, 8, SHADOW_SIZE_M) FOOTPRINT(Gabite) OVERWORLD( sPicTable_Gabite, @@ -3729,6 +3786,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Garchomp, .iconSprite = gMonIcon_Garchomp, .iconPalIndex = 0, + SHADOW(5, 11, SHADOW_SIZE_L) FOOTPRINT(Garchomp) OVERWORLD( sPicTable_Garchomp, @@ -3792,6 +3850,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_GarchompMega, .iconSprite = gMonIcon_GarchompMega, .iconPalIndex = 0, + SHADOW(1, 12, SHADOW_SIZE_L) FOOTPRINT(Garchomp) .isMegaEvolution = TRUE, .levelUpLearnset = sGarchompLevelUpLearnset, @@ -3850,6 +3909,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Riolu, .iconSprite = gMonIcon_Riolu, .iconPalIndex = 2, + SHADOW(3, 3, SHADOW_SIZE_S) FOOTPRINT(Riolu) OVERWORLD( sPicTable_Riolu, @@ -3913,6 +3973,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Lucario, .iconSprite = gMonIcon_Lucario, .iconPalIndex = 2, + SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Lucario) OVERWORLD( sPicTable_Lucario, @@ -3977,6 +4038,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_LucarioMega, .iconSprite = gMonIcon_LucarioMega, .iconPalIndex = 2, + SHADOW(-1, 11, SHADOW_SIZE_M) FOOTPRINT(Lucario) .isMegaEvolution = TRUE, .levelUpLearnset = sLucarioLevelUpLearnset, @@ -4041,6 +4103,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .iconSpriteFemale = gMonIcon_HippopotasF, .iconPalIndexFemale = 1, #endif + SHADOW(2, -1, SHADOW_SIZE_L) FOOTPRINT(Hippopotas) OVERWORLD( sPicTable_Hippopotas, @@ -4109,6 +4172,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .iconSpriteFemale = gMonIcon_HippowdonF, .iconPalIndexFemale = 1, #endif + NO_SHADOW FOOTPRINT(Hippowdon) OVERWORLD( sPicTable_Hippowdon, @@ -4172,6 +4236,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Skorupi, .iconSprite = gMonIcon_Skorupi, .iconPalIndex = 0, + SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Skorupi) OVERWORLD( sPicTable_Skorupi, @@ -4235,6 +4300,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Drapion, .iconSprite = gMonIcon_Drapion, .iconPalIndex = 2, + SHADOW(-3, 6, SHADOW_SIZE_L) FOOTPRINT(Drapion) OVERWORLD( sPicTable_Drapion, @@ -4302,6 +4368,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Croagunk, .iconSprite = gMonIcon_Croagunk, .iconPalIndex = 0, + SHADOW(2, 4, SHADOW_SIZE_S) FOOTPRINT(Croagunk) OVERWORLD( sPicTable_Croagunk, @@ -4369,6 +4436,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Toxicroak, .iconSprite = gMonIcon_Toxicroak, .iconPalIndex = 0, + SHADOW(3, 7, SHADOW_SIZE_M) FOOTPRINT(Toxicroak) OVERWORLD( sPicTable_Toxicroak, @@ -4432,6 +4500,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Carnivine, .iconSprite = gMonIcon_Carnivine, .iconPalIndex = 1, + SHADOW(0, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Carnivine) OVERWORLD( sPicTable_Carnivine, @@ -4499,6 +4568,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Finneon, .iconSprite = gMonIcon_Finneon, .iconPalIndex = 0, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Finneon) OVERWORLD( sPicTable_Finneon, @@ -4565,6 +4635,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Lumineon, .iconSprite = gMonIcon_Lumineon, .iconPalIndex = 0, + SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Lumineon) OVERWORLD( sPicTable_Lumineon, @@ -4632,6 +4703,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Snover, .iconSprite = gMonIcon_Snover, .iconPalIndex = 1, + SHADOW(1, 4, SHADOW_SIZE_M) FOOTPRINT(Snover) OVERWORLD( sPicTable_Snover, @@ -4698,6 +4770,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Abomasnow, .iconSprite = gMonIcon_Abomasnow, .iconPalIndex = 1, + SHADOW(0, 11, SHADOW_SIZE_L) FOOTPRINT(Abomasnow) OVERWORLD( sPicTable_Abomasnow, @@ -4763,6 +4836,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_AbomasnowMega, .iconSprite = gMonIcon_AbomasnowMega, .iconPalIndex = 1, + SHADOW(0, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Abomasnow) .isMegaEvolution = TRUE, .levelUpLearnset = sAbomasnowLevelUpLearnset, @@ -4823,6 +4897,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Rotom, .iconSprite = gMonIcon_Rotom, .iconPalIndex = 0, + SHADOW(0, 10, SHADOW_SIZE_S) FOOTPRINT(Rotom) OVERWORLD( sPicTable_Rotom, @@ -4895,6 +4970,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_RotomHeat, .iconSprite = gMonIcon_RotomHeat, .iconPalIndex = 0, + SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Rotom) OVERWORLD( sPicTable_RotomHeat, @@ -4960,6 +5036,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_RotomWash, .iconSprite = gMonIcon_RotomWash, .iconPalIndex = 0, + SHADOW(0, 10, SHADOW_SIZE_M) FOOTPRINT(Rotom) OVERWORLD( sPicTable_RotomWash, @@ -5024,6 +5101,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_RotomFrost, .iconSprite = gMonIcon_RotomFrost, .iconPalIndex = 5, + SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Rotom) OVERWORLD( sPicTable_RotomFrost, @@ -5089,6 +5167,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_RotomFan, .iconSprite = gMonIcon_RotomFan, .iconPalIndex = 0, + SHADOW(4, 9, SHADOW_SIZE_S) FOOTPRINT(Rotom) OVERWORLD( sPicTable_RotomFan, @@ -5153,6 +5232,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_RotomMow, .iconSprite = gMonIcon_RotomMow, .iconPalIndex = 0, + SHADOW(2, 14, SHADOW_SIZE_M) FOOTPRINT(Rotom) OVERWORLD( sPicTable_RotomMow, @@ -5225,6 +5305,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Uxie, .iconSprite = gMonIcon_Uxie, .iconPalIndex = 0, + SHADOW(2, 11, SHADOW_SIZE_S) FOOTPRINT(Uxie) OVERWORLD( sPicTable_Uxie, @@ -5235,6 +5316,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Uxie ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sUxieLevelUpLearnset, .teachableLearnset = sUxieTeachableLearnset, }, @@ -5297,6 +5379,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Mesprit, .iconSprite = gMonIcon_Mesprit, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Mesprit) OVERWORLD( sPicTable_Mesprit, @@ -5307,6 +5390,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Mesprit ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMespritLevelUpLearnset, .teachableLearnset = sMespritTeachableLearnset, }, @@ -5368,6 +5452,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Azelf, .iconSprite = gMonIcon_Azelf, .iconPalIndex = 0, + SHADOW(0, 17, SHADOW_SIZE_S) FOOTPRINT(Azelf) OVERWORLD( sPicTable_Azelf, @@ -5378,6 +5463,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Azelf ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sAzelfLevelUpLearnset, .teachableLearnset = sAzelfTeachableLearnset, }, @@ -5439,6 +5525,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Dialga, .iconSprite = gMonIcon_Dialga, .iconPalIndex = 2, + SHADOW(4, 12, SHADOW_SIZE_L) FOOTPRINT(Dialga) OVERWORLD( sPicTable_Dialga, @@ -5450,6 +5537,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDialgaLevelUpLearnset, .teachableLearnset = sDialgaTeachableLearnset, .formSpeciesIdTable = sDialgaFormSpeciesIdTable, @@ -5503,17 +5591,19 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_DialgaOrigin, .iconSprite = gMonIcon_DialgaOrigin, .iconPalIndex = 0, + SHADOW(2, 11, SHADOW_SIZE_L) FOOTPRINT(Dialga) OVERWORLD( sPicTable_DialgaOrigin, SIZE_64x64, SHADOW_SIZE_M, TRACKS_NONE, - gOverworldPalette_DialgaOrigin - //, gShinyOverworldPalette_DialgaOrigin + gOverworldPalette_DialgaOrigin, + gShinyOverworldPalette_DialgaOrigin ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDialgaLevelUpLearnset, .teachableLearnset = sDialgaTeachableLearnset, .formSpeciesIdTable = sDialgaFormSpeciesIdTable, @@ -5577,6 +5667,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Palkia, .iconSprite = gMonIcon_Palkia, .iconPalIndex = 2, + SHADOW(0, 10, SHADOW_SIZE_L) FOOTPRINT(Palkia) OVERWORLD( sPicTable_Palkia, @@ -5588,6 +5679,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPalkiaLevelUpLearnset, .teachableLearnset = sPalkiaTeachableLearnset, .formSpeciesIdTable = sPalkiaFormSpeciesIdTable, @@ -5641,17 +5733,19 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_PalkiaOrigin, .iconSprite = gMonIcon_PalkiaOrigin, .iconPalIndex = 2, + SHADOW(-3, 14, SHADOW_SIZE_L) FOOTPRINT(Palkia) OVERWORLD( sPicTable_PalkiaOrigin, SIZE_64x64, SHADOW_SIZE_M, TRACKS_NONE, - gOverworldPalette_PalkiaOrigin - //, gShinyOverworldPalette_PalkiaOrigin + gOverworldPalette_PalkiaOrigin, + gShinyOverworldPalette_PalkiaOrigin ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPalkiaLevelUpLearnset, .teachableLearnset = sPalkiaTeachableLearnset, .formSpeciesIdTable = sPalkiaFormSpeciesIdTable, @@ -5713,6 +5807,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Heatran, .iconSprite = gMonIcon_Heatran, .iconPalIndex = 0, + SHADOW(2, 2, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Heatran) OVERWORLD( sPicTable_Heatran, @@ -5723,6 +5818,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Heatran ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sHeatranLevelUpLearnset, .teachableLearnset = sHeatranTeachableLearnset, }, @@ -5782,6 +5878,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Regigigas, .iconSprite = gMonIcon_Regigigas, .iconPalIndex = 0, + SHADOW(3, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Regigigas) OVERWORLD( sPicTable_Regigigas, @@ -5792,6 +5889,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Regigigas ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegigigasLevelUpLearnset, .teachableLearnset = sRegigigasTeachableLearnset, }, @@ -5853,6 +5951,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_GiratinaAltered, .iconSprite = gMonIcon_GiratinaAltered, .iconPalIndex = 0, + SHADOW(3, 11, SHADOW_SIZE_L) FOOTPRINT(GiratinaAltered) OVERWORLD( sPicTable_GiratinaAltered, @@ -5864,6 +5963,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGiratinaLevelUpLearnset, .teachableLearnset = sGiratinaTeachableLearnset, .formSpeciesIdTable = sGiratinaFormSpeciesIdTable, @@ -5918,17 +6018,19 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_GiratinaOrigin, .iconSprite = gMonIcon_GiratinaOrigin, .iconPalIndex = 0, + SHADOW(0, 18, SHADOW_SIZE_L) FOOTPRINT(GiratinaOrigin) OVERWORLD( sPicTable_GiratinaOrigin, SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, - gOverworldPalette_GiratinaOrigin - //, gShinyOverworldPalette_GiratinaOrigin + gOverworldPalette_GiratinaOrigin, + gShinyOverworldPalette_GiratinaOrigin ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGiratinaLevelUpLearnset, .teachableLearnset = sGiratinaTeachableLearnset, .formSpeciesIdTable = sGiratinaFormSpeciesIdTable, @@ -5991,6 +6093,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Cresselia, .iconSprite = gMonIcon_Cresselia, .iconPalIndex = 0, + SHADOW(-2, 12, SHADOW_SIZE_M) FOOTPRINT(Cresselia) OVERWORLD( sPicTable_Cresselia, @@ -6001,6 +6104,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = gShinyOverworldPalette_Cresselia ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCresseliaLevelUpLearnset, .teachableLearnset = sCresseliaTeachableLearnset, }, @@ -6061,6 +6165,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Phione, .iconSprite = gMonIcon_Phione, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Phione) OVERWORLD( sPicTable_Phione, @@ -6072,6 +6177,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPhioneLevelUpLearnset, .teachableLearnset = sPhioneTeachableLearnset, }, @@ -6130,6 +6236,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Manaphy, .iconSprite = gMonIcon_Manaphy, .iconPalIndex = 0, + SHADOW(-5, 8, SHADOW_SIZE_S) FOOTPRINT(Manaphy) OVERWORLD( sPicTable_Manaphy, @@ -6141,6 +6248,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sManaphyLevelUpLearnset, .teachableLearnset = sManaphyTeachableLearnset, }, @@ -6202,6 +6310,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_Darkrai, .iconSprite = gMonIcon_Darkrai, .iconPalIndex = 0, + SHADOW(4, 12, SHADOW_SIZE_M) FOOTPRINT(Darkrai) OVERWORLD( sPicTable_Darkrai, @@ -6213,6 +6322,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDarkraiLevelUpLearnset, .teachableLearnset = sDarkraiTeachableLearnset, }, @@ -6276,6 +6386,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_ShayminLand, .iconSprite = gMonIcon_ShayminLand, .iconPalIndex = 1, + SHADOW(1, -3, SHADOW_SIZE_S) FOOTPRINT(Shaymin) OVERWORLD( sPicTable_ShayminLand, @@ -6287,6 +6398,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sShayminLandLevelUpLearnset, .teachableLearnset = sShayminLandTeachableLearnset, .formSpeciesIdTable = sShayminFormSpeciesIdTable, @@ -6347,9 +6459,11 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .shinyPalette = gMonShinyPalette_ShayminSky, .iconSprite = gMonIcon_ShayminSky, .iconPalIndex = 1, + SHADOW(3, 7, SHADOW_SIZE_M) FOOTPRINT(Shaymin) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sShayminSkyLevelUpLearnset, .teachableLearnset = sShayminSkyTeachableLearnset, .formSpeciesIdTable = sShayminFormSpeciesIdTable, @@ -6375,63 +6489,65 @@ const struct SpeciesInfo gSpeciesInfoGen4[] = .iconPalIndex = 1, #endif -#define ARCEUS_SPECIES_INFO(type, typeName, iconPal) \ - { \ - .baseHP = 120, \ - .baseAttack = 120, \ - .baseDefense = 120, \ - .baseSpeed = 120, \ - .baseSpAttack = 120, \ - .baseSpDefense = 120, \ - .types = MON_TYPES(type), \ - .catchRate = 3, \ - .expYield = ARCEUS_EXP_YIELD, \ - .evYield_HP = 3, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 120, \ - .friendship = 0, \ - .growthRate = GROWTH_SLOW, \ - .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ - .abilities = { ABILITY_MULTITYPE, ABILITY_NONE, ABILITY_NONE }, \ - .bodyColor = BODY_COLOR_WHITE, \ - .speciesName = _("Arceus"), \ - .cryId = CRY_ARCEUS, \ - .natDexNum = NATIONAL_DEX_ARCEUS, \ - .categoryName = _("Alpha"), \ - .height = 32, \ - .weight = 3200, \ - .description = gArceusPokedexText, \ - .pokemonScale = 256, \ - .pokemonOffset = 0, \ - .trainerScale = 495, \ - .trainerOffset = 10, \ - .frontPic = gMonFrontPic_Arceus, \ - .frontPicSize = MON_COORDS_SIZE(64, 64), \ - .frontPicYOffset = 0, \ - .frontAnimFrames = sAnims_Arceus, \ - .frontAnimId = ANIM_GROW_VIBRATE, \ - .backPic = gMonBackPic_Arceus, \ - .backPicSize = MON_COORDS_SIZE(64, 64), \ - .backPicYOffset = 3, \ - .backAnimId = BACK_ANIM_GROW_STUTTER, \ - .palette = gMonPalette_Arceus ##typeName, \ - .shinyPalette = gMonShinyPalette_Arceus ##typeName, \ - ARCEUS_ICON(typeName, iconPal) \ - FOOTPRINT(Arceus) \ - OVERWORLD( \ - sPicTable_Arceus ##typeName, \ - SIZE_64x64, \ - SHADOW_SIZE_M, \ - TRACKS_FOOT, \ - gOverworldPalette_Arceus ##typeName, \ - gShinyOverworldPalette_Arceus ##typeName \ - ) \ - .levelUpLearnset = sArceusLevelUpLearnset, \ - .teachableLearnset = sArceusTeachableLearnset, \ - .formSpeciesIdTable = sArceusFormSpeciesIdTable, \ - .formChangeTable = sArceusFormChangeTable, \ - .isMythical = TRUE, \ - .isFrontierBanned = TRUE, \ +#define ARCEUS_SPECIES_INFO(type, typeName, iconPal) \ + { \ + .baseHP = 120, \ + .baseAttack = 120, \ + .baseDefense = 120, \ + .baseSpeed = 120, \ + .baseSpAttack = 120, \ + .baseSpDefense = 120, \ + .types = MON_TYPES(type), \ + .catchRate = 3, \ + .expYield = ARCEUS_EXP_YIELD, \ + .evYield_HP = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ + .abilities = { ABILITY_MULTITYPE, ABILITY_NONE, ABILITY_NONE }, \ + .bodyColor = BODY_COLOR_WHITE, \ + .speciesName = _("Arceus"), \ + .cryId = CRY_ARCEUS, \ + .natDexNum = NATIONAL_DEX_ARCEUS, \ + .categoryName = _("Alpha"), \ + .height = 32, \ + .weight = 3200, \ + .description = gArceusPokedexText, \ + .pokemonScale = 256, \ + .pokemonOffset = 0, \ + .trainerScale = 495, \ + .trainerOffset = 10, \ + .frontPic = gMonFrontPic_Arceus, \ + .frontPicSize = MON_COORDS_SIZE(64, 64), \ + .frontPicYOffset = 0, \ + .frontAnimFrames = sAnims_Arceus, \ + .frontAnimId = ANIM_GROW_VIBRATE, \ + .backPic = gMonBackPic_Arceus, \ + .backPicSize = MON_COORDS_SIZE(64, 64), \ + .backPicYOffset = 3, \ + .backAnimId = BACK_ANIM_GROW_STUTTER, \ + .palette = gMonPalette_Arceus ##typeName, \ + .shinyPalette = gMonShinyPalette_Arceus ##typeName, \ + ARCEUS_ICON(typeName, iconPal) \ + SHADOW(-1, 15, SHADOW_SIZE_XL_BATTLE_ONLY) \ + FOOTPRINT(Arceus) \ + OVERWORLD( \ + sPicTable_Arceus ##typeName, \ + SIZE_64x64, \ + SHADOW_SIZE_M, \ + TRACKS_FOOT, \ + gOverworldPalette_Arceus ##typeName, \ + gShinyOverworldPalette_Arceus ##typeName \ + ) \ + .levelUpLearnset = sArceusLevelUpLearnset, \ + .teachableLearnset = sArceusTeachableLearnset, \ + .formSpeciesIdTable = sArceusFormSpeciesIdTable, \ + .formChangeTable = sArceusFormChangeTable, \ + .isMythical = TRUE, \ + .isFrontierBanned = TRUE, \ + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \ } [SPECIES_ARCEUS_NORMAL] = ARCEUS_SPECIES_INFO(TYPE_NORMAL, Normal, 1), diff --git a/src/data/pokemon/species_info/gen_5_families.h b/src/data/pokemon/species_info/gen_5_families.h index ffa2dd4a1c..9445c57a43 100644 --- a/src/data/pokemon/species_info/gen_5_families.h +++ b/src/data/pokemon/species_info/gen_5_families.h @@ -51,6 +51,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Victini, .iconSprite = gMonIcon_Victini, .iconPalIndex = 0, + SHADOW(1, 4, SHADOW_SIZE_S) FOOTPRINT(Victini) OVERWORLD( sPicTable_Victini, @@ -62,6 +63,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sVictiniLevelUpLearnset, .teachableLearnset = sVictiniTeachableLearnset, }, @@ -115,6 +117,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Snivy, .iconSprite = gMonIcon_Snivy, .iconPalIndex = 1, + SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Snivy) OVERWORLD( sPicTable_Snivy, @@ -177,6 +180,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Servine, .iconSprite = gMonIcon_Servine, .iconPalIndex = 1, + SHADOW(-2, 7, SHADOW_SIZE_S) FOOTPRINT(Servine) OVERWORLD( sPicTable_Servine, @@ -238,6 +242,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Serperior, .iconSprite = gMonIcon_Serperior, .iconPalIndex = 1, + SHADOW(2, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Serperior) OVERWORLD( sPicTable_Serperior, @@ -300,6 +305,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Tepig, .iconSprite = gMonIcon_Tepig, .iconPalIndex = 0, + SHADOW(0, -2, SHADOW_SIZE_S) FOOTPRINT(Tepig) OVERWORLD( sPicTable_Tepig, @@ -362,6 +368,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Pignite, .iconSprite = gMonIcon_Pignite, .iconPalIndex = 0, + SHADOW(0, 6, SHADOW_SIZE_M) FOOTPRINT(Pignite) OVERWORLD( sPicTable_Pignite, @@ -424,6 +431,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Emboar, .iconSprite = gMonIcon_Emboar, .iconPalIndex = 0, + SHADOW(-1, 12, SHADOW_SIZE_L) FOOTPRINT(Emboar) OVERWORLD( sPicTable_Emboar, @@ -486,6 +494,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Oshawott, .iconSprite = gMonIcon_Oshawott, .iconPalIndex = 0, + SHADOW(-3, 0, SHADOW_SIZE_S) FOOTPRINT(Oshawott) OVERWORLD( sPicTable_Oshawott, @@ -548,6 +557,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Dewott, .iconSprite = gMonIcon_Dewott, .iconPalIndex = 0, + SHADOW(-2, 6, SHADOW_SIZE_S) FOOTPRINT(Dewott) OVERWORLD( sPicTable_Dewott, @@ -610,6 +620,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Samurott, .iconSprite = gMonIcon_Samurott, .iconPalIndex = 2, + SHADOW(-2, 13, SHADOW_SIZE_L) FOOTPRINT(Samurott) OVERWORLD( sPicTable_Samurott, @@ -672,6 +683,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_SamurottHisuian, .iconSprite = gMonIcon_SamurottHisuian, .iconPalIndex = 0, + SHADOW(-2, 13, SHADOW_SIZE_L) FOOTPRINT(Samurott) OVERWORLD( sPicTable_SamurottHisuian, @@ -737,6 +749,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Patrat, .iconSprite = gMonIcon_Patrat, .iconPalIndex = 2, + SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Patrat) OVERWORLD( sPicTable_Patrat, @@ -799,6 +812,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Watchog, .iconSprite = gMonIcon_Watchog, .iconPalIndex = 2, + SHADOW(-4, 11, SHADOW_SIZE_S) FOOTPRINT(Watchog) OVERWORLD( sPicTable_Watchog, @@ -861,6 +875,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Lillipup, .iconSprite = gMonIcon_Lillipup, .iconPalIndex = 2, + SHADOW(2, 1, SHADOW_SIZE_S) FOOTPRINT(Lillipup) OVERWORLD( sPicTable_Lillipup, @@ -923,6 +938,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Herdier, .iconSprite = gMonIcon_Herdier, .iconPalIndex = 2, + SHADOW(3, 5, SHADOW_SIZE_M) FOOTPRINT(Herdier) OVERWORLD( sPicTable_Herdier, @@ -990,6 +1006,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Stoutland, .iconSprite = gMonIcon_Stoutland, .iconPalIndex = 2, + SHADOW(-4, 9, SHADOW_SIZE_L) FOOTPRINT(Stoutland) OVERWORLD( sPicTable_Stoutland, @@ -1052,6 +1069,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Purrloin, .iconSprite = gMonIcon_Purrloin, .iconPalIndex = 0, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Purrloin) OVERWORLD( sPicTable_Purrloin, @@ -1114,6 +1132,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Liepard, .iconSprite = gMonIcon_Liepard, .iconPalIndex = 0, + SHADOW(-1, 11, SHADOW_SIZE_M) FOOTPRINT(Liepard) OVERWORLD( sPicTable_Liepard, @@ -1176,6 +1195,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Pansage, .iconSprite = gMonIcon_Pansage, .iconPalIndex = 1, + SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Pansage) OVERWORLD( sPicTable_Pansage, @@ -1238,6 +1258,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Simisage, .iconSprite = gMonIcon_Simisage, .iconPalIndex = 1, + SHADOW(-2, 12, SHADOW_SIZE_M) FOOTPRINT(Simisage) OVERWORLD( sPicTable_Simisage, @@ -1301,6 +1322,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Pansear, .iconSprite = gMonIcon_Pansear, .iconPalIndex = 2, + SHADOW(1, 3, SHADOW_SIZE_S) FOOTPRINT(Pansear) OVERWORLD( sPicTable_Pansear, @@ -1364,6 +1386,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Simisear, .iconSprite = gMonIcon_Simisear, .iconPalIndex = 2, + SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Simisear) OVERWORLD( sPicTable_Simisear, @@ -1426,6 +1449,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Panpour, .iconSprite = gMonIcon_Panpour, .iconPalIndex = 2, + SHADOW(-3, 4, SHADOW_SIZE_S) FOOTPRINT(Panpour) OVERWORLD( sPicTable_Panpour, @@ -1488,6 +1512,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Simipour, .iconSprite = gMonIcon_Simipour, .iconPalIndex = 2, + SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Simipour) OVERWORLD( sPicTable_Simipour, @@ -1551,6 +1576,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Munna, .iconSprite = gMonIcon_Munna, .iconPalIndex = 0, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Munna) OVERWORLD( sPicTable_Munna, @@ -1614,6 +1640,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Musharna, .iconSprite = gMonIcon_Musharna, .iconPalIndex = 0, + SHADOW(6, 10, SHADOW_SIZE_M) FOOTPRINT(Musharna) OVERWORLD( sPicTable_Musharna, @@ -1676,6 +1703,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Pidove, .iconSprite = gMonIcon_Pidove, .iconPalIndex = 0, + SHADOW(-2, 1, SHADOW_SIZE_S) FOOTPRINT(Pidove) OVERWORLD( sPicTable_Pidove, @@ -1738,6 +1766,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Tranquill, .iconSprite = gMonIcon_Tranquill, .iconPalIndex = 0, + SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Tranquill) OVERWORLD( sPicTable_Tranquill, @@ -1813,6 +1842,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .iconSpriteFemale = gMonIcon_UnfezantF, .iconPalIndex = 1, .iconPalIndexFemale = 1, + SHADOW(-2, 12, SHADOW_SIZE_M) FOOTPRINT(Unfezant) OVERWORLD( sPicTable_Unfezant, @@ -1875,6 +1905,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Blitzle, .iconSprite = gMonIcon_Blitzle, .iconPalIndex = 2, + SHADOW(3, 9, SHADOW_SIZE_M) FOOTPRINT(Blitzle) OVERWORLD( sPicTable_Blitzle, @@ -1937,6 +1968,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Zebstrika, .iconSprite = gMonIcon_Zebstrika, .iconPalIndex = 2, + SHADOW(-2, 13, SHADOW_SIZE_M) FOOTPRINT(Zebstrika) OVERWORLD( sPicTable_Zebstrika, @@ -2005,6 +2037,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Roggenrola, .iconSprite = gMonIcon_Roggenrola, .iconPalIndex = 2, + SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Roggenrola) OVERWORLD( sPicTable_Roggenrola, @@ -2074,6 +2107,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Boldore, .iconSprite = gMonIcon_Boldore, .iconPalIndex = 0, + SHADOW(1, 3, SHADOW_SIZE_L) FOOTPRINT(Boldore) OVERWORLD( sPicTable_Boldore, @@ -2148,6 +2182,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Gigalith, .iconSprite = gMonIcon_Gigalith, .iconPalIndex = 0, + SHADOW(-1, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gigalith) OVERWORLD( sPicTable_Gigalith, @@ -2211,6 +2246,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Woobat, .iconSprite = gMonIcon_Woobat, .iconPalIndex = 0, + SHADOW(-2, 14, SHADOW_SIZE_S) FOOTPRINT(Woobat) OVERWORLD( sPicTable_Woobat, @@ -2274,6 +2310,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Swoobat, .iconSprite = gMonIcon_Swoobat, .iconPalIndex = 0, + SHADOW(-1, 17, SHADOW_SIZE_M) FOOTPRINT(Swoobat) OVERWORLD( sPicTable_Swoobat, @@ -2337,6 +2374,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Drilbur, .iconSprite = gMonIcon_Drilbur, .iconPalIndex = 0, + SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Drilbur) OVERWORLD( sPicTable_Drilbur, @@ -2400,6 +2438,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Excadrill, .iconSprite = gMonIcon_Excadrill, .iconPalIndex = 0, + SHADOW(3, 8, SHADOW_SIZE_L) FOOTPRINT(Excadrill) OVERWORLD( sPicTable_Excadrill, @@ -2464,6 +2503,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Audino, .iconSprite = gMonIcon_Audino, .iconPalIndex = 1, + SHADOW(-1, 6, SHADOW_SIZE_S) FOOTPRINT(Audino) OVERWORLD( sPicTable_Audino, @@ -2530,6 +2570,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_AudinoMega, .iconSprite = gMonIcon_AudinoMega, .iconPalIndex = 1, + SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Audino) .isMegaEvolution = TRUE, .levelUpLearnset = sAudinoLevelUpLearnset, @@ -2589,6 +2630,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Timburr, .iconSprite = gMonIcon_Timburr, .iconPalIndex = 1, + SHADOW(-4, 2, SHADOW_SIZE_S) FOOTPRINT(Timburr) OVERWORLD( sPicTable_Timburr, @@ -2651,6 +2693,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Gurdurr, .iconSprite = gMonIcon_Gurdurr, .iconPalIndex = 1, + SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Gurdurr) OVERWORLD( sPicTable_Gurdurr, @@ -2713,6 +2756,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Conkeldurr, .iconSprite = gMonIcon_Conkeldurr, .iconPalIndex = 1, + SHADOW(0, 3, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Conkeldurr) OVERWORLD( sPicTable_Conkeldurr, @@ -2775,6 +2819,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Tympole, .iconSprite = gMonIcon_Tympole, .iconPalIndex = 2, + SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Tympole) OVERWORLD( sPicTable_Tympole, @@ -2837,6 +2882,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Palpitoad, .iconSprite = gMonIcon_Palpitoad, .iconPalIndex = 2, + SHADOW(-1, 3, SHADOW_SIZE_S) FOOTPRINT(Palpitoad) OVERWORLD( sPicTable_Palpitoad, @@ -2904,6 +2950,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Seismitoad, .iconSprite = gMonIcon_Seismitoad, .iconPalIndex = 0, + SHADOW(4, 10, SHADOW_SIZE_L) FOOTPRINT(Seismitoad) OVERWORLD( sPicTable_Seismitoad, @@ -2967,6 +3014,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Throh, .iconSprite = gMonIcon_Throh, .iconPalIndex = 0, + SHADOW(3, 4, SHADOW_SIZE_M) FOOTPRINT(Throh) OVERWORLD( sPicTable_Throh, @@ -3031,6 +3079,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Sawk, .iconSprite = gMonIcon_Sawk, .iconPalIndex = 0, + SHADOW(-1, 6, SHADOW_SIZE_M) FOOTPRINT(Sawk) OVERWORLD( sPicTable_Sawk, @@ -3094,6 +3143,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Sewaddle, .iconSprite = gMonIcon_Sewaddle, .iconPalIndex = 1, + SHADOW(1, 0, SHADOW_SIZE_S) FOOTPRINT(Sewaddle) OVERWORLD( sPicTable_Sewaddle, @@ -3157,6 +3207,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Swadloon, .iconSprite = gMonIcon_Swadloon, .iconPalIndex = 1, + SHADOW(0, 1, SHADOW_SIZE_L) FOOTPRINT(Swadloon) OVERWORLD( sPicTable_Swadloon, @@ -3225,6 +3276,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Leavanny, .iconSprite = gMonIcon_Leavanny, .iconPalIndex = 1, + SHADOW(0, 14, SHADOW_SIZE_S) FOOTPRINT(Leavanny) OVERWORLD( sPicTable_Leavanny, @@ -3292,6 +3344,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Venipede, .iconSprite = gMonIcon_Venipede, .iconPalIndex = 1, + SHADOW(-2, -3, SHADOW_SIZE_M) FOOTPRINT(Venipede) OVERWORLD( sPicTable_Venipede, @@ -3359,6 +3412,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Whirlipede, .iconSprite = gMonIcon_Whirlipede, .iconPalIndex = 2, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Whirlipede) OVERWORLD( sPicTable_Whirlipede, @@ -3431,6 +3485,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Scolipede, .iconSprite = gMonIcon_Scolipede, .iconPalIndex = 2, + SHADOW(1, 12, SHADOW_SIZE_L) FOOTPRINT(Scolipede) OVERWORLD( sPicTable_Scolipede, @@ -3500,6 +3555,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Cottonee, .iconSprite = gMonIcon_Cottonee, .iconPalIndex = 1, + SHADOW(-1, -5, SHADOW_SIZE_M) FOOTPRINT(Cottonee) OVERWORLD( sPicTable_Cottonee, @@ -3563,6 +3619,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Whimsicott, .iconSprite = gMonIcon_Whimsicott, .iconPalIndex = 1, + SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Whimsicott) OVERWORLD( sPicTable_Whimsicott, @@ -3627,6 +3684,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Petilil, .iconSprite = gMonIcon_Petilil, .iconPalIndex = 1, + SHADOW(-2, 6, SHADOW_SIZE_S) FOOTPRINT(Petilil) OVERWORLD( sPicTable_Petilil, @@ -3692,6 +3750,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Lilligant, .iconSprite = gMonIcon_Lilligant, .iconPalIndex = 1, + SHADOW(-2, 13, SHADOW_SIZE_M) FOOTPRINT(Lilligant) OVERWORLD( sPicTable_Lilligant, @@ -3757,6 +3816,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_LilligantHisuian, .iconSprite = gMonIcon_LilligantHisuian, .iconPalIndex = 1, + SHADOW(-3, 13, SHADOW_SIZE_S) FOOTPRINT(Lilligant) OVERWORLD( sPicTable_LilligantHisuian, @@ -3824,6 +3884,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_BasculinRedStriped, .iconSprite = gMonIcon_BasculinRedStriped, .iconPalIndex = 1, + SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Basculin) OVERWORLD( sPicTable_BasculinRedStriped, @@ -3888,6 +3949,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_BasculinBlueStriped, .iconSprite = gMonIcon_BasculinBlueStriped, .iconPalIndex = 0, + SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Basculin) OVERWORLD( sPicTable_BasculinBlueStriped, @@ -3953,6 +4015,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_BasculinWhiteStriped, .iconSprite = gMonIcon_BasculinWhiteStriped, .iconPalIndex = 0, + SHADOW(-2, 5, SHADOW_SIZE_S) FOOTPRINT(Basculin) OVERWORLD( sPicTable_BasculinWhiteStriped, @@ -3988,7 +4051,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_2), .abilities = { ABILITY_SWIFT_SWIM, ABILITY_ADAPTABILITY, ABILITY_MOLD_BREAKER }, .bodyColor = BODY_COLOR_GREEN, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Bsculegion", "Basculegion"), + .speciesName = _("Basculegion"), .cryId = CRY_BASCULEGION, .natDexNum = NATIONAL_DEX_BASCULEGION, .categoryName = _("Big Fish"), @@ -4017,6 +4080,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_BasculegionMale, .iconSprite = gMonIcon_BasculegionMale, .iconPalIndex = 1, + SHADOW(0, 16, SHADOW_SIZE_M) FOOTPRINT(Basculegion) OVERWORLD( sPicTable_BasculegionMale, @@ -4050,7 +4114,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_2), .abilities = { ABILITY_SWIFT_SWIM, ABILITY_ADAPTABILITY, ABILITY_MOLD_BREAKER }, .bodyColor = BODY_COLOR_GREEN, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Bsculegion", "Basculegion"), + .speciesName = _("Basculegion"), .cryId = CRY_BASCULEGION, .natDexNum = NATIONAL_DEX_BASCULEGION, .categoryName = _("Big Fish"), @@ -4078,6 +4142,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_BasculegionFemale, .iconSprite = gMonIcon_BasculegionFemale, .iconPalIndex = 0, + SHADOW(0, 16, SHADOW_SIZE_M) FOOTPRINT(Basculegion) OVERWORLD( sPicTable_BasculegionFemale, @@ -4143,6 +4208,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Sandile, .iconSprite = gMonIcon_Sandile, .iconPalIndex = 1, + SHADOW(4, -5, SHADOW_SIZE_M) FOOTPRINT(Sandile) OVERWORLD( sPicTable_Sandile, @@ -4206,6 +4272,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Krokorok, .iconSprite = gMonIcon_Krokorok, .iconPalIndex = 1, + SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Krokorok) OVERWORLD( sPicTable_Krokorok, @@ -4274,6 +4341,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Krookodile, .iconSprite = gMonIcon_Krookodile, .iconPalIndex = 0, + SHADOW(3, 12, SHADOW_SIZE_L) FOOTPRINT(Krookodile) OVERWORLD( sPicTable_Krookodile, @@ -4336,6 +4404,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Darumaka, .iconSprite = gMonIcon_Darumaka, .iconPalIndex = 0, + SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Darumaka) OVERWORLD( sPicTable_Darumaka, @@ -4399,6 +4468,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DarmanitanStandardMode, .iconSprite = gMonIcon_DarmanitanStandardMode, .iconPalIndex = 0, + SHADOW(3, 5, SHADOW_SIZE_L) FOOTPRINT(Darmanitan) OVERWORLD( sPicTable_DarmanitanStandardMode, @@ -4460,6 +4530,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DarmanitanZenMode, .iconSprite = gMonIcon_DarmanitanZenMode, .iconPalIndex = 0, + SHADOW(-1, -1, SHADOW_SIZE_S) FOOTPRINT(Darmanitan) .levelUpLearnset = sDarmanitanLevelUpLearnset, .teachableLearnset = sDarmanitanTeachableLearnset, @@ -4515,6 +4586,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DarumakaGalarian, .iconSprite = gMonIcon_DarumakaGalarian, .iconPalIndex = 0, + SHADOW(-3, -1, SHADOW_SIZE_S) FOOTPRINT(Darumaka) OVERWORLD( sPicTable_DarumakaGalarian, @@ -4579,6 +4651,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DarmanitanGalarianStandardMode, .iconSprite = gMonIcon_DarmanitanGalarianStandardMode, .iconPalIndex = 0, + SHADOW(4, 8, SHADOW_SIZE_L) FOOTPRINT(Darmanitan) OVERWORLD( sPicTable_DarmanitanGalarianStandardMode, @@ -4642,6 +4715,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DarmanitanGalarianZenMode, .iconSprite = gMonIcon_DarmanitanGalarianZenMode, .iconPalIndex = 0, + SHADOW(0, 11, SHADOW_SIZE_S) FOOTPRINT(Darmanitan) .isGalarianForm = TRUE, .levelUpLearnset = sDarmanitanGalarianLevelUpLearnset, @@ -4701,6 +4775,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Maractus, .iconSprite = gMonIcon_Maractus, .iconPalIndex = 1, + SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Maractus) OVERWORLD( sPicTable_Maractus, @@ -4765,6 +4840,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Dwebble, .iconSprite = gMonIcon_Dwebble, .iconPalIndex = 0, + SHADOW(-1, -2, SHADOW_SIZE_S) FOOTPRINT(Dwebble) OVERWORLD( sPicTable_Dwebble, @@ -4828,6 +4904,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Crustle, .iconSprite = gMonIcon_Crustle, .iconPalIndex = 2, + SHADOW(1, 8, SHADOW_SIZE_L) FOOTPRINT(Crustle) OVERWORLD( sPicTable_Crustle, @@ -4891,6 +4968,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Scraggy, .iconSprite = gMonIcon_Scraggy, .iconPalIndex = 2, + SHADOW(-4, 2, SHADOW_SIZE_S) FOOTPRINT(Scraggy) OVERWORLD( sPicTable_Scraggy, @@ -4955,6 +5033,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Scrafty, .iconSprite = gMonIcon_Scrafty, .iconPalIndex = 0, + SHADOW(-2, 9, SHADOW_SIZE_M) FOOTPRINT(Scrafty) OVERWORLD( sPicTable_Scrafty, @@ -5018,6 +5097,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Sigilyph, .iconSprite = gMonIcon_Sigilyph, .iconPalIndex = 0, + SHADOW(3, 18, SHADOW_SIZE_S) FOOTPRINT(Sigilyph) OVERWORLD( sPicTable_Sigilyph, @@ -5083,6 +5163,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Yamask, .iconSprite = gMonIcon_Yamask, .iconPalIndex = 0, + SHADOW(-1, 6, SHADOW_SIZE_S) FOOTPRINT(Yamask) OVERWORLD( sPicTable_Yamask, @@ -5147,6 +5228,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Cofagrigus, .iconSprite = gMonIcon_Cofagrigus, .iconPalIndex = 0, + SHADOW(6, 12, SHADOW_SIZE_M) FOOTPRINT(Cofagrigus) OVERWORLD( sPicTable_Cofagrigus, @@ -5209,6 +5291,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_YamaskGalarian, .iconSprite = gMonIcon_YamaskGalarian, .iconPalIndex = 2, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Yamask) OVERWORLD( sPicTable_YamaskGalarian, @@ -5273,6 +5356,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Runerigus, .iconSprite = gMonIcon_Runerigus, .iconPalIndex = 2, + SHADOW(14, 14, SHADOW_SIZE_M) FOOTPRINT(Runerigus) OVERWORLD( sPicTable_Runerigus, @@ -5336,6 +5420,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Tirtouga, .iconSprite = gMonIcon_Tirtouga, .iconPalIndex = 2, + SHADOW(0, -3, SHADOW_SIZE_M) FOOTPRINT(Tirtouga) OVERWORLD( sPicTable_Tirtouga, @@ -5398,6 +5483,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Carracosta, .iconSprite = gMonIcon_Carracosta, .iconPalIndex = 2, + SHADOW(4, 8, SHADOW_SIZE_L) FOOTPRINT(Carracosta) OVERWORLD( sPicTable_Carracosta, @@ -5460,6 +5546,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Archen, .iconSprite = gMonIcon_Archen, .iconPalIndex = 0, + SHADOW(-3, -2, SHADOW_SIZE_S) FOOTPRINT(Archen) OVERWORLD( sPicTable_Archen, @@ -5523,6 +5610,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Archeops, .iconSprite = gMonIcon_Archeops, .iconPalIndex = 0, + SHADOW(0, 18, SHADOW_SIZE_M) FOOTPRINT(Archeops) OVERWORLD( sPicTable_Archeops, @@ -5586,6 +5674,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Trubbish, .iconSprite = gMonIcon_Trubbish, .iconPalIndex = 1, + SHADOW(-2, -1, SHADOW_SIZE_S) FOOTPRINT(Trubbish) OVERWORLD( sPicTable_Trubbish, @@ -5651,6 +5740,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Garbodor, .iconSprite = gMonIcon_Garbodor, .iconPalIndex = 1, + SHADOW(3, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Garbodor) OVERWORLD( sPicTable_Garbodor, @@ -5717,6 +5807,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_GarbodorGigantamax, .iconSprite = gMonIcon_GarbodorGigantamax, .iconPalIndex = 0, + NO_SHADOW FOOTPRINT(Garbodor) .isGigantamax = TRUE, .levelUpLearnset = sGarbodorLevelUpLearnset, @@ -5775,6 +5866,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Zorua, .iconSprite = gMonIcon_Zorua, .iconPalIndex = 0, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Zorua) OVERWORLD( sPicTable_Zorua, @@ -5838,6 +5930,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Zoroark, .iconSprite = gMonIcon_Zoroark, .iconPalIndex = 0, + SHADOW(1, 8, SHADOW_SIZE_L) FOOTPRINT(Zoroark) OVERWORLD( sPicTable_Zoroark, @@ -5900,6 +5993,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_ZoruaHisuian, .iconSprite = gMonIcon_ZoruaHisuian, .iconPalIndex = 0, + SHADOW(2, 12, SHADOW_SIZE_S) FOOTPRINT(Zorua) OVERWORLD( sPicTable_ZoruaHisuian, @@ -5963,6 +6057,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_ZoroarkHisuian, .iconSprite = gMonIcon_ZoroarkHisuian, .iconPalIndex = 0, + SHADOW(11, 13, SHADOW_SIZE_L) FOOTPRINT(Zoroark) OVERWORLD( sPicTable_ZoroarkHisuian, @@ -6028,6 +6123,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Minccino, .iconSprite = gMonIcon_Minccino, .iconPalIndex = 0, + SHADOW(-3, 3, SHADOW_SIZE_S) FOOTPRINT(Minccino) OVERWORLD( sPicTable_Minccino, @@ -6091,6 +6187,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Cinccino, .iconSprite = gMonIcon_Cinccino, .iconPalIndex = 0, + SHADOW(0, 6, SHADOW_SIZE_M) FOOTPRINT(Cinccino) OVERWORLD( sPicTable_Cinccino, @@ -6157,6 +6254,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Gothita, .iconSprite = gMonIcon_Gothita, .iconPalIndex = 2, + SHADOW(-3, 2, SHADOW_SIZE_S) FOOTPRINT(Gothita) OVERWORLD( sPicTable_Gothita, @@ -6223,6 +6321,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Gothorita, .iconSprite = gMonIcon_Gothorita, .iconPalIndex = 2, + SHADOW(-2, 7, SHADOW_SIZE_S) FOOTPRINT(Gothorita) OVERWORLD( sPicTable_Gothorita, @@ -6288,6 +6387,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Gothitelle, .iconSprite = gMonIcon_Gothitelle, .iconPalIndex = 2, + SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Gothitelle) OVERWORLD( sPicTable_Gothitelle, @@ -6352,6 +6452,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Solosis, .iconSprite = gMonIcon_Solosis, .iconPalIndex = 1, + SHADOW(-1, 8, SHADOW_SIZE_S) FOOTPRINT(Solosis) OVERWORLD( sPicTable_Solosis, @@ -6415,6 +6516,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Duosion, .iconSprite = gMonIcon_Duosion, .iconPalIndex = 1, + SHADOW(-1, 6, SHADOW_SIZE_M) FOOTPRINT(Duosion) OVERWORLD( sPicTable_Duosion, @@ -6477,6 +6579,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Reuniclus, .iconSprite = gMonIcon_Reuniclus, .iconPalIndex = 1, + SHADOW(0, 8, SHADOW_SIZE_M) FOOTPRINT(Reuniclus) OVERWORLD( sPicTable_Reuniclus, @@ -6539,6 +6642,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Ducklett, .iconSprite = gMonIcon_Ducklett, .iconPalIndex = 0, + SHADOW(-1, 2, SHADOW_SIZE_S) FOOTPRINT(Ducklett) OVERWORLD( sPicTable_Ducklett, @@ -6601,6 +6705,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Swanna, .iconSprite = gMonIcon_Swanna, .iconPalIndex = 2, + SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Swanna) OVERWORLD( sPicTable_Swanna, @@ -6668,6 +6773,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Vanillite, .iconSprite = gMonIcon_Vanillite, .iconPalIndex = 0, + SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Vanillite) OVERWORLD( sPicTable_Vanillite, @@ -6735,6 +6841,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Vanillish, .iconSprite = gMonIcon_Vanillish, .iconPalIndex = 2, + SHADOW(-3, 9, SHADOW_SIZE_S) FOOTPRINT(Vanillish) OVERWORLD( sPicTable_Vanillish, @@ -6801,6 +6908,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Vanilluxe, .iconSprite = gMonIcon_Vanilluxe, .iconPalIndex = 2, + SHADOW(-2, 10, SHADOW_SIZE_M) FOOTPRINT(Vanilluxe) OVERWORLD( sPicTable_Vanilluxe, @@ -6863,6 +6971,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DeerlingSpring, .iconSprite = gMonIcon_DeerlingSpring, .iconPalIndex = 1, + SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Deerling) OVERWORLD( sPicTable_DeerlingSpring, @@ -6926,6 +7035,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DeerlingSummer, .iconSprite = gMonIcon_DeerlingSummer, .iconPalIndex = 1, + SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Deerling) OVERWORLD( sPicTable_DeerlingSummer, @@ -6989,6 +7099,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DeerlingAutumn, .iconSprite = gMonIcon_DeerlingAutumn, .iconPalIndex = 0, + SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Deerling) OVERWORLD( sPicTable_DeerlingAutumn, @@ -7052,6 +7163,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_DeerlingWinter, .iconSprite = gMonIcon_DeerlingWinter, .iconPalIndex = 2, + SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Deerling) OVERWORLD( sPicTable_DeerlingWinter, @@ -7115,6 +7227,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_SawsbuckSpring, .iconSprite = gMonIcon_SawsbuckSpring, .iconPalIndex = 1, + SHADOW(7, 13, SHADOW_SIZE_M) FOOTPRINT(Sawsbuck) OVERWORLD( sPicTable_SawsbuckSpring, @@ -7176,6 +7289,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_SawsbuckSummer, .iconSprite = gMonIcon_SawsbuckSummer, .iconPalIndex = 1, + SHADOW(7, 13, SHADOW_SIZE_M) FOOTPRINT(Sawsbuck) OVERWORLD( sPicTable_SawsbuckSummer, @@ -7237,6 +7351,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_SawsbuckAutumn, .iconSprite = gMonIcon_SawsbuckAutumn, .iconPalIndex = 1, + SHADOW(7, 13, SHADOW_SIZE_M) FOOTPRINT(Sawsbuck) OVERWORLD( sPicTable_SawsbuckAutumn, @@ -7298,6 +7413,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_SawsbuckWinter, .iconSprite = gMonIcon_SawsbuckWinter, .iconPalIndex = 1, + SHADOW(7, 13, SHADOW_SIZE_M) FOOTPRINT(Sawsbuck) OVERWORLD( sPicTable_SawsbuckWinter, @@ -7363,6 +7479,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Emolga, .iconSprite = gMonIcon_Emolga, .iconPalIndex = 2, + SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Emolga) OVERWORLD( sPicTable_Emolga, @@ -7426,6 +7543,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Karrablast, .iconSprite = gMonIcon_Karrablast, .iconPalIndex = 0, + SHADOW(-1, 0, SHADOW_SIZE_S) FOOTPRINT(Karrablast) OVERWORLD( sPicTable_Karrablast, @@ -7488,6 +7606,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Escavalier, .iconSprite = gMonIcon_Escavalier, .iconPalIndex = 0, + SHADOW(1, 11, SHADOW_SIZE_M) FOOTPRINT(Escavalier) OVERWORLD( sPicTable_Escavalier, @@ -7552,6 +7671,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Foongus, .iconSprite = gMonIcon_Foongus, .iconPalIndex = 0, + SHADOW(-1, -3, SHADOW_SIZE_S) FOOTPRINT(Foongus) OVERWORLD( sPicTable_Foongus, @@ -7617,6 +7737,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Amoonguss, .iconSprite = gMonIcon_Amoonguss, .iconPalIndex = 1, + SHADOW(1, 5, SHADOW_SIZE_M) FOOTPRINT(Amoonguss) OVERWORLD( sPicTable_Amoonguss, @@ -7687,6 +7808,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .iconSpriteFemale = gMonIcon_FrillishF, .iconPalIndex = 0, .iconPalIndexFemale = 1, + SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Frillish) OVERWORLD( sPicTable_Frillish, @@ -7757,6 +7879,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .iconSpriteFemale = gMonIcon_JellicentF, .iconPalIndex = 0, .iconPalIndexFemale = 1, + SHADOW(-1, 11, SHADOW_SIZE_M) FOOTPRINT(Jellicent) OVERWORLD( sPicTable_Jellicent, @@ -7819,6 +7942,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Alomomola, .iconSprite = gMonIcon_Alomomola, .iconPalIndex = 0, + SHADOW(0, 15, SHADOW_SIZE_S) FOOTPRINT(Alomomola) OVERWORLD( sPicTable_Alomomola, @@ -7882,6 +8006,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Joltik, .iconSprite = gMonIcon_Joltik, .iconPalIndex = 0, + SHADOW(0, -5, SHADOW_SIZE_S) FOOTPRINT(Joltik) OVERWORLD( sPicTable_Joltik, @@ -7944,6 +8069,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Galvantula, .iconSprite = gMonIcon_Galvantula, .iconPalIndex = 2, + SHADOW(0, -2, SHADOW_SIZE_L) FOOTPRINT(Galvantula) OVERWORLD( sPicTable_Galvantula, @@ -8007,6 +8133,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Ferroseed, .iconSprite = gMonIcon_Ferroseed, .iconPalIndex = 1, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Ferroseed) OVERWORLD( sPicTable_Ferroseed, @@ -8075,6 +8202,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Ferrothorn, .iconSprite = gMonIcon_Ferrothorn, .iconPalIndex = 1, + SHADOW(-2, 17, SHADOW_SIZE_M) FOOTPRINT(Ferrothorn) OVERWORLD( sPicTable_Ferrothorn, @@ -8139,6 +8267,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Klink, .iconSprite = gMonIcon_Klink, .iconPalIndex = 0, + SHADOW(-2, 11, SHADOW_SIZE_S) FOOTPRINT(Klink) OVERWORLD( sPicTable_Klink, @@ -8202,6 +8331,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Klang, .iconSprite = gMonIcon_Klang, .iconPalIndex = 0, + SHADOW(-1, 12, SHADOW_SIZE_M) FOOTPRINT(Klang) OVERWORLD( sPicTable_Klang, @@ -8265,6 +8395,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Klinklang, .iconSprite = gMonIcon_Klinklang, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Klinklang) OVERWORLD( sPicTable_Klinklang, @@ -8328,6 +8459,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Tynamo, .iconSprite = gMonIcon_Tynamo, .iconPalIndex = 0, + SHADOW(-3, 5, SHADOW_SIZE_S) FOOTPRINT(Tynamo) OVERWORLD( sPicTable_Tynamo, @@ -8391,6 +8523,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Eelektrik, .iconSprite = gMonIcon_Eelektrik, .iconPalIndex = 0, + SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Eelektrik) OVERWORLD( sPicTable_Eelektrik, @@ -8453,6 +8586,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Eelektross, .iconSprite = gMonIcon_Eelektross, .iconPalIndex = 0, + SHADOW(3, 13, SHADOW_SIZE_M) FOOTPRINT(Eelektross) OVERWORLD( sPicTable_Eelektross, @@ -8515,6 +8649,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Elgyem, .iconSprite = gMonIcon_Elgyem, .iconPalIndex = 0, + SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Elgyem) OVERWORLD( sPicTable_Elgyem, @@ -8577,6 +8712,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Beheeyem, .iconSprite = gMonIcon_Beheeyem, .iconPalIndex = 2, + SHADOW(0, 10, SHADOW_SIZE_M) FOOTPRINT(Beheeyem) OVERWORLD( sPicTable_Beheeyem, @@ -8644,6 +8780,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Litwick, .iconSprite = gMonIcon_Litwick, .iconPalIndex = 2, + SHADOW(1, -1, SHADOW_SIZE_S) FOOTPRINT(Litwick) OVERWORLD( sPicTable_Litwick, @@ -8711,6 +8848,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Lampent, .iconSprite = gMonIcon_Lampent, .iconPalIndex = 2, + SHADOW(-1, 9, SHADOW_SIZE_S) FOOTPRINT(Lampent) OVERWORLD( sPicTable_Lampent, @@ -8777,6 +8915,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Chandelure, .iconSprite = gMonIcon_Chandelure, .iconPalIndex = 2, + SHADOW(1, 13, SHADOW_SIZE_S) FOOTPRINT(Chandelure) OVERWORLD( sPicTable_Chandelure, @@ -8839,6 +8978,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Axew, .iconSprite = gMonIcon_Axew, .iconPalIndex = 1, + SHADOW(2, 1, SHADOW_SIZE_S) FOOTPRINT(Axew) OVERWORLD( sPicTable_Axew, @@ -8901,6 +9041,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Fraxure, .iconSprite = gMonIcon_Fraxure, .iconPalIndex = 1, + SHADOW(-2, 8, SHADOW_SIZE_L) FOOTPRINT(Fraxure) OVERWORLD( sPicTable_Fraxure, @@ -8962,6 +9103,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Haxorus, .iconSprite = gMonIcon_Haxorus, .iconPalIndex = 2, + SHADOW(2, 9, SHADOW_SIZE_L) FOOTPRINT(Haxorus) OVERWORLD( sPicTable_Haxorus, @@ -9028,6 +9170,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Cubchoo, .iconSprite = gMonIcon_Cubchoo, .iconPalIndex = 0, + SHADOW(-2, 0, SHADOW_SIZE_S) FOOTPRINT(Cubchoo) OVERWORLD( sPicTable_Cubchoo, @@ -9094,6 +9237,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Beartic, .iconSprite = gMonIcon_Beartic, .iconPalIndex = 0, + SHADOW(1, 13, SHADOW_SIZE_L) FOOTPRINT(Beartic) OVERWORLD( sPicTable_Beartic, @@ -9158,6 +9302,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Cryogonal, .iconSprite = gMonIcon_Cryogonal, .iconPalIndex = 0, + SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Cryogonal) OVERWORLD( sPicTable_Cryogonal, @@ -9220,6 +9365,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Shelmet, .iconSprite = gMonIcon_Shelmet, .iconPalIndex = 1, + SHADOW(0, -1, SHADOW_SIZE_S) FOOTPRINT(Shelmet) OVERWORLD( sPicTable_Shelmet, @@ -9282,6 +9428,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Accelgor, .iconSprite = gMonIcon_Accelgor, .iconPalIndex = 1, + SHADOW(-14, 8, SHADOW_SIZE_S) FOOTPRINT(Accelgor) OVERWORLD( sPicTable_Accelgor, @@ -9345,6 +9492,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Stunfisk, .iconSprite = gMonIcon_Stunfisk, .iconPalIndex = 2, + SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Stunfisk) OVERWORLD( sPicTable_Stunfisk, @@ -9408,6 +9556,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_StunfiskGalarian, .iconSprite = gMonIcon_StunfiskGalarian, .iconPalIndex = 1, + SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Stunfisk) OVERWORLD( sPicTable_StunfiskGalarian, @@ -9474,6 +9623,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Mienfoo, .iconSprite = gMonIcon_Mienfoo, .iconPalIndex = 1, + SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Mienfoo) OVERWORLD( sPicTable_Mienfoo, @@ -9536,6 +9686,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Mienshao, .iconSprite = gMonIcon_Mienshao, .iconPalIndex = 2, + SHADOW(-1, 8, SHADOW_SIZE_M) FOOTPRINT(Mienshao) OVERWORLD( sPicTable_Mienshao, @@ -9599,6 +9750,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Druddigon, .iconSprite = gMonIcon_Druddigon, .iconPalIndex = 0, + SHADOW(3, 9, SHADOW_SIZE_M) FOOTPRINT(Druddigon) OVERWORLD( sPicTable_Druddigon, @@ -9664,6 +9816,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Golett, .iconSprite = gMonIcon_Golett, .iconPalIndex = 0, + SHADOW(-1, 7, SHADOW_SIZE_M) FOOTPRINT(Golett) OVERWORLD( sPicTable_Golett, @@ -9727,6 +9880,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Golurk, .iconSprite = gMonIcon_Golurk, .iconPalIndex = 0, + SHADOW(-1, 14, SHADOW_SIZE_L) FOOTPRINT(Golurk) OVERWORLD( sPicTable_Golurk, @@ -9789,6 +9943,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Pawniard, .iconSprite = gMonIcon_Pawniard, .iconPalIndex = 0, + SHADOW(4, 4, SHADOW_SIZE_S) FOOTPRINT(Pawniard) OVERWORLD( sPicTable_Pawniard, @@ -9852,6 +10007,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Bisharp, .iconSprite = gMonIcon_Bisharp, .iconPalIndex = 0, + SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Bisharp) OVERWORLD( sPicTable_Bisharp, @@ -9914,7 +10070,16 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Kingambit, .iconSprite = gMonIcon_Kingambit, .iconPalIndex = 0, + SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Kingambit) + OVERWORLD( + sPicTable_Kingambit, + SIZE_64x64, + SHADOW_SIZE_L, + TRACKS_NONE, + gOverworldPalette_Kingambit, + gShinyOverworldPalette_Kingambit + ) .levelUpLearnset = sKingambitLevelUpLearnset, .teachableLearnset = sKingambitTeachableLearnset, }, @@ -9969,6 +10134,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Bouffalant, .iconSprite = gMonIcon_Bouffalant, .iconPalIndex = 2, + SHADOW(8, 7, SHADOW_SIZE_M) FOOTPRINT(Bouffalant) OVERWORLD( sPicTable_Bouffalant, @@ -10032,6 +10198,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Rufflet, .iconSprite = gMonIcon_Rufflet, .iconPalIndex = 2, + SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Rufflet) OVERWORLD( sPicTable_Rufflet, @@ -10095,6 +10262,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Braviary, .iconSprite = gMonIcon_Braviary, .iconPalIndex = 0, + SHADOW(-1, 16, SHADOW_SIZE_M) FOOTPRINT(Braviary) OVERWORLD( sPicTable_Braviary, @@ -10157,6 +10325,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_BraviaryHisuian, .iconSprite = gMonIcon_BraviaryHisuian, .iconPalIndex = 2, + SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Braviary) OVERWORLD( sPicTable_BraviaryHisuian, @@ -10222,6 +10391,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Vullaby, .iconSprite = gMonIcon_Vullaby, .iconPalIndex = 0, + SHADOW(-1, 9, SHADOW_SIZE_M) FOOTPRINT(Vullaby) OVERWORLD( sPicTable_Vullaby, @@ -10284,6 +10454,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Mandibuzz, .iconSprite = gMonIcon_Mandibuzz, .iconPalIndex = 1, + SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Mandibuzz) OVERWORLD( sPicTable_Mandibuzz, @@ -10346,6 +10517,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Heatmor, .iconSprite = gMonIcon_Heatmor, .iconPalIndex = 2, + SHADOW(5, 7, SHADOW_SIZE_L) FOOTPRINT(Heatmor) OVERWORLD( sPicTable_Heatmor, @@ -10409,6 +10581,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Durant, .iconSprite = gMonIcon_Durant, .iconPalIndex = 0, + SHADOW(0, -3, SHADOW_SIZE_L) FOOTPRINT(Durant) OVERWORLD( sPicTable_Durant, @@ -10472,6 +10645,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Deino, .iconSprite = gMonIcon_Deino, .iconPalIndex = 2, + SHADOW(1, 3, SHADOW_SIZE_S) FOOTPRINT(Deino) OVERWORLD( sPicTable_Deino, @@ -10534,6 +10708,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Zweilous, .iconSprite = gMonIcon_Zweilous, .iconPalIndex = 2, + SHADOW(1, 6, SHADOW_SIZE_L) FOOTPRINT(Zweilous) OVERWORLD( sPicTable_Zweilous, @@ -10596,6 +10771,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Hydreigon, .iconSprite = gMonIcon_Hydreigon, .iconPalIndex = 2, + SHADOW(1, 16, SHADOW_SIZE_M) FOOTPRINT(Hydreigon) OVERWORLD( sPicTable_Hydreigon, @@ -10658,6 +10834,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Larvesta, .iconSprite = gMonIcon_Larvesta, .iconPalIndex = 0, + SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Larvesta) OVERWORLD( sPicTable_Larvesta, @@ -10723,6 +10900,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Volcarona, .iconSprite = gMonIcon_Volcarona, .iconPalIndex = 0, + SHADOW(-4, 14, SHADOW_SIZE_M) FOOTPRINT(Volcarona) OVERWORLD( sPicTable_Volcarona, @@ -10785,6 +10963,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Cobalion, .iconSprite = gMonIcon_Cobalion, .iconPalIndex = 0, + SHADOW(2, 14, SHADOW_SIZE_M) FOOTPRINT(Cobalion) OVERWORLD( sPicTable_Cobalion, @@ -10795,6 +10974,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_Cobalion ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCobalionLevelUpLearnset, .teachableLearnset = sCobalionTeachableLearnset, }, @@ -10848,6 +11028,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Terrakion, .iconSprite = gMonIcon_Terrakion, .iconPalIndex = 2, + SHADOW(3, 6, SHADOW_SIZE_L) FOOTPRINT(Terrakion) OVERWORLD( sPicTable_Terrakion, @@ -10858,6 +11039,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_Terrakion ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTerrakionLevelUpLearnset, .teachableLearnset = sTerrakionTeachableLearnset, }, @@ -10911,6 +11093,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Virizion, .iconSprite = gMonIcon_Virizion, .iconPalIndex = 1, + SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Virizion) OVERWORLD( sPicTable_Virizion, @@ -10921,6 +11104,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_Virizion ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sVirizionLevelUpLearnset, .teachableLearnset = sVirizionTeachableLearnset, }, @@ -10975,6 +11159,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_TornadusIncarnate, .iconSprite = gMonIcon_TornadusIncarnate, .iconPalIndex = 1, + SHADOW(2, 17, SHADOW_SIZE_M) FOOTPRINT(Tornadus) OVERWORLD( sPicTable_TornadusIncarnate, @@ -10985,6 +11170,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_TornadusIncarnate ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTornadusLevelUpLearnset, .teachableLearnset = sTornadusTeachableLearnset, .formSpeciesIdTable = sTornadusFormSpeciesIdTable, @@ -11038,8 +11224,10 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_TornadusTherian, .iconSprite = gMonIcon_TornadusTherian, .iconPalIndex = 1, + SHADOW(-5, 12, SHADOW_SIZE_L) FOOTPRINT(Tornadus) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTornadusLevelUpLearnset, .teachableLearnset = sTornadusTeachableLearnset, .formSpeciesIdTable = sTornadusFormSpeciesIdTable, @@ -11096,6 +11284,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_ThundurusIncarnate, .iconSprite = gMonIcon_ThundurusIncarnate, .iconPalIndex = 0, + SHADOW(2, 17, SHADOW_SIZE_M) FOOTPRINT(Thundurus) OVERWORLD( sPicTable_ThundurusIncarnate, @@ -11106,6 +11295,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_ThundurusIncarnate ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sThundurusLevelUpLearnset, .teachableLearnset = sThundurusTeachableLearnset, .formSpeciesIdTable = sThundurusFormSpeciesIdTable, @@ -11160,8 +11350,10 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_ThundurusTherian, .iconSprite = gMonIcon_ThundurusTherian, .iconPalIndex = 0, + SHADOW(5, 16, SHADOW_SIZE_M) FOOTPRINT(Thundurus) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sThundurusLevelUpLearnset, .teachableLearnset = sThundurusTeachableLearnset, .formSpeciesIdTable = sThundurusFormSpeciesIdTable, @@ -11217,6 +11409,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Reshiram, .iconSprite = gMonIcon_Reshiram, .iconPalIndex = 0, + SHADOW(-2, 12, SHADOW_SIZE_L) FOOTPRINT(Reshiram) OVERWORLD( sPicTable_Reshiram, @@ -11228,6 +11421,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sReshiramLevelUpLearnset, .teachableLearnset = sReshiramTeachableLearnset, }, @@ -11281,6 +11475,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Zekrom, .iconSprite = gMonIcon_Zekrom, .iconPalIndex = 2, + SHADOW(2, 14, SHADOW_SIZE_L) FOOTPRINT(Zekrom) OVERWORLD( sPicTable_Zekrom, @@ -11292,6 +11487,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZekromLevelUpLearnset, .teachableLearnset = sZekromTeachableLearnset, }, @@ -11346,6 +11542,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_LandorusIncarnate, .iconSprite = gMonIcon_LandorusIncarnate, .iconPalIndex = 0, + SHADOW(2, 17, SHADOW_SIZE_M) FOOTPRINT(Landorus) OVERWORLD( sPicTable_LandorusIncarnate, @@ -11356,6 +11553,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = gShinyOverworldPalette_LandorusIncarnate ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLandorusLevelUpLearnset, .teachableLearnset = sLandorusTeachableLearnset, .formSpeciesIdTable = sLandorusFormSpeciesIdTable, @@ -11409,8 +11607,10 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_LandorusTherian, .iconSprite = gMonIcon_LandorusTherian, .iconPalIndex = 0, + SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Landorus) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLandorusLevelUpLearnset, .teachableLearnset = sLandorusTeachableLearnset, .formSpeciesIdTable = sLandorusFormSpeciesIdTable, @@ -11469,6 +11669,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_Kyurem, .iconSprite = gMonIcon_Kyurem, .iconPalIndex = 0, + SHADOW(0, 8, SHADOW_SIZE_L) FOOTPRINT(Kyurem) OVERWORLD( sPicTable_Kyurem, @@ -11480,6 +11681,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKyuremLevelUpLearnset, .teachableLearnset = sKyuremTeachableLearnset, .formSpeciesIdTable = sKyuremFormSpeciesIdTable, @@ -11540,10 +11742,12 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_KyuremWhite, .iconSprite = gMonIcon_KyuremWhite, .iconPalIndex = 0, + SHADOW(-8, 14, SHADOW_SIZE_L) FOOTPRINT(Kyurem) .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKyuremWhiteLevelUpLearnset, .teachableLearnset = sKyuremTeachableLearnset, .formSpeciesIdTable = sKyuremFormSpeciesIdTable, @@ -11603,10 +11807,12 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_KyuremBlack, .iconSprite = gMonIcon_KyuremBlack, .iconPalIndex = 0, + SHADOW(4, 14, SHADOW_SIZE_L) FOOTPRINT(Kyurem) .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKyuremBlackLevelUpLearnset, .teachableLearnset = sKyuremTeachableLearnset, .formSpeciesIdTable = sKyuremFormSpeciesIdTable, @@ -11662,6 +11868,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_KeldeoOrdinary, .iconSprite = gMonIcon_KeldeoOrdinary, .iconPalIndex = 0, + SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Keldeo) OVERWORLD( sPicTable_KeldeoOrdinary, @@ -11673,6 +11880,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKeldeoLevelUpLearnset, .teachableLearnset = sKeldeoTeachableLearnset, .formSpeciesIdTable = sKeldeoFormSpeciesIdTable, @@ -11727,9 +11935,11 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_KeldeoResolute, .iconSprite = gMonIcon_KeldeoResolute, .iconPalIndex = 0, + SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Keldeo) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKeldeoLevelUpLearnset, .teachableLearnset = sKeldeoTeachableLearnset, .formSpeciesIdTable = sKeldeoFormSpeciesIdTable, @@ -11791,6 +12001,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_MeloettaAria, .iconSprite = gMonIcon_MeloettaAria, .iconPalIndex = 4, + SHADOW(-1, 10, SHADOW_SIZE_S) FOOTPRINT(Meloetta) OVERWORLD( sPicTable_MeloettaAria, @@ -11802,6 +12013,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMeloettaLevelUpLearnset, .teachableLearnset = sMeloettaTeachableLearnset, .formSpeciesIdTable = sMeloettaFormSpeciesIdTable, @@ -11860,6 +12072,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = .shinyPalette = gMonShinyPalette_MeloettaPirouette, .iconSprite = gMonIcon_MeloettaPirouette, .iconPalIndex = 0, + SHADOW(0, 16, SHADOW_SIZE_S) FOOTPRINT(Meloetta) OVERWORLD( sPicTable_MeloettaPirouette, @@ -11871,6 +12084,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMeloettaLevelUpLearnset, .teachableLearnset = sMeloettaTeachableLearnset, .formSpeciesIdTable = sMeloettaFormSpeciesIdTable, @@ -11879,66 +12093,68 @@ const struct SpeciesInfo gSpeciesInfoGen5[] = #endif //P_FAMILY_MELOETTA #if P_FAMILY_GENESECT -#define GENESECT_SPECIES_INFO(form) \ - { \ - .baseHP = 71, \ - .baseAttack = 120, \ - .baseDefense = 95, \ - .baseSpeed = 99, \ - .baseSpAttack = 120, \ - .baseSpDefense = 95, \ - .types = MON_TYPES(TYPE_BUG, TYPE_STEEL), \ - .catchRate = 3, \ - .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 300 : 270, \ - .evYield_Attack = 1, \ - .evYield_Speed = 1, \ - .evYield_SpAttack = 1, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 120, \ - .friendship = 0, \ - .growthRate = GROWTH_SLOW, \ - .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ - .abilities = { ABILITY_DOWNLOAD, ABILITY_NONE, ABILITY_NONE }, \ - .bodyColor = BODY_COLOR_PURPLE, \ - .speciesName = _("Genesect"), \ - .cryId = CRY_GENESECT, \ - .natDexNum = NATIONAL_DEX_GENESECT, \ - .categoryName = _("Paleozoic"), \ - .height = 15, \ - .weight = 825, \ - .description = gGenesectPokedexText, \ - .pokemonScale = 268, \ - .pokemonOffset = 2, \ - .trainerScale = 271, \ - .trainerOffset = 0, \ - .frontPic = gMonFrontPic_Genesect, \ - .frontPicSize = MON_COORDS_SIZE(56, 64), \ - .frontPicYOffset = 0, \ - .frontAnimFrames = sAnims_Genesect, \ - .frontAnimId = ANIM_H_VIBRATE, \ - .backPic = gMonBackPic_Genesect, \ - .backPicSize = MON_COORDS_SIZE(64, 48), \ - .backPicYOffset = 8, \ - .backAnimId = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, \ - .palette = gMonPalette_##form, \ - .shinyPalette = gMonShinyPalette_##form, \ - .iconSprite = gMonIcon_Genesect, \ - .iconPalIndex = 2, \ - FOOTPRINT(Genesect) \ - OVERWORLD( \ - sPicTable_Genesect, \ - SIZE_32x32, \ - SHADOW_SIZE_M, \ - TRACKS_FOOT, \ - gOverworldPalette_Genesect, \ - gShinyOverworldPalette_Genesect \ - ) \ - .levelUpLearnset = sGenesectLevelUpLearnset, \ - .teachableLearnset = sGenesectTeachableLearnset, \ - .formSpeciesIdTable = sGenesectFormSpeciesIdTable, \ - .formChangeTable = sGenesectFormChangeTable, \ - .isMythical = TRUE, \ - .isFrontierBanned = TRUE, \ +#define GENESECT_SPECIES_INFO(form) \ + { \ + .baseHP = 71, \ + .baseAttack = 120, \ + .baseDefense = 95, \ + .baseSpeed = 99, \ + .baseSpAttack = 120, \ + .baseSpDefense = 95, \ + .types = MON_TYPES(TYPE_BUG, TYPE_STEEL), \ + .catchRate = 3, \ + .expYield = (P_UPDATED_EXP_YIELDS >= GEN_8) ? 300 : 270, \ + .evYield_Attack = 1, \ + .evYield_Speed = 1, \ + .evYield_SpAttack = 1, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ + .abilities = { ABILITY_DOWNLOAD, ABILITY_NONE, ABILITY_NONE }, \ + .bodyColor = BODY_COLOR_PURPLE, \ + .speciesName = _("Genesect"), \ + .cryId = CRY_GENESECT, \ + .natDexNum = NATIONAL_DEX_GENESECT, \ + .categoryName = _("Paleozoic"), \ + .height = 15, \ + .weight = 825, \ + .description = gGenesectPokedexText, \ + .pokemonScale = 268, \ + .pokemonOffset = 2, \ + .trainerScale = 271, \ + .trainerOffset = 0, \ + .frontPic = gMonFrontPic_Genesect, \ + .frontPicSize = MON_COORDS_SIZE(56, 64), \ + .frontPicYOffset = 0, \ + .frontAnimFrames = sAnims_Genesect, \ + .frontAnimId = ANIM_H_VIBRATE, \ + .backPic = gMonBackPic_Genesect, \ + .backPicSize = MON_COORDS_SIZE(64, 48), \ + .backPicYOffset = 8, \ + .backAnimId = BACK_ANIM_CIRCLE_COUNTERCLOCKWISE, \ + .palette = gMonPalette_##form, \ + .shinyPalette = gMonShinyPalette_##form, \ + .iconSprite = gMonIcon_Genesect, \ + .iconPalIndex = 2, \ + SHADOW(5, 13, SHADOW_SIZE_L) \ + FOOTPRINT(Genesect) \ + OVERWORLD( \ + sPicTable_Genesect, \ + SIZE_32x32, \ + SHADOW_SIZE_M, \ + TRACKS_FOOT, \ + gOverworldPalette_Genesect, \ + gShinyOverworldPalette_Genesect \ + ) \ + .levelUpLearnset = sGenesectLevelUpLearnset, \ + .teachableLearnset = sGenesectTeachableLearnset, \ + .formSpeciesIdTable = sGenesectFormSpeciesIdTable, \ + .formChangeTable = sGenesectFormChangeTable, \ + .isMythical = TRUE, \ + .isFrontierBanned = TRUE, \ + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \ } [SPECIES_GENESECT] = GENESECT_SPECIES_INFO(Genesect), diff --git a/src/data/pokemon/species_info/gen_6_families.h b/src/data/pokemon/species_info/gen_6_families.h index 46c776639c..90e3d2d51e 100644 --- a/src/data/pokemon/species_info/gen_6_families.h +++ b/src/data/pokemon/species_info/gen_6_families.h @@ -51,6 +51,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Chespin, .iconSprite = gMonIcon_Chespin, .iconPalIndex = 1, + SHADOW(-2, 3, SHADOW_SIZE_S) FOOTPRINT(Chespin) OVERWORLD( sPicTable_Chespin, @@ -113,6 +114,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Quilladin, .iconSprite = gMonIcon_Quilladin, .iconPalIndex = 1, + SHADOW(2, 4, SHADOW_SIZE_M) FOOTPRINT(Quilladin) OVERWORLD( sPicTable_Quilladin, @@ -174,6 +176,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Chesnaught, .iconSprite = gMonIcon_Chesnaught, .iconPalIndex = 1, + SHADOW(4, 10, SHADOW_SIZE_L) FOOTPRINT(Chesnaught) OVERWORLD( sPicTable_Chesnaught, @@ -236,6 +239,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Fennekin, .iconSprite = gMonIcon_Fennekin, .iconPalIndex = 0, + SHADOW(0, 4, SHADOW_SIZE_S) FOOTPRINT(Fennekin) OVERWORLD( sPicTable_Fennekin, @@ -298,6 +302,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Braixen, .iconSprite = gMonIcon_Braixen, .iconPalIndex = 0, + SHADOW(-2, 10, SHADOW_SIZE_M) FOOTPRINT(Braixen) OVERWORLD( sPicTable_Braixen, @@ -359,6 +364,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Delphox, .iconSprite = gMonIcon_Delphox, .iconPalIndex = 0, + SHADOW(7, 14, SHADOW_SIZE_M) FOOTPRINT(Delphox) OVERWORLD( sPicTable_Delphox, @@ -421,6 +427,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Froakie, .iconSprite = gMonIcon_Froakie, .iconPalIndex = 0, + SHADOW(2, 0, SHADOW_SIZE_S) FOOTPRINT(Froakie) OVERWORLD( sPicTable_Froakie, @@ -483,6 +490,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Frogadier, .iconSprite = gMonIcon_Frogadier, .iconPalIndex = 0, + SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Frogadier) OVERWORLD( sPicTable_Frogadier, @@ -541,6 +549,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Greninja, .iconSprite = gMonIcon_Greninja, .iconPalIndex = 0, + SHADOW(4, 6, SHADOW_SIZE_L) FOOTPRINT(Greninja) OVERWORLD( sPicTable_Greninja, @@ -599,6 +608,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Greninja, .iconSprite = gMonIcon_Greninja, .iconPalIndex = 0, + SHADOW(4, 6, SHADOW_SIZE_L) FOOTPRINT(Greninja) OVERWORLD( sPicTable_Greninja, @@ -662,6 +672,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_GreninjaAsh, .iconSprite = gMonIcon_GreninjaAsh, .iconPalIndex = 0, + SHADOW(1, 10, SHADOW_SIZE_L) FOOTPRINT(Greninja) .levelUpLearnset = sGreninjaLevelUpLearnset, .teachableLearnset = sGreninjaTeachableLearnset, @@ -718,6 +729,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Bunnelby, .iconSprite = gMonIcon_Bunnelby, .iconPalIndex = 2, + SHADOW(3, 9, SHADOW_SIZE_S) FOOTPRINT(Bunnelby) OVERWORLD( sPicTable_Bunnelby, @@ -780,6 +792,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Diggersby, .iconSprite = gMonIcon_Diggersby, .iconPalIndex = 2, + SHADOW(8, 10, SHADOW_SIZE_M) FOOTPRINT(Diggersby) OVERWORLD( sPicTable_Diggersby, @@ -842,6 +855,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Fletchling, .iconSprite = gMonIcon_Fletchling, .iconPalIndex = 2, + SHADOW(-2, 0, SHADOW_SIZE_S) FOOTPRINT(Fletchling) OVERWORLD( sPicTable_Fletchling, @@ -876,7 +890,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), .abilities = { ABILITY_FLAME_BODY, ABILITY_NONE, ABILITY_GALE_WINGS }, .bodyColor = BODY_COLOR_RED, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Flechinder", "Fletchinder"), + .speciesName = _("Fletchinder"), .cryId = CRY_FLETCHINDER, .natDexNum = NATIONAL_DEX_FLETCHINDER, .categoryName = _("Ember"), @@ -905,6 +919,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Fletchinder, .iconSprite = gMonIcon_Fletchinder, .iconPalIndex = 2, + SHADOW(0, 12, SHADOW_SIZE_S) FOOTPRINT(Fletchinder) OVERWORLD( sPicTable_Fletchinder, @@ -967,6 +982,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Talonflame, .iconSprite = gMonIcon_Talonflame, .iconPalIndex = 2, + SHADOW(-2, 17, SHADOW_SIZE_M) FOOTPRINT(Talonflame) OVERWORLD( sPicTable_Talonflame, @@ -1025,6 +1041,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Scatterbug, \ .iconSprite = gMonIcon_Scatterbug, \ .iconPalIndex = 1, \ + SHADOW(1, 1, SHADOW_SIZE_S) \ FOOTPRINT(Scatterbug) \ OVERWORLD( \ sPicTable_Scatterbug, \ @@ -1106,6 +1123,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Spewpa, \ .iconSprite = gMonIcon_Spewpa, \ .iconPalIndex = 1, \ + SHADOW(0, 2, SHADOW_SIZE_M) \ FOOTPRINT(Spewpa) \ OVERWORLD( \ sPicTable_Spewpa, \ @@ -1187,6 +1205,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Vivillon ##form, \ .iconSprite = gMonIcon_Vivillon ##form, \ .iconPalIndex = iconPal, \ + SHADOW(0, 20, SHADOW_SIZE_M) \ FOOTPRINT(Vivillon) \ OVERWORLD( \ sPicTable_Vivillon ##form, \ @@ -1430,6 +1449,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Litleo, .iconSprite = gMonIcon_Litleo, .iconPalIndex = 2, + SHADOW(2, 3, SHADOW_SIZE_S) FOOTPRINT(Litleo) OVERWORLD( sPicTable_Litleo, @@ -1498,6 +1518,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .iconSpriteFemale = gMonIcon_PyroarF, .iconPalIndex = 2, .iconPalIndexFemale = 2, + SHADOW(-2, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Pyroar) OVERWORLD( sPicTable_Pyroar, @@ -1555,6 +1576,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Flabebe##Form##Flower, \ .iconSprite = gMonIcon_Flabebe##Form##Flower, \ .iconPalIndex = iconPal, \ + SHADOW(0, 11, SHADOW_SIZE_S) \ FOOTPRINT(Flabebe) \ OVERWORLD( \ sPicTable_Flabebe##Form##Flower, \ @@ -1642,6 +1664,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Floette ##form##Flower, \ .iconSprite = gMonIcon_Floette##form##Flower, \ .iconPalIndex = iconPal, \ + SHADOW(-3, 12, SHADOW_SIZE_S) \ FOOTPRINT(Floette) \ OVERWORLD( \ sPicTable_Floette ##form##Flower, \ @@ -1789,6 +1812,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Florges##Form##Flower, \ .iconSprite = gMonIcon_Florges##Form##Flower, \ .iconPalIndex = iconPal, \ + SHADOW(-5, 15, SHADOW_SIZE_M) \ FOOTPRINT(Florges) \ OVERWORLD( \ sPicTable_Florges ##Form##Flower, \ @@ -1896,6 +1920,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Skiddo, .iconSprite = gMonIcon_Skiddo, .iconPalIndex = 1, + SHADOW(2, 7, SHADOW_SIZE_M) FOOTPRINT(Skiddo) OVERWORLD( sPicTable_Skiddo, @@ -1958,6 +1983,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Gogoat, .iconSprite = gMonIcon_Gogoat, .iconPalIndex = 1, + SHADOW(2, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Gogoat) OVERWORLD( sPicTable_Gogoat, @@ -2021,6 +2047,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Pancham, .iconSprite = gMonIcon_Pancham, .iconPalIndex = 1, + SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Pancham) OVERWORLD( sPicTable_Pancham, @@ -2084,6 +2111,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Pangoro, .iconSprite = gMonIcon_Pangoro, .iconPalIndex = 1, + SHADOW(-2, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Pangoro) OVERWORLD( sPicTable_Pangoro, @@ -2143,6 +2171,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Furfrou##_form, \ .iconSprite = gMonIcon_Furfrou##_form, \ .iconPalIndex = _iconIdx, \ + SHADOW(3, 10, SHADOW_SIZE_XL_BATTLE_ONLY) \ FOOTPRINT(Furfrou) \ OVERWORLD( \ sPicTable_Furfrou##_form, \ @@ -2219,6 +2248,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Espurr, .iconSprite = gMonIcon_Espurr, .iconPalIndex = 2, + SHADOW(-1, 4, SHADOW_SIZE_S) FOOTPRINT(Espurr) OVERWORLD( sPicTable_Espurr, @@ -2282,6 +2312,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_MeowsticMale, .iconSprite = gMonIcon_MeowsticMale, .iconPalIndex = 0, + SHADOW(-2, 11, SHADOW_SIZE_S) FOOTPRINT(Meowstic) OVERWORLD( sPicTable_MeowsticMale, @@ -2343,6 +2374,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_MeowsticFemale, .iconSprite = gMonIcon_MeowsticFemale, .iconPalIndex = 0, + SHADOW(-2, 12, SHADOW_SIZE_S) FOOTPRINT(Meowstic) OVERWORLD( sPicTable_MeowsticFemale, @@ -2407,6 +2439,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Honedge, .iconSprite = gMonIcon_Honedge, .iconPalIndex = 2, + SHADOW(-10, 11, SHADOW_SIZE_S) FOOTPRINT(Honedge) OVERWORLD( sPicTable_Honedge, @@ -2470,6 +2503,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Doublade, .iconSprite = gMonIcon_Doublade, .iconPalIndex = 2, + SHADOW(8, 11, SHADOW_SIZE_M) FOOTPRINT(Doublade) OVERWORLD( sPicTable_Doublade, @@ -2535,6 +2569,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_AegislashShield, .iconSprite = gMonIcon_AegislashShield, .iconPalIndex = 2, + SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Aegislash) OVERWORLD( sPicTable_AegislashShield, @@ -2604,6 +2639,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_AegislashBlade, .iconSprite = gMonIcon_AegislashBlade, .iconPalIndex = 2, + SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Aegislash) .levelUpLearnset = sAegislashLevelUpLearnset, .teachableLearnset = sAegislashTeachableLearnset, @@ -2661,6 +2697,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Spritzee, .iconSprite = gMonIcon_Spritzee, .iconPalIndex = 0, + SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Spritzee) OVERWORLD( sPicTable_Spritzee, @@ -2724,6 +2761,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Aromatisse, .iconSprite = gMonIcon_Aromatisse, .iconPalIndex = 0, + SHADOW(0, 10, SHADOW_SIZE_M) FOOTPRINT(Aromatisse) OVERWORLD( sPicTable_Aromatisse, @@ -2786,6 +2824,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Swirlix, .iconSprite = gMonIcon_Swirlix, .iconPalIndex = 1, + SHADOW(0, -1, SHADOW_SIZE_S) FOOTPRINT(Swirlix) OVERWORLD( sPicTable_Swirlix, @@ -2849,6 +2888,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Slurpuff, .iconSprite = gMonIcon_Slurpuff, .iconPalIndex = 1, + SHADOW(1, 6, SHADOW_SIZE_M) FOOTPRINT(Slurpuff) OVERWORLD( sPicTable_Slurpuff, @@ -2912,6 +2952,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Inkay, .iconSprite = gMonIcon_Inkay, .iconPalIndex = 0, + SHADOW(-1, 11, SHADOW_SIZE_S) FOOTPRINT(Inkay) OVERWORLD( sPicTable_Inkay, @@ -2974,6 +3015,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Malamar, .iconSprite = gMonIcon_Malamar, .iconPalIndex = 2, + SHADOW(5, 14, SHADOW_SIZE_M) FOOTPRINT(Malamar) OVERWORLD( sPicTable_Malamar, @@ -3036,6 +3078,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Binacle, .iconSprite = gMonIcon_Binacle, .iconPalIndex = 2, + SHADOW(-3, 5, SHADOW_SIZE_M) FOOTPRINT(Binacle) OVERWORLD( sPicTable_Binacle, @@ -3099,6 +3142,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Barbaracle, .iconSprite = gMonIcon_Barbaracle, .iconPalIndex = 2, + SHADOW(4, 14, SHADOW_SIZE_L) FOOTPRINT(Barbaracle) OVERWORLD( sPicTable_Barbaracle, @@ -3161,6 +3205,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Skrelp, .iconSprite = gMonIcon_Skrelp, .iconPalIndex = 2, + SHADOW(3, 5, SHADOW_SIZE_S) FOOTPRINT(Skrelp) OVERWORLD( sPicTable_Skrelp, @@ -3223,6 +3268,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Dragalge, .iconSprite = gMonIcon_Dragalge, .iconPalIndex = 5, + SHADOW(-3, 14, SHADOW_SIZE_M) FOOTPRINT(Dragalge) OVERWORLD( sPicTable_Dragalge, @@ -3286,6 +3332,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Clauncher, .iconSprite = gMonIcon_Clauncher, .iconPalIndex = 0, + SHADOW(4, -6, SHADOW_SIZE_M) FOOTPRINT(Clauncher) OVERWORLD( sPicTable_Clauncher, @@ -3349,6 +3396,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Clawitzer, .iconSprite = gMonIcon_Clawitzer, .iconPalIndex = 0, + SHADOW(6, 1, SHADOW_SIZE_L) FOOTPRINT(Clawitzer) OVERWORLD( sPicTable_Clawitzer, @@ -3411,6 +3459,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Helioptile, .iconSprite = gMonIcon_Helioptile, .iconPalIndex = 2, + SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Helioptile) OVERWORLD( sPicTable_Helioptile, @@ -3474,6 +3523,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Heliolisk, .iconSprite = gMonIcon_Heliolisk, .iconPalIndex = 2, + SHADOW(-2, 10, SHADOW_SIZE_M) FOOTPRINT(Heliolisk) OVERWORLD( sPicTable_Heliolisk, @@ -3536,6 +3586,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Tyrunt, .iconSprite = gMonIcon_Tyrunt, .iconPalIndex = 2, + SHADOW(3, 2, SHADOW_SIZE_M) FOOTPRINT(Tyrunt) OVERWORLD( sPicTable_Tyrunt, @@ -3598,6 +3649,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Tyrantrum, .iconSprite = gMonIcon_Tyrantrum, .iconPalIndex = 0, + SHADOW(-2, 14, SHADOW_SIZE_L) FOOTPRINT(Tyrantrum) OVERWORLD( sPicTable_Tyrantrum, @@ -3660,6 +3712,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Amaura, .iconSprite = gMonIcon_Amaura, .iconPalIndex = 0, + SHADOW(0, 8, SHADOW_SIZE_S) FOOTPRINT(Amaura) OVERWORLD( sPicTable_Amaura, @@ -3722,6 +3775,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Aurorus, .iconSprite = gMonIcon_Aurorus, .iconPalIndex = 0, + SHADOW(-6, 14, SHADOW_SIZE_L) FOOTPRINT(Aurorus) OVERWORLD( sPicTable_Aurorus, @@ -3789,6 +3843,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Hawlucha, .iconSprite = gMonIcon_Hawlucha, .iconPalIndex = 0, + SHADOW(3, 6, SHADOW_SIZE_S) FOOTPRINT(Hawlucha) OVERWORLD( sPicTable_Hawlucha, @@ -3852,6 +3907,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Dedenne, .iconSprite = gMonIcon_Dedenne, .iconPalIndex = 0, + SHADOW(-2, 1, SHADOW_SIZE_S) FOOTPRINT(Dedenne) OVERWORLD( sPicTable_Dedenne, @@ -3917,6 +3973,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Carbink, .iconSprite = gMonIcon_Carbink, .iconPalIndex = 2, + SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Carbink) OVERWORLD( sPicTable_Carbink, @@ -3980,6 +4037,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Goomy, .iconSprite = gMonIcon_Goomy, .iconPalIndex = 5, + SHADOW(-1, -1, SHADOW_SIZE_S) FOOTPRINT(Goomy) OVERWORLD( sPicTable_Goomy, @@ -4044,6 +4102,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Sliggoo, .iconSprite = gMonIcon_Sliggoo, .iconPalIndex = 5, + SHADOW(1, 6, SHADOW_SIZE_S) FOOTPRINT(Sliggoo) OVERWORLD( sPicTable_Sliggoo, @@ -4107,6 +4166,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Goodra, .iconSprite = gMonIcon_Goodra, .iconPalIndex = 5, + SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Goodra) OVERWORLD( sPicTable_Goodra, @@ -4170,6 +4230,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_SliggooHisuian, .iconSprite = gMonIcon_SliggooHisuian, .iconPalIndex = 2, + SHADOW(2, 6, SHADOW_SIZE_M) FOOTPRINT(Sliggoo) OVERWORLD( sPicTable_SliggooHisuian, @@ -4234,6 +4295,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_GoodraHisuian, .iconSprite = gMonIcon_GoodraHisuian, .iconPalIndex = 2, + SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Goodra) OVERWORLD( sPicTable_GoodraHisuian, @@ -4301,6 +4363,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Klefki, .iconSprite = gMonIcon_Klefki, .iconPalIndex = 0, + SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Klefki) OVERWORLD( sPicTable_Klefki, @@ -4365,6 +4428,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Phantump, .iconSprite = gMonIcon_Phantump, .iconPalIndex = 1, + SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Phantump) OVERWORLD( sPicTable_Phantump, @@ -4428,6 +4492,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Trevenant, .iconSprite = gMonIcon_Trevenant, .iconPalIndex = 1, + SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Trevenant) OVERWORLD( sPicTable_Trevenant, @@ -4490,6 +4555,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Pumpkaboo, .iconSprite = gMonIcon_Pumpkaboo, .iconPalIndex = 2, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Pumpkaboo) OVERWORLD( sPicTable_PumpkabooAverage, @@ -4553,6 +4619,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Pumpkaboo, .iconSprite = gMonIcon_Pumpkaboo, .iconPalIndex = 2, + SHADOW(-1, -1, SHADOW_SIZE_S) FOOTPRINT(Pumpkaboo) .levelUpLearnset = sPumpkabooLevelUpLearnset, .teachableLearnset = sPumpkabooTeachableLearnset, @@ -4608,6 +4675,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Pumpkaboo, .iconSprite = gMonIcon_Pumpkaboo, .iconPalIndex = 2, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Pumpkaboo) .levelUpLearnset = sPumpkabooLevelUpLearnset, .teachableLearnset = sPumpkabooTeachableLearnset, @@ -4665,6 +4733,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Pumpkaboo, .iconSprite = gMonIcon_Pumpkaboo, .iconPalIndex = 2, + SHADOW(1, 4, SHADOW_SIZE_S) FOOTPRINT(Pumpkaboo) .levelUpLearnset = sPumpkabooLevelUpLearnset, .teachableLearnset = sPumpkabooTeachableLearnset, @@ -4721,6 +4790,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Gourgeist, .iconSprite = gMonIcon_Gourgeist, .iconPalIndex = 2, + SHADOW(3, 10, SHADOW_SIZE_M) FOOTPRINT(Gourgeist) OVERWORLD( sPicTable_GourgeistAverage, @@ -4782,6 +4852,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Gourgeist, .iconSprite = gMonIcon_Gourgeist, .iconPalIndex = 2, + SHADOW(4, 9, SHADOW_SIZE_S) FOOTPRINT(Gourgeist) .levelUpLearnset = sGourgeistLevelUpLearnset, .teachableLearnset = sGourgeistTeachableLearnset, @@ -4835,6 +4906,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Gourgeist, .iconSprite = gMonIcon_Gourgeist, .iconPalIndex = 2, + SHADOW(4, 12, SHADOW_SIZE_M) FOOTPRINT(Gourgeist) .levelUpLearnset = sGourgeistLevelUpLearnset, .teachableLearnset = sGourgeistTeachableLearnset, @@ -4890,6 +4962,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Gourgeist, .iconSprite = gMonIcon_Gourgeist, .iconPalIndex = 2, + SHADOW(4, 14, SHADOW_SIZE_M) FOOTPRINT(Gourgeist) .levelUpLearnset = sGourgeistLevelUpLearnset, .teachableLearnset = sGourgeistTeachableLearnset, @@ -4951,6 +5024,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Bergmite, .iconSprite = gMonIcon_Bergmite, .iconPalIndex = 0, + SHADOW(1, -1, SHADOW_SIZE_S) FOOTPRINT(Bergmite) OVERWORLD( sPicTable_Bergmite, @@ -5014,6 +5088,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Avalugg, .iconSprite = gMonIcon_Avalugg, .iconPalIndex = 0, + SHADOW(1, -1, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Avalugg) OVERWORLD( sPicTable_Avalugg, @@ -5075,6 +5150,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_AvaluggHisuian, .iconSprite = gMonIcon_AvaluggHisuian, .iconPalIndex = 5, + SHADOW(2, -2, SHADOW_SIZE_L) FOOTPRINT(Avalugg) OVERWORLD( sPicTable_AvaluggHisuian, @@ -5145,6 +5221,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Noibat, .iconSprite = gMonIcon_Noibat, .iconPalIndex = 2, + SHADOW(2, 11, SHADOW_SIZE_L) FOOTPRINT(Noibat) OVERWORLD( sPicTable_Noibat, @@ -5211,6 +5288,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Noivern, .iconSprite = gMonIcon_Noivern, .iconPalIndex = 2, + SHADOW(5, 10, SHADOW_SIZE_L) FOOTPRINT(Noivern) OVERWORLD( sPicTable_Noivern, @@ -5269,17 +5347,19 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_XerneasNeutral, .iconSprite = gMonIcon_XerneasNeutral, .iconPalIndex = 0, + SHADOW(3, 14, SHADOW_SIZE_M) FOOTPRINT(Xerneas) OVERWORLD( sPicTable_XerneasNeutral, SIZE_64x64, SHADOW_SIZE_M, - TRACKS_FOOT - //, gOverworldPalette_XerneasNeutral - //, gShinyOverworldPalette_XerneasNeutral + TRACKS_FOOT, + gOverworldPalette_XerneasNeutral, + gShinyOverworldPalette_XerneasNeutral ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sXerneasLevelUpLearnset, .teachableLearnset = sXerneasTeachableLearnset, .formSpeciesIdTable = sXerneasFormSpeciesIdTable, @@ -5329,9 +5409,10 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_XerneasActive, .iconSprite = gMonIcon_XerneasActive, .iconPalIndex = 0, + SHADOW(3, 14, SHADOW_SIZE_M) FOOTPRINT(Xerneas) OVERWORLD( - sPicTable_XerneasNeutral, + sPicTable_XerneasActive, SIZE_64x64, SHADOW_SIZE_M, TRACKS_FOOT, @@ -5340,6 +5421,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sXerneasLevelUpLearnset, .teachableLearnset = sXerneasTeachableLearnset, .formSpeciesIdTable = sXerneasFormSpeciesIdTable, @@ -5396,6 +5478,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Yveltal, .iconSprite = gMonIcon_Yveltal, .iconPalIndex = 0, + SHADOW(0, 16, SHADOW_SIZE_L) FOOTPRINT(Yveltal) OVERWORLD( sPicTable_Yveltal, @@ -5407,6 +5490,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sYveltalLevelUpLearnset, .teachableLearnset = sYveltalTeachableLearnset, }, @@ -5457,6 +5541,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Zygarde50, .iconSprite = gMonIcon_Zygarde50, .iconPalIndex = 1, + SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Zygarde) OVERWORLD( sPicTable_Zygarde50, @@ -5468,6 +5553,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZygardeLevelUpLearnset, .teachableLearnset = sZygardeTeachableLearnset, .formSpeciesIdTable = sZygardeFormSpeciesIdTable, @@ -5517,6 +5603,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Zygarde50, .iconSprite = gMonIcon_Zygarde50, .iconPalIndex = 1, + SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Zygarde) OVERWORLD( sPicTable_Zygarde50, @@ -5528,6 +5615,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZygardeLevelUpLearnset, .teachableLearnset = sZygardeTeachableLearnset, .formSpeciesIdTable = sZygardeFormSpeciesIdTable, @@ -5577,9 +5665,11 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Zygarde10, .iconSprite = gMonIcon_Zygarde10, .iconPalIndex = 1, + SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Zygarde) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZygardeLevelUpLearnset, .teachableLearnset = sZygardeTeachableLearnset, .formSpeciesIdTable = sZygardeFormSpeciesIdTable, @@ -5630,9 +5720,11 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Zygarde10, .iconSprite = gMonIcon_Zygarde10, .iconPalIndex = 1, + SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Zygarde) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZygardeLevelUpLearnset, .teachableLearnset = sZygardeTeachableLearnset, .formSpeciesIdTable = sZygardeFormSpeciesIdTable, @@ -5687,9 +5779,11 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_ZygardeComplete, .iconSprite = gMonIcon_ZygardeComplete, .iconPalIndex = 1, + SHADOW(-3, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Zygarde) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZygardeLevelUpLearnset, .teachableLearnset = sZygardeTeachableLearnset, .formSpeciesIdTable = sZygardeFormSpeciesIdTable, @@ -5746,6 +5840,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Diancie, .iconSprite = gMonIcon_Diancie, .iconPalIndex = 1, + SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Diancie) OVERWORLD( sPicTable_Diancie, @@ -5757,6 +5852,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDiancieLevelUpLearnset, .teachableLearnset = sDiancieTeachableLearnset, .formSpeciesIdTable = sDiancieFormSpeciesIdTable, @@ -5812,10 +5908,12 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_DiancieMega, .iconSprite = gMonIcon_DiancieMega, .iconPalIndex = 0, + SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Diancie) .isMythical = TRUE, .isMegaEvolution = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sDiancieLevelUpLearnset, .teachableLearnset = sDiancieTeachableLearnset, .formSpeciesIdTable = sDiancieFormSpeciesIdTable, @@ -5873,6 +5971,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_HoopaConfined, .iconSprite = gMonIcon_HoopaConfined, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Hoopa) OVERWORLD( sPicTable_HoopaConfined, @@ -5884,6 +5983,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sHoopaConfinedLevelUpLearnset, .teachableLearnset = sHoopaConfinedTeachableLearnset, .formSpeciesIdTable = sHoopaFormSpeciesIdTable, @@ -5938,6 +6038,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_HoopaUnbound, .iconSprite = gMonIcon_HoopaUnbound, .iconPalIndex = 0, + SHADOW(1, 14, SHADOW_SIZE_L) FOOTPRINT(Hoopa) OVERWORLD( sPicTable_HoopaUnbound, @@ -5949,6 +6050,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sHoopaUnboundLevelUpLearnset, .teachableLearnset = sHoopaUnboundTeachableLearnset, .formSpeciesIdTable = sHoopaFormSpeciesIdTable, @@ -6004,6 +6106,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = .shinyPalette = gMonShinyPalette_Volcanion, .iconSprite = gMonIcon_Volcanion, .iconPalIndex = 0, + SHADOW(0, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Volcanion) OVERWORLD( sPicTable_Volcanion, @@ -6015,6 +6118,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sVolcanionLevelUpLearnset, .teachableLearnset = sVolcanionTeachableLearnset, }, diff --git a/src/data/pokemon/species_info/gen_7_families.h b/src/data/pokemon/species_info/gen_7_families.h index 4669051d04..b328c2a716 100644 --- a/src/data/pokemon/species_info/gen_7_families.h +++ b/src/data/pokemon/species_info/gen_7_families.h @@ -51,6 +51,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Rowlet, .iconSprite = gMonIcon_Rowlet, .iconPalIndex = 0, + SHADOW(-1, 1, SHADOW_SIZE_S) FOOTPRINT(Rowlet) OVERWORLD( sPicTable_Rowlet, @@ -114,6 +115,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Dartrix, .iconSprite = gMonIcon_Dartrix, .iconPalIndex = 1, + SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Dartrix) OVERWORLD( sPicTable_Dartrix, @@ -176,6 +178,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Decidueye, .iconSprite = gMonIcon_Decidueye, .iconPalIndex = 1, + SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Decidueye) OVERWORLD( sPicTable_Decidueye, @@ -238,6 +241,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_DecidueyeHisuian, .iconSprite = gMonIcon_DecidueyeHisuian, .iconPalIndex = 0, + SHADOW(-1, 14, SHADOW_SIZE_L) FOOTPRINT(Decidueye) OVERWORLD( sPicTable_DecidueyeHisuian, @@ -303,6 +307,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Litten, .iconSprite = gMonIcon_Litten, .iconPalIndex = 0, + SHADOW(1, 1, SHADOW_SIZE_S) FOOTPRINT(Litten) OVERWORLD( sPicTable_Litten, @@ -365,6 +370,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Torracat, .iconSprite = gMonIcon_Torracat, .iconPalIndex = 0, + SHADOW(5, 7, SHADOW_SIZE_M) FOOTPRINT(Torracat) OVERWORLD( sPicTable_Torracat, @@ -426,6 +432,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Incineroar, .iconSprite = gMonIcon_Incineroar, .iconPalIndex = 0, + SHADOW(4, 14, SHADOW_SIZE_L) FOOTPRINT(Incineroar) OVERWORLD( sPicTable_Incineroar, @@ -488,6 +495,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Popplio, .iconSprite = gMonIcon_Popplio, .iconPalIndex = 0, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Popplio) OVERWORLD( sPicTable_Popplio, @@ -550,6 +558,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Brionne, .iconSprite = gMonIcon_Brionne, .iconPalIndex = 0, + SHADOW(-5, 6, SHADOW_SIZE_M) FOOTPRINT(Brionne) OVERWORLD( sPicTable_Brionne, @@ -611,6 +620,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Primarina, .iconSprite = gMonIcon_Primarina, .iconPalIndex = 0, + SHADOW(-6, 11, SHADOW_SIZE_L) FOOTPRINT(Primarina) OVERWORLD( sPicTable_Primarina, @@ -674,6 +684,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Pikipek, .iconSprite = gMonIcon_Pikipek, .iconPalIndex = 2, + SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Pikipek) OVERWORLD( sPicTable_Pikipek, @@ -737,6 +748,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Trumbeak, .iconSprite = gMonIcon_Trumbeak, .iconPalIndex = 0, + SHADOW(1, 8, SHADOW_SIZE_S) FOOTPRINT(Trumbeak) OVERWORLD( sPicTable_Trumbeak, @@ -799,6 +811,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Toucannon, .iconSprite = gMonIcon_Toucannon, .iconPalIndex = 0, + SHADOW(9, 12, SHADOW_SIZE_M) FOOTPRINT(Toucannon) OVERWORLD( sPicTable_Toucannon, @@ -862,6 +875,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Yungoos, .iconSprite = gMonIcon_Yungoos, .iconPalIndex = 2, + SHADOW(-9, 1, SHADOW_SIZE_M) FOOTPRINT(Yungoos) OVERWORLD( sPicTable_Yungoos, @@ -921,6 +935,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Gumshoos, .iconSprite = gMonIcon_Gumshoos, .iconPalIndex = 2, + SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Gumshoos) OVERWORLD( sPicTable_Gumshoos, @@ -979,6 +994,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Gumshoos, .iconSprite = gMonIcon_Gumshoos, .iconPalIndex = 2, + SHADOW(-2, 8, SHADOW_SIZE_M) FOOTPRINT(Gumshoos) OVERWORLD( sPicTable_Gumshoos, @@ -989,6 +1005,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Gumshoos ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGumshoosLevelUpLearnset, .teachableLearnset = sGumshoosTeachableLearnset, .formSpeciesIdTable = sGumshoosFormSpeciesIdTable, @@ -1043,6 +1060,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Grubbin, .iconSprite = gMonIcon_Grubbin, .iconPalIndex = 0, + SHADOW(0, -4, SHADOW_SIZE_M) FOOTPRINT(Grubbin) OVERWORLD( sPicTable_Grubbin, @@ -1106,6 +1124,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Charjabug, .iconSprite = gMonIcon_Charjabug, .iconPalIndex = 1, + NO_SHADOW FOOTPRINT(Charjabug) OVERWORLD( sPicTable_Charjabug, @@ -1166,6 +1185,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Vikavolt, .iconSprite = gMonIcon_Vikavolt, .iconPalIndex = 0, + SHADOW(-1, 16, SHADOW_SIZE_S) FOOTPRINT(Vikavolt) OVERWORLD( sPicTable_Vikavolt, @@ -1224,6 +1244,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Vikavolt, .iconSprite = gMonIcon_Vikavolt, .iconPalIndex = 0, + SHADOW(-1, 16, SHADOW_SIZE_S) FOOTPRINT(Vikavolt) OVERWORLD( sPicTable_Vikavolt, @@ -1234,6 +1255,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Vikavolt ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sVikavoltLevelUpLearnset, .teachableLearnset = sVikavoltTeachableLearnset, .formSpeciesIdTable = sVikavoltFormSpeciesIdTable, @@ -1289,6 +1311,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Crabrawler, .iconSprite = gMonIcon_Crabrawler, .iconPalIndex = 2, + SHADOW(7, 6, SHADOW_SIZE_M) FOOTPRINT(Crabrawler) OVERWORLD( sPicTable_Crabrawler, @@ -1325,7 +1348,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_3), .abilities = { ABILITY_HYPER_CUTTER, ABILITY_IRON_FIST, ABILITY_ANGER_POINT }, .bodyColor = BODY_COLOR_WHITE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Crabminabl", "Crabominable"), + .speciesName = _("Crabominable"), .cryId = CRY_CRABOMINABLE, .natDexNum = NATIONAL_DEX_CRABOMINABLE, .categoryName = _("Woolly Crab"), @@ -1353,6 +1376,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Crabominable, .iconSprite = gMonIcon_Crabominable, .iconPalIndex = 2, + SHADOW(1, 14, SHADOW_SIZE_L) FOOTPRINT(Crabominable) OVERWORLD( sPicTable_Crabominable, @@ -1416,6 +1440,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_OricorioBaile, .iconSprite = gMonIcon_OricorioBaile, .iconPalIndex = 0, + SHADOW(-4, 9, SHADOW_SIZE_S) FOOTPRINT(Oricorio) OVERWORLD( sPicTable_OricorioBaile, @@ -1480,6 +1505,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_OricorioPomPom, .iconSprite = gMonIcon_OricorioPomPom, .iconPalIndex = 1, + SHADOW(5, 8, SHADOW_SIZE_S) FOOTPRINT(Oricorio) .levelUpLearnset = sOricorioLevelUpLearnset, .teachableLearnset = sOricorioTeachableLearnset, @@ -1536,6 +1562,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_OricorioPau, .iconSprite = gMonIcon_OricorioPau, .iconPalIndex = 1, + SHADOW(-3, 11, SHADOW_SIZE_S) FOOTPRINT(Oricorio) .levelUpLearnset = sOricorioLevelUpLearnset, .teachableLearnset = sOricorioTeachableLearnset, @@ -1592,6 +1619,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_OricorioSensu, .iconSprite = gMonIcon_OricorioSensu, .iconPalIndex = 0, + SHADOW(7, 10, SHADOW_SIZE_S) FOOTPRINT(Oricorio) .levelUpLearnset = sOricorioLevelUpLearnset, .teachableLearnset = sOricorioTeachableLearnset, @@ -1651,6 +1679,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Cutiefly, .iconSprite = gMonIcon_Cutiefly, .iconPalIndex = 2, + SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Cutiefly) OVERWORLD( sPicTable_Cutiefly, @@ -1712,6 +1741,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Ribombee, .iconSprite = gMonIcon_Ribombee, .iconPalIndex = 2, + SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Ribombee) OVERWORLD( sPicTable_Ribombee, @@ -1771,6 +1801,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Ribombee, .iconSprite = gMonIcon_Ribombee, .iconPalIndex = 2, + SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Ribombee) OVERWORLD( sPicTable_Ribombee, @@ -1781,6 +1812,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Ribombee ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRibombeeLevelUpLearnset, .teachableLearnset = sRibombeeTeachableLearnset, .formSpeciesIdTable = sRibombeeFormSpeciesIdTable, @@ -1831,6 +1863,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Rockruff, .iconSprite = gMonIcon_Rockruff, .iconPalIndex = 2, + SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Rockruff) OVERWORLD( sPicTable_Rockruff, @@ -1891,6 +1924,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Rockruff, .iconSprite = gMonIcon_Rockruff, .iconPalIndex = 2, + SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Rockruff) OVERWORLD( sPicTable_Rockruff, @@ -1954,6 +1988,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_LycanrocMidday, .iconSprite = gMonIcon_LycanrocMidday, .iconPalIndex = 2, + SHADOW(5, 7, SHADOW_SIZE_L) FOOTPRINT(Lycanroc) OVERWORLD( sPicTable_LycanrocMidday, @@ -2015,6 +2050,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_LycanrocMidnight, .iconSprite = gMonIcon_LycanrocMidnight, .iconPalIndex = 0, + SHADOW(5, 13, SHADOW_SIZE_L) FOOTPRINT(Lycanroc) OVERWORLD( sPicTable_LycanrocMidnight, @@ -2076,6 +2112,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_LycanrocDusk, .iconSprite = gMonIcon_LycanrocDusk, .iconPalIndex = 0, + SHADOW(5, 7, SHADOW_SIZE_L) FOOTPRINT(Lycanroc) OVERWORLD( sPicTable_LycanrocDusk, @@ -2140,6 +2177,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_WishiwashiSolo, .iconSprite = gMonIcon_WishiwashiSolo, .iconPalIndex = 2, + SHADOW(-1, 3, SHADOW_SIZE_S) FOOTPRINT(Wishiwashi) OVERWORLD( sPicTable_WishiwashiSolo, @@ -2203,6 +2241,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_WishiwashiSchool, .iconSprite = gMonIcon_WishiwashiSchool, .iconPalIndex = 0, + SHADOW(-4, 7, SHADOW_SIZE_L) FOOTPRINT(Wishiwashi) .levelUpLearnset = sWishiwashiLevelUpLearnset, .teachableLearnset = sWishiwashiTeachableLearnset, @@ -2261,6 +2300,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Mareanie, .iconSprite = gMonIcon_Mareanie, .iconPalIndex = 2, + SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Mareanie) OVERWORLD( sPicTable_Mareanie, @@ -2324,6 +2364,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Toxapex, .iconSprite = gMonIcon_Toxapex, .iconPalIndex = 0, + SHADOW(0, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Toxapex) OVERWORLD( sPicTable_Toxapex, @@ -2387,6 +2428,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Mudbray, .iconSprite = gMonIcon_Mudbray, .iconPalIndex = 2, + SHADOW(2, 6, SHADOW_SIZE_M) FOOTPRINT(Mudbray) OVERWORLD( sPicTable_Mudbray, @@ -2450,6 +2492,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Mudsdale, .iconSprite = gMonIcon_Mudsdale, .iconPalIndex = 0, + SHADOW(4, 13, SHADOW_SIZE_L) FOOTPRINT(Mudsdale) OVERWORLD( sPicTable_Mudsdale, @@ -2513,6 +2556,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Dewpider, .iconSprite = gMonIcon_Dewpider, .iconPalIndex = 0, + SHADOW(1, 2, SHADOW_SIZE_S) FOOTPRINT(Dewpider) OVERWORLD( sPicTable_Dewpider, @@ -2573,6 +2617,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Araquanid, .iconSprite = gMonIcon_Araquanid, .iconPalIndex = 2, + SHADOW(-6, 9, SHADOW_SIZE_M) FOOTPRINT(Araquanid) OVERWORLD( sPicTable_Araquanid, @@ -2631,6 +2676,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Araquanid, .iconSprite = gMonIcon_Araquanid, .iconPalIndex = 2, + SHADOW(-6, 9, SHADOW_SIZE_S) FOOTPRINT(Araquanid) OVERWORLD( sPicTable_Araquanid, @@ -2641,6 +2687,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Araquanid ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sAraquanidLevelUpLearnset, .teachableLearnset = sAraquanidTeachableLearnset, .formSpeciesIdTable = sAraquanidFormSpeciesIdTable, @@ -2696,6 +2743,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Fomantis, .iconSprite = gMonIcon_Fomantis, .iconPalIndex = 1, + SHADOW(0, 3, SHADOW_SIZE_S) FOOTPRINT(Fomantis) OVERWORLD( sPicTable_Fomantis, @@ -2756,6 +2804,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Lurantis, .iconSprite = gMonIcon_Lurantis, .iconPalIndex = 1, + SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Lurantis) OVERWORLD( sPicTable_Lurantis, @@ -2814,6 +2863,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Lurantis, .iconSprite = gMonIcon_Lurantis, .iconPalIndex = 1, + SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Lurantis) OVERWORLD( sPicTable_Lurantis, @@ -2824,6 +2874,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Lurantis ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLurantisLevelUpLearnset, .teachableLearnset = sLurantisTeachableLearnset, .formSpeciesIdTable = sLurantisFormSpeciesIdTable, @@ -2880,6 +2931,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Morelull, .iconSprite = gMonIcon_Morelull, .iconPalIndex = 0, + SHADOW(-1, 4, SHADOW_SIZE_S) FOOTPRINT(Morelull) OVERWORLD( sPicTable_Morelull, @@ -2944,6 +2996,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Shiinotic, .iconSprite = gMonIcon_Shiinotic, .iconPalIndex = 1, + SHADOW(0, 10, SHADOW_SIZE_S) FOOTPRINT(Shiinotic) OVERWORLD( sPicTable_Shiinotic, @@ -3007,6 +3060,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Salandit, .iconSprite = gMonIcon_Salandit, .iconPalIndex = 2, + SHADOW(3, 1, SHADOW_SIZE_M) FOOTPRINT(Salandit) OVERWORLD( sPicTable_Salandit, @@ -3067,6 +3121,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Salazzle, .iconSprite = gMonIcon_Salazzle, .iconPalIndex = 0, + SHADOW(-4, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Salazzle) OVERWORLD( sPicTable_Salazzle, @@ -3125,6 +3180,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Salazzle, .iconSprite = gMonIcon_Salazzle, .iconPalIndex = 0, + SHADOW(-4, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Salazzle) OVERWORLD( sPicTable_Salazzle, @@ -3135,6 +3191,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Salazzle ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sSalazzleLevelUpLearnset, .teachableLearnset = sSalazzleTeachableLearnset, .formSpeciesIdTable = sSalanditFormSpeciesIdTable, @@ -3189,6 +3246,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Stufful, .iconSprite = gMonIcon_Stufful, .iconPalIndex = 0, + SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Stufful) OVERWORLD( sPicTable_Stufful, @@ -3251,6 +3309,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Bewear, .iconSprite = gMonIcon_Bewear, .iconPalIndex = 0, + SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Bewear) OVERWORLD( sPicTable_Bewear, @@ -3314,6 +3373,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Bounsweet, .iconSprite = gMonIcon_Bounsweet, .iconPalIndex = 1, + SHADOW(-2, -3, SHADOW_SIZE_S) FOOTPRINT(Bounsweet) OVERWORLD( sPicTable_Bounsweet, @@ -3378,6 +3438,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Steenee, .iconSprite = gMonIcon_Steenee, .iconPalIndex = 1, + SHADOW(-2, 7, SHADOW_SIZE_S) FOOTPRINT(Steenee) OVERWORLD( sPicTable_Steenee, @@ -3441,6 +3502,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Tsareena, .iconSprite = gMonIcon_Tsareena, .iconPalIndex = 1, + SHADOW(1, 13, SHADOW_SIZE_M) FOOTPRINT(Tsareena) OVERWORLD( sPicTable_Tsareena, @@ -3506,6 +3568,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Comfey, .iconSprite = gMonIcon_Comfey, .iconPalIndex = 1, + SHADOW(0, 10, SHADOW_SIZE_M) FOOTPRINT(Comfey) OVERWORLD( sPicTable_Comfey, @@ -3569,6 +3632,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Oranguru, .iconSprite = gMonIcon_Oranguru, .iconPalIndex = 0, + SHADOW(-2, 6, SHADOW_SIZE_M) FOOTPRINT(Oranguru) OVERWORLD( sPicTable_Oranguru, @@ -3632,6 +3696,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Passimian, .iconSprite = gMonIcon_Passimian, .iconPalIndex = 1, + SHADOW(-4, 12, SHADOW_SIZE_L) FOOTPRINT(Passimian) OVERWORLD( sPicTable_Passimian, @@ -3695,6 +3760,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Wimpod, .iconSprite = gMonIcon_Wimpod, .iconPalIndex = 2, + SHADOW(-4, -3, SHADOW_SIZE_S) FOOTPRINT(Wimpod) OVERWORLD( sPicTable_Wimpod, @@ -3757,6 +3823,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Golisopod, .iconSprite = gMonIcon_Golisopod, .iconPalIndex = 2, + SHADOW(2, 13, SHADOW_SIZE_L) FOOTPRINT(Golisopod) OVERWORLD( sPicTable_Golisopod, @@ -3820,6 +3887,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Sandygast, .iconSprite = gMonIcon_Sandygast, .iconPalIndex = 1, + NO_SHADOW FOOTPRINT(Sandygast) OVERWORLD( sPicTable_Sandygast, @@ -3883,6 +3951,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Palossand, .iconSprite = gMonIcon_Palossand, .iconPalIndex = 2, + NO_SHADOW FOOTPRINT(Palossand) OVERWORLD( sPicTable_Palossand, @@ -3945,6 +4014,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Pyukumuku, .iconSprite = gMonIcon_Pyukumuku, .iconPalIndex = 0, + SHADOW(-3, -3, SHADOW_SIZE_S) FOOTPRINT(Pyukumuku) OVERWORLD( sPicTable_Pyukumuku, @@ -4008,6 +4078,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_TypeNull, .iconSprite = gMonIcon_TypeNull, .iconPalIndex = 0, + SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Type_Null) OVERWORLD( sPicTable_TypeNull, @@ -4018,70 +4089,73 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_TypeNull ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTypeNullLevelUpLearnset, .teachableLearnset = sTypeNullTeachableLearnset, .evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_SILVALLY_NORMAL}), }, -#define SILVALLY_SPECIES_INFO(type, _palette) \ - { \ - .baseHP = 95, \ - .baseAttack = 95, \ - .baseDefense = 95, \ - .baseSpeed = 95, \ - .baseSpAttack = 95, \ - .baseSpDefense = 95, \ - .types = MON_TYPES(type), \ - .catchRate = 3, \ - .expYield = 257, \ - .evYield_HP = 3, \ - .genderRatio = MON_GENDERLESS, \ - .eggCycles = 120, \ - .friendship = 0, \ - .growthRate = GROWTH_SLOW, \ - .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ - .abilities = { ABILITY_RKS_SYSTEM, ABILITY_NONE, ABILITY_NONE }, \ - .bodyColor = BODY_COLOR_GRAY, \ - .isLegendary = TRUE, \ - .speciesName = _("Silvally"), \ - .cryId = CRY_SILVALLY, \ - .natDexNum = NATIONAL_DEX_SILVALLY, \ - .categoryName = _("Synthetic"), \ - .height = 23, \ - .weight = 1005, \ - .description = (type == TYPE_NORMAL \ - ? gSilvallyNormalPokedexText \ - : gSilvallyMemoryPokedexText), \ - .pokemonScale = 256, \ - .pokemonOffset = 0, \ - .trainerScale = 342, \ - .trainerOffset = 7, \ - .frontPic = gMonFrontPic_Silvally, \ - .frontPicSize = MON_COORDS_SIZE(64, 64), \ - .frontPicYOffset = 0, \ - .frontAnimFrames = sAnims_Silvally, \ - .frontAnimId = ANIM_V_SHAKE, \ - .backPic = gMonBackPic_Silvally, \ - .backPicSize = MON_COORDS_SIZE(56, 64), \ - .backPicYOffset = 0, \ - /*.backAnimId = BACK_ANIM_NONE,*/ \ - .palette = gMonPalette_Silvally##_palette, \ - .shinyPalette = gMonShinyPalette_Silvally##_palette, \ - .iconSprite = gMonIcon_Silvally, \ - .iconPalIndex = 0, \ - FOOTPRINT(Silvally) \ - OVERWORLD( \ - sPicTable_Silvally, \ - SIZE_32x32, \ - SHADOW_SIZE_M, \ - TRACKS_FOOT, \ - gOverworldPalette_Silvally, \ - gShinyOverworldPalette_Silvally \ - ) \ - .levelUpLearnset = sSilvallyLevelUpLearnset, \ - .teachableLearnset = sSilvallyTeachableLearnset, \ - .formSpeciesIdTable = sSilvallyFormSpeciesIdTable, \ - .formChangeTable = sSilvallyFormChangeTable, \ +#define SILVALLY_SPECIES_INFO(type, _palette) \ + { \ + .baseHP = 95, \ + .baseAttack = 95, \ + .baseDefense = 95, \ + .baseSpeed = 95, \ + .baseSpAttack = 95, \ + .baseSpDefense = 95, \ + .types = MON_TYPES(type), \ + .catchRate = 3, \ + .expYield = 257, \ + .evYield_HP = 3, \ + .genderRatio = MON_GENDERLESS, \ + .eggCycles = 120, \ + .friendship = 0, \ + .growthRate = GROWTH_SLOW, \ + .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \ + .abilities = { ABILITY_RKS_SYSTEM, ABILITY_NONE, ABILITY_NONE }, \ + .bodyColor = BODY_COLOR_GRAY, \ + .speciesName = _("Silvally"), \ + .cryId = CRY_SILVALLY, \ + .natDexNum = NATIONAL_DEX_SILVALLY, \ + .categoryName = _("Synthetic"), \ + .height = 23, \ + .weight = 1005, \ + .description = (type == TYPE_NORMAL \ + ? gSilvallyNormalPokedexText \ + : gSilvallyMemoryPokedexText), \ + .pokemonScale = 256, \ + .pokemonOffset = 0, \ + .trainerScale = 342, \ + .trainerOffset = 7, \ + .frontPic = gMonFrontPic_Silvally, \ + .frontPicSize = MON_COORDS_SIZE(64, 64), \ + .frontPicYOffset = 0, \ + .frontAnimFrames = sAnims_Silvally, \ + .frontAnimId = ANIM_V_SHAKE, \ + .backPic = gMonBackPic_Silvally, \ + .backPicSize = MON_COORDS_SIZE(56, 64), \ + .backPicYOffset = 0, \ + /*.backAnimId = BACK_ANIM_NONE,*/ \ + .palette = gMonPalette_Silvally##_palette, \ + .shinyPalette = gMonShinyPalette_Silvally##_palette, \ + .iconSprite = gMonIcon_Silvally, \ + .iconPalIndex = 0, \ + SHADOW(1, 13, SHADOW_SIZE_L) \ + FOOTPRINT(Silvally) \ + OVERWORLD( \ + sPicTable_Silvally, \ + SIZE_32x32, \ + SHADOW_SIZE_M, \ + TRACKS_FOOT, \ + gOverworldPalette_Silvally, \ + gShinyOverworldPalette_Silvally \ + ) \ + .isLegendary = TRUE, \ + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \ + .levelUpLearnset = sSilvallyLevelUpLearnset, \ + .teachableLearnset = sSilvallyTeachableLearnset, \ + .formSpeciesIdTable = sSilvallyFormSpeciesIdTable, \ + .formChangeTable = sSilvallyFormChangeTable, \ } [SPECIES_SILVALLY_NORMAL] = SILVALLY_SPECIES_INFO(TYPE_NORMAL, Normal), @@ -4158,6 +4232,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MiniorMeteor, \ .iconSprite = gMonIcon_MiniorMeteor, \ .iconPalIndex = 0, \ + SHADOW(0, 14, SHADOW_SIZE_S) \ OVERWORLD( \ sPicTable_MiniorMeteor, \ SIZE_32x32, \ @@ -4194,6 +4269,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MiniorCore, \ .iconSprite = gMonIcon_MiniorCore##Form, \ .iconPalIndex = iconPal, \ + SHADOW(-2, 12, SHADOW_SIZE_S) \ .formChangeTable = sMinior ##Form##FormChangeTable, \ MINIOR_MISC_INFO(color), \ } @@ -4262,6 +4338,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Komala, .iconSprite = gMonIcon_Komala, .iconPalIndex = 2, + SHADOW(-4, 0, SHADOW_SIZE_S) FOOTPRINT(Komala) OVERWORLD( sPicTable_Komala, @@ -4326,6 +4403,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Turtonator, .iconSprite = gMonIcon_Turtonator, .iconPalIndex = 0, + SHADOW(-3, 12, SHADOW_SIZE_L) FOOTPRINT(Turtonator) OVERWORLD( sPicTable_Turtonator, @@ -4386,6 +4464,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Togedemaru, .iconSprite = gMonIcon_Togedemaru, .iconPalIndex = 2, + SHADOW(-1, 4, SHADOW_SIZE_S) FOOTPRINT(Togedemaru) OVERWORLD( sPicTable_Togedemaru, @@ -4445,6 +4524,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Togedemaru, .iconSprite = gMonIcon_Togedemaru, .iconPalIndex = 2, + SHADOW(-1, 4, SHADOW_SIZE_S) FOOTPRINT(Togedemaru) OVERWORLD( sPicTable_Togedemaru, @@ -4455,6 +4535,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Togedemaru ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTogedemaruLevelUpLearnset, .teachableLearnset = sTogedemaruTeachableLearnset, .eggMoveLearnset = sTogedemaruEggMoveLearnset, @@ -4507,6 +4588,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MimikyuDisguised, .iconSprite = gMonIcon_MimikyuDisguised, .iconPalIndex = 1, + SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Mimikyu) OVERWORLD( sPicTable_MimikyuDisguised, @@ -4567,6 +4649,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MimikyuBusted, .iconSprite = gMonIcon_MimikyuBusted, .iconPalIndex = 1, + SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Mimikyu) .levelUpLearnset = sMimikyuLevelUpLearnset, .teachableLearnset = sMimikyuTeachableLearnset, @@ -4619,8 +4702,10 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MimikyuDisguised, .iconSprite = gMonIcon_MimikyuDisguised, .iconPalIndex = 1, + SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Mimikyu) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMimikyuLevelUpLearnset, .teachableLearnset = sMimikyuTeachableLearnset, .eggMoveLearnset = sMimikyuEggMoveLearnset, @@ -4672,8 +4757,10 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MimikyuBusted, .iconSprite = gMonIcon_MimikyuBusted, .iconPalIndex = 1, + SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Mimikyu) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMimikyuLevelUpLearnset, .teachableLearnset = sMimikyuTeachableLearnset, .eggMoveLearnset = sMimikyuEggMoveLearnset, @@ -4731,6 +4818,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Bruxish, .iconSprite = gMonIcon_Bruxish, .iconPalIndex = 0, + SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Bruxish) OVERWORLD( sPicTable_Bruxish, @@ -4795,6 +4883,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Drampa, .iconSprite = gMonIcon_Drampa, .iconPalIndex = 0, + SHADOW(5, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Drampa) OVERWORLD( sPicTable_Drampa, @@ -4860,6 +4949,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Dhelmise, .iconSprite = gMonIcon_Dhelmise, .iconPalIndex = 1, + SHADOW(-1, 12, SHADOW_SIZE_M) FOOTPRINT(Dhelmise) OVERWORLD( sPicTable_Dhelmise, @@ -4923,6 +5013,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_JangmoO, .iconSprite = gMonIcon_JangmoO, .iconPalIndex = 2, + SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(JangmoO) OVERWORLD( sPicTable_JangmoO, @@ -4986,6 +5077,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_HakamoO, .iconSprite = gMonIcon_HakamoO, .iconPalIndex = 2, + SHADOW(-2, 12, SHADOW_SIZE_M) FOOTPRINT(HakamoO) OVERWORLD( sPicTable_HakamoO, @@ -5045,6 +5137,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_KommoO, .iconSprite = gMonIcon_KommoO, .iconPalIndex = 2, + SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(KommoO) OVERWORLD( sPicTable_KommoO, @@ -5103,6 +5196,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_KommoO, .iconSprite = gMonIcon_KommoO, .iconPalIndex = 2, + SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(KommoO) OVERWORLD( sPicTable_KommoO, @@ -5113,6 +5207,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_KommoO ) .isTotem = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKommoOLevelUpLearnset, .teachableLearnset = sKommoOTeachableLearnset, .formSpeciesIdTable = sKommoOFormSpeciesIdTable, @@ -5168,6 +5263,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_TapuKoko, .iconSprite = gMonIcon_TapuKoko, .iconPalIndex = 0, + SHADOW(-1, 19, SHADOW_SIZE_M) FOOTPRINT(TapuKoko) OVERWORLD( sPicTable_TapuKoko, @@ -5178,6 +5274,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_TapuKoko ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTapuKokoLevelUpLearnset, .teachableLearnset = sTapuKokoTeachableLearnset, }, @@ -5232,6 +5329,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_TapuLele, .iconSprite = gMonIcon_TapuLele, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(TapuLele) OVERWORLD( sPicTable_TapuLele, @@ -5242,6 +5340,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_TapuLele ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTapuLeleLevelUpLearnset, .teachableLearnset = sTapuLeleTeachableLearnset, }, @@ -5296,6 +5395,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_TapuBulu, .iconSprite = gMonIcon_TapuBulu, .iconPalIndex = 2, + SHADOW(4, 16, SHADOW_SIZE_M) FOOTPRINT(TapuBulu) OVERWORLD( sPicTable_TapuBulu, @@ -5306,6 +5406,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_TapuBulu ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTapuBuluLevelUpLearnset, .teachableLearnset = sTapuBuluTeachableLearnset, }, @@ -5361,6 +5462,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_TapuFini, .iconSprite = gMonIcon_TapuFini, .iconPalIndex = 0, + SHADOW(1, 15, SHADOW_SIZE_M) FOOTPRINT(TapuFini) OVERWORLD( sPicTable_TapuFini, @@ -5371,6 +5473,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_TapuFini ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTapuFiniLevelUpLearnset, .teachableLearnset = sTapuFiniTeachableLearnset, }, @@ -5425,6 +5528,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Cosmog, .iconSprite = gMonIcon_Cosmog, .iconPalIndex = 2, + SHADOW(0, 8, SHADOW_SIZE_S) FOOTPRINT(Cosmog) OVERWORLD( sPicTable_Cosmog, @@ -5437,6 +5541,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .isLegendary = TRUE, .tmIlliterate = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCosmogLevelUpLearnset, .teachableLearnset = sCosmogTeachableLearnset, .evolutions = EVOLUTION({EVO_LEVEL, 43, SPECIES_COSMOEM}), @@ -5491,6 +5596,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Cosmoem, .iconSprite = gMonIcon_Cosmoem, .iconPalIndex = 0, + SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Cosmoem) OVERWORLD( sPicTable_Cosmoem, @@ -5503,6 +5609,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .isLegendary = TRUE, .tmIlliterate = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCosmoemLevelUpLearnset, .teachableLearnset = sCosmoemTeachableLearnset, .evolutions = EVOLUTION({EVO_LEVEL_DAY, 53, SPECIES_SOLGALEO}, @@ -5556,6 +5663,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Solgaleo, .iconSprite = gMonIcon_Solgaleo, .iconPalIndex = 0, + SHADOW(-1, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Solgaleo) OVERWORLD( sPicTable_Solgaleo, @@ -5567,6 +5675,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sSolgaleoLevelUpLearnset, .teachableLearnset = sSolgaleoTeachableLearnset, }, @@ -5619,6 +5728,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Lunala, .iconSprite = gMonIcon_Lunala, .iconPalIndex = 2, + SHADOW(4, 17, SHADOW_SIZE_L) FOOTPRINT(Lunala) OVERWORLD( sPicTable_Lunala, @@ -5630,6 +5740,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sLunalaLevelUpLearnset, .teachableLearnset = sLunalaTeachableLearnset, }, @@ -5684,6 +5795,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Nihilego, .iconSprite = gMonIcon_Nihilego, .iconPalIndex = 0, + SHADOW(-2, 14, SHADOW_SIZE_S) FOOTPRINT(Nihilego) OVERWORLD( sPicTable_Nihilego, @@ -5694,6 +5806,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Nihilego ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNihilegoLevelUpLearnset, .teachableLearnset = sNihilegoTeachableLearnset, }, @@ -5748,6 +5861,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Buzzwole, .iconSprite = gMonIcon_Buzzwole, .iconPalIndex = 0, + SHADOW(-2, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Buzzwole) OVERWORLD( sPicTable_Buzzwole, @@ -5758,6 +5872,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Buzzwole ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sBuzzwoleLevelUpLearnset, .teachableLearnset = sBuzzwoleTeachableLearnset, }, @@ -5811,6 +5926,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Pheromosa, .iconSprite = gMonIcon_Pheromosa, .iconPalIndex = 2, + SHADOW(0, 13, SHADOW_SIZE_S) FOOTPRINT(Pheromosa) OVERWORLD( sPicTable_Pheromosa, @@ -5821,6 +5937,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Pheromosa ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPheromosaLevelUpLearnset, .teachableLearnset = sPheromosaTeachableLearnset, }, @@ -5874,6 +5991,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Xurkitree, .iconSprite = gMonIcon_Xurkitree, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Xurkitree) OVERWORLD( sPicTable_Xurkitree, @@ -5884,6 +6002,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Xurkitree ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sXurkitreeLevelUpLearnset, .teachableLearnset = sXurkitreeTeachableLearnset, }, @@ -5939,6 +6058,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Celesteela, .iconSprite = gMonIcon_Celesteela, .iconPalIndex = 0, + SHADOW(-1, 13, SHADOW_SIZE_M) FOOTPRINT(Celesteela) OVERWORLD( sPicTable_Celesteela, @@ -5949,6 +6069,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Celesteela ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCelesteelaLevelUpLearnset, .teachableLearnset = sCelesteelaTeachableLearnset, }, @@ -6003,6 +6124,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Kartana, .iconSprite = gMonIcon_Kartana, .iconPalIndex = 0, + SHADOW(2, 14, SHADOW_SIZE_M) FOOTPRINT(Kartana) OVERWORLD( sPicTable_Kartana, @@ -6013,6 +6135,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Kartana ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKartanaLevelUpLearnset, .teachableLearnset = sKartanaTeachableLearnset, }, @@ -6066,6 +6189,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Guzzlord, .iconSprite = gMonIcon_Guzzlord, .iconPalIndex = 0, + SHADOW(4, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Guzzlord) OVERWORLD( sPicTable_Guzzlord, @@ -6076,6 +6200,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Guzzlord ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGuzzlordLevelUpLearnset, .teachableLearnset = sGuzzlordTeachableLearnset, }, @@ -6132,6 +6257,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Necrozma, .iconSprite = gMonIcon_Necrozma, .iconPalIndex = 0, + SHADOW(-1, 15, SHADOW_SIZE_M) FOOTPRINT(Necrozma) OVERWORLD( sPicTable_Necrozma, @@ -6143,6 +6269,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNecrozmaLevelUpLearnset, .teachableLearnset = sNecrozmaTeachableLearnset, .formSpeciesIdTable = sNecrozmaFormSpeciesIdTable, @@ -6197,6 +6324,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_NecrozmaDuskMane, .iconSprite = gMonIcon_NecrozmaDuskMane, .iconPalIndex = 0, + SHADOW(-3, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Necrozma) OVERWORLD( sPicTable_NecrozmaDuskMane, @@ -6209,6 +6337,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNecrozmaLevelUpLearnset, .teachableLearnset = sNecrozmaTeachableLearnset, .formSpeciesIdTable = sNecrozmaFormSpeciesIdTable, @@ -6264,6 +6393,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_NecrozmaDawnWings, .iconSprite = gMonIcon_NecrozmaDawnWings, .iconPalIndex = 0, + SHADOW(3, 17, SHADOW_SIZE_L) FOOTPRINT(Necrozma) OVERWORLD( sPicTable_NecrozmaDawnWings, @@ -6276,6 +6406,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNecrozmaLevelUpLearnset, .teachableLearnset = sNecrozmaTeachableLearnset, .formSpeciesIdTable = sNecrozmaFormSpeciesIdTable, @@ -6334,11 +6465,13 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_NecrozmaUltra, .iconSprite = gMonIcon_NecrozmaUltra, .iconPalIndex = 2, + SHADOW(-1, 16, SHADOW_SIZE_L) FOOTPRINT(Necrozma) .isLegendary = TRUE, .isUltraBurst = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNecrozmaLevelUpLearnset, .teachableLearnset = sNecrozmaTeachableLearnset, .formSpeciesIdTable = sNecrozmaFormSpeciesIdTable, @@ -6395,6 +6528,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Magearna, .iconSprite = gMonIcon_Magearna, .iconPalIndex = 0, + SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Magearna) OVERWORLD( sPicTable_Magearna, @@ -6406,6 +6540,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMagearnaLevelUpLearnset, .teachableLearnset = sMagearnaTeachableLearnset, .formSpeciesIdTable = sMagearnaFormSpeciesIdTable, @@ -6457,9 +6592,11 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MagearnaOriginalColor, .iconSprite = gMonIcon_MagearnaOriginalColor, .iconPalIndex = 0, + SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Magearna) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMagearnaLevelUpLearnset, .teachableLearnset = sMagearnaTeachableLearnset, .formSpeciesIdTable = sMagearnaFormSpeciesIdTable, @@ -6516,6 +6653,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Marshadow, .iconSprite = gMonIcon_Marshadow, .iconPalIndex = 0, + SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Marshadow) OVERWORLD( sPicTable_Marshadow, @@ -6527,6 +6665,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMarshadowLevelUpLearnset, .teachableLearnset = sMarshadowTeachableLearnset, }, @@ -6580,6 +6719,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Poipole, .iconSprite = gMonIcon_Poipole, .iconPalIndex = 0, + SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Poipole) OVERWORLD( sPicTable_Poipole, @@ -6590,6 +6730,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Poipole ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPoipoleLevelUpLearnset, .teachableLearnset = sPoipoleTeachableLearnset, .evolutions = EVOLUTION({EVO_MOVE, MOVE_DRAGON_PULSE, SPECIES_NAGANADEL}), @@ -6642,6 +6783,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Naganadel, .iconSprite = gMonIcon_Naganadel, .iconPalIndex = 0, + SHADOW(7, 17, SHADOW_SIZE_M) FOOTPRINT(Naganadel) OVERWORLD( sPicTable_Naganadel, @@ -6652,6 +6794,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Naganadel ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sNaganadelLevelUpLearnset, .teachableLearnset = sNaganadelTeachableLearnset, }, @@ -6705,6 +6848,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Stakataka, .iconSprite = gMonIcon_Stakataka, .iconPalIndex = 0, + SHADOW(2, 15, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Stakataka) OVERWORLD( sPicTable_Stakataka, @@ -6715,6 +6859,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Stakataka ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sStakatakaLevelUpLearnset, .teachableLearnset = sStakatakaTeachableLearnset, }, @@ -6741,7 +6886,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .abilities = { ABILITY_BEAST_BOOST, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Blacephaln", "Blacephalon"), + .speciesName = _("Blacephalon"), .cryId = CRY_BLACEPHALON, .natDexNum = NATIONAL_DEX_BLACEPHALON, .categoryName = _("Fireworks"), @@ -6768,6 +6913,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Blacephalon, .iconSprite = gMonIcon_Blacephalon, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Blacephalon) OVERWORLD( sPicTable_Blacephalon, @@ -6778,6 +6924,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = gShinyOverworldPalette_Blacephalon ) .isUltraBeast = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sBlacephalonLevelUpLearnset, .teachableLearnset = sBlacephalonTeachableLearnset, }, @@ -6830,6 +6977,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Zeraora, .iconSprite = gMonIcon_Zeraora, .iconPalIndex = 0, + SHADOW(0, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Zeraora) OVERWORLD( sPicTable_Zeraora, @@ -6841,6 +6989,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZeraoraLevelUpLearnset, .teachableLearnset = sZeraoraTeachableLearnset, }, @@ -6893,6 +7042,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Meltan, .iconSprite = gMonIcon_Meltan, .iconPalIndex = 2, + SHADOW(-1, 2, SHADOW_SIZE_S) FOOTPRINT(Meltan) OVERWORLD( sPicTable_Meltan, @@ -6904,6 +7054,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMeltanLevelUpLearnset, .teachableLearnset = sMeltanTeachableLearnset, }, @@ -6954,6 +7105,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_Melmetal, .iconSprite = gMonIcon_Melmetal, .iconPalIndex = 2, + SHADOW(3, 10, SHADOW_SIZE_L) FOOTPRINT(Melmetal) OVERWORLD( sPicTable_Melmetal, @@ -6965,6 +7117,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMelmetalLevelUpLearnset, .teachableLearnset = sMelmetalTeachableLearnset, .formSpeciesIdTable = sMelmetalFormSpeciesIdTable, @@ -7019,10 +7172,12 @@ const struct SpeciesInfo gSpeciesInfoGen7[] = .shinyPalette = gMonShinyPalette_MelmetalGigantamax, .iconSprite = gMonIcon_MelmetalGigantamax, .iconPalIndex = 0, + SHADOW(2, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Melmetal) .isMythical = TRUE, .isGigantamax = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMelmetalLevelUpLearnset, .teachableLearnset = sMelmetalTeachableLearnset, .formSpeciesIdTable = sMelmetalFormSpeciesIdTable, diff --git a/src/data/pokemon/species_info/gen_8_families.h b/src/data/pokemon/species_info/gen_8_families.h index 353597e96a..b40b31a25d 100644 --- a/src/data/pokemon/species_info/gen_8_families.h +++ b/src/data/pokemon/species_info/gen_8_families.h @@ -51,6 +51,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Grookey, .iconSprite = gMonIcon_Grookey, .iconPalIndex = 1, + SHADOW(1, 1, SHADOW_SIZE_S) FOOTPRINT(Grookey) OVERWORLD( sPicTable_Grookey, @@ -112,6 +113,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Thwackey, .iconSprite = gMonIcon_Thwackey, .iconPalIndex = 1, + SHADOW(5, 6, SHADOW_SIZE_M) FOOTPRINT(Thwackey) OVERWORLD( sPicTable_Thwackey, @@ -172,6 +174,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Rillaboom, .iconSprite = gMonIcon_Rillaboom, .iconPalIndex = 1, + SHADOW(2, 8, SHADOW_SIZE_L) FOOTPRINT(Rillaboom) OVERWORLD( sPicTable_Rillaboom, @@ -234,6 +237,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_RillaboomGigantamax, .iconSprite = gMonIcon_RillaboomGigantamax, .iconPalIndex = 1, + SHADOW(0, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Rillaboom) .isGigantamax = TRUE, .levelUpLearnset = sRillaboomLevelUpLearnset, @@ -292,6 +296,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Scorbunny, .iconSprite = gMonIcon_Scorbunny, .iconPalIndex = 0, + SHADOW(-1, 6, SHADOW_SIZE_S) FOOTPRINT(Scorbunny) OVERWORLD( sPicTable_Scorbunny, @@ -353,6 +358,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Raboot, .iconSprite = gMonIcon_Raboot, .iconPalIndex = 0, + SHADOW(-4, 5, SHADOW_SIZE_S) FOOTPRINT(Raboot) OVERWORLD( sPicTable_Raboot, @@ -414,6 +420,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Cinderace, .iconSprite = gMonIcon_Cinderace, .iconPalIndex = 0, + SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Cinderace) OVERWORLD( sPicTable_Cinderace, @@ -477,6 +484,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CinderaceGigantamax, .iconSprite = gMonIcon_CinderaceGigantamax, .iconPalIndex = 0, + SHADOW(-3, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Cinderace) .isGigantamax = TRUE, .levelUpLearnset = sCinderaceLevelUpLearnset, @@ -536,6 +544,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Sobble, .iconSprite = gMonIcon_Sobble, .iconPalIndex = 2, + SHADOW(-3, 3, SHADOW_SIZE_S) FOOTPRINT(Sobble) OVERWORLD( sPicTable_Sobble, @@ -597,6 +606,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Drizzile, .iconSprite = gMonIcon_Drizzile, .iconPalIndex = 2, + SHADOW(2, 5, SHADOW_SIZE_M) FOOTPRINT(Drizzile) OVERWORLD( sPicTable_Drizzile, @@ -658,6 +668,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Inteleon, .iconSprite = gMonIcon_Inteleon, .iconPalIndex = 0, + SHADOW(-5, 12, SHADOW_SIZE_S) FOOTPRINT(Inteleon) OVERWORLD( sPicTable_Inteleon, @@ -721,6 +732,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_InteleonGigantamax, .iconSprite = gMonIcon_InteleonGigantamax, .iconPalIndex = 0, + SHADOW(-5, 12, SHADOW_SIZE_L) FOOTPRINT(Inteleon) .isGigantamax = TRUE, .levelUpLearnset = sInteleonLevelUpLearnset, @@ -779,6 +791,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Skwovet, .iconSprite = gMonIcon_Skwovet, .iconPalIndex = 2, + SHADOW(-7, 5, SHADOW_SIZE_S) FOOTPRINT(Skwovet) OVERWORLD( sPicTable_Skwovet, @@ -842,6 +855,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Greedent, .iconSprite = gMonIcon_Greedent, .iconPalIndex = 0, + SHADOW(-11, 10, SHADOW_SIZE_M) FOOTPRINT(Greedent) OVERWORLD( sPicTable_Greedent, @@ -904,6 +918,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Rookidee, .iconSprite = gMonIcon_Rookidee, .iconPalIndex = 0, + SHADOW(-1, -3, SHADOW_SIZE_S) FOOTPRINT(Rookidee) OVERWORLD( sPicTable_Rookidee, @@ -938,7 +953,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), .abilities = { ABILITY_KEEN_EYE, ABILITY_UNNERVE, ABILITY_BIG_PECKS }, .bodyColor = BODY_COLOR_BLUE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Corvisquir", "Corvisquire"), + .speciesName = _("Corvisquire"), .cryId = CRY_CORVISQUIRE, .natDexNum = NATIONAL_DEX_CORVISQUIRE, .categoryName = _("Raven"), @@ -967,6 +982,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Corvisquire, .iconSprite = gMonIcon_Corvisquire, .iconPalIndex = 0, + SHADOW(2, 16, SHADOW_SIZE_S) FOOTPRINT(Corvisquire) OVERWORLD( sPicTable_Corvisquire, @@ -1000,7 +1016,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), .abilities = { ABILITY_PRESSURE, ABILITY_UNNERVE, ABILITY_MIRROR_ARMOR }, .bodyColor = BODY_COLOR_PURPLE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Corviknigh", "Corviknight"), + .speciesName = _("Corviknight"), .cryId = CRY_CORVIKNIGHT, .natDexNum = NATIONAL_DEX_CORVIKNIGHT, .categoryName = _("Raven"), @@ -1028,6 +1044,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Corviknight, .iconSprite = gMonIcon_Corviknight, .iconPalIndex = 0, + SHADOW(-1, 9, SHADOW_SIZE_L) FOOTPRINT(Corviknight) OVERWORLD( sPicTable_Corviknight, @@ -1063,7 +1080,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), .abilities = { ABILITY_PRESSURE, ABILITY_UNNERVE, ABILITY_MIRROR_ARMOR }, .bodyColor = BODY_COLOR_PURPLE, - .speciesName = _("Corviknigh"), + .speciesName = _("Corviknight"), .cryId = CRY_CORVIKNIGHT, .natDexNum = NATIONAL_DEX_CORVIKNIGHT, .categoryName = _("Raven"), @@ -1091,6 +1108,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CorviknightGigantamax, .iconSprite = gMonIcon_CorviknightGigantamax, .iconPalIndex = 0, + SHADOW(2, 8, SHADOW_SIZE_L) FOOTPRINT(Corviknight) .isGigantamax = TRUE, .levelUpLearnset = sCorviknightLevelUpLearnset, @@ -1148,6 +1166,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Blipbug, .iconSprite = gMonIcon_Blipbug, .iconPalIndex = 0, + SHADOW(2, 1, SHADOW_SIZE_S) FOOTPRINT(Blipbug) OVERWORLD( sPicTable_Blipbug, @@ -1212,6 +1231,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Dottler, .iconSprite = gMonIcon_Dottler, .iconPalIndex = 2, + SHADOW(-1, 0, SHADOW_SIZE_M) FOOTPRINT(Dottler) OVERWORLD( sPicTable_Dottler, @@ -1275,6 +1295,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Orbeetle, .iconSprite = gMonIcon_Orbeetle, .iconPalIndex = 0, + SHADOW(0, 15, SHADOW_SIZE_M) FOOTPRINT(Orbeetle) OVERWORLD( sPicTable_Orbeetle, @@ -1339,6 +1360,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_OrbeetleGigantamax, .iconSprite = gMonIcon_OrbeetleGigantamax, .iconPalIndex = 0, + SHADOW(0, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Orbeetle) .isGigantamax = TRUE, .levelUpLearnset = sOrbeetleLevelUpLearnset, @@ -1397,6 +1419,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Nickit, .iconSprite = gMonIcon_Nickit, .iconPalIndex = 2, + SHADOW(0, 4, SHADOW_SIZE_M) FOOTPRINT(Nickit) OVERWORLD( sPicTable_Nickit, @@ -1459,6 +1482,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Thievul, .iconSprite = gMonIcon_Thievul, .iconPalIndex = 2, + SHADOW(-9, 7, SHADOW_SIZE_M) FOOTPRINT(Thievul) OVERWORLD( sPicTable_Thievul, @@ -1521,6 +1545,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Gossifleur, .iconSprite = gMonIcon_Gossifleur, .iconPalIndex = 1, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Gossifleur) OVERWORLD( sPicTable_Gossifleur, @@ -1583,6 +1608,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Eldegoss, .iconSprite = gMonIcon_Eldegoss, .iconPalIndex = 1, + SHADOW(-2, 8, SHADOW_SIZE_S) FOOTPRINT(Eldegoss) OVERWORLD( sPicTable_Eldegoss, @@ -1645,6 +1671,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Wooloo, .iconSprite = gMonIcon_Wooloo, .iconPalIndex = 0, + SHADOW(1, 1, SHADOW_SIZE_S) FOOTPRINT(Wooloo) OVERWORLD( sPicTable_Wooloo, @@ -1707,6 +1734,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Dubwool, .iconSprite = gMonIcon_Dubwool, .iconPalIndex = 2, + SHADOW(2, 8, SHADOW_SIZE_M) FOOTPRINT(Dubwool) OVERWORLD( sPicTable_Dubwool, @@ -1768,6 +1796,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Chewtle, .iconSprite = gMonIcon_Chewtle, .iconPalIndex = 0, + SHADOW(3, 1, SHADOW_SIZE_S) FOOTPRINT(Chewtle) OVERWORLD( sPicTable_Chewtle, @@ -1829,6 +1858,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Drednaw, .iconSprite = gMonIcon_Drednaw, .iconPalIndex = 0, + SHADOW(-2, 4, SHADOW_SIZE_L) FOOTPRINT(Drednaw) OVERWORLD( sPicTable_Drednaw, @@ -1892,6 +1922,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_DrednawGigantamax, .iconSprite = gMonIcon_DrednawGigantamax, .iconPalIndex = 0, + SHADOW(2, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Drednaw) .isGigantamax = TRUE, .levelUpLearnset = sDrednawLevelUpLearnset, @@ -1950,6 +1981,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Yamper, .iconSprite = gMonIcon_Yamper, .iconPalIndex = 1, + SHADOW(-1, 2, SHADOW_SIZE_M) FOOTPRINT(Yamper) OVERWORLD( sPicTable_Yamper, @@ -2012,6 +2044,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Boltund, .iconSprite = gMonIcon_Boltund, .iconPalIndex = 1, + SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Boltund) OVERWORLD( sPicTable_Boltund, @@ -2074,6 +2107,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Rolycoly, .iconSprite = gMonIcon_Rolycoly, .iconPalIndex = 0, + SHADOW(0, -3, SHADOW_SIZE_S) FOOTPRINT(Rolycoly) OVERWORLD( sPicTable_Rolycoly, @@ -2135,6 +2169,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Carkol, .iconSprite = gMonIcon_Carkol, .iconPalIndex = 0, + SHADOW(0, 3, SHADOW_SIZE_M) FOOTPRINT(Carkol) OVERWORLD( sPicTable_Carkol, @@ -2196,6 +2231,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Coalossal, .iconSprite = gMonIcon_Coalossal, .iconPalIndex = 0, + SHADOW(1, 12, SHADOW_SIZE_L) FOOTPRINT(Coalossal) OVERWORLD( sPicTable_Coalossal, @@ -2259,6 +2295,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CoalossalGigantamax, .iconSprite = gMonIcon_CoalossalGigantamax, .iconPalIndex = 0, + SHADOW(1, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Coalossal) .isGigantamax = TRUE, .levelUpLearnset = sCoalossalLevelUpLearnset, @@ -2317,6 +2354,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Applin, .iconSprite = gMonIcon_Applin, .iconPalIndex = 1, + SHADOW(-1, -3, SHADOW_SIZE_S) FOOTPRINT(Applin) OVERWORLD( sPicTable_Applin, @@ -2382,6 +2420,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Flapple, .iconSprite = gMonIcon_Flapple, .iconPalIndex = 1, + SHADOW(-6, 11, SHADOW_SIZE_S) FOOTPRINT(Flapple) OVERWORLD( sPicTable_Flapple, @@ -2445,6 +2484,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_FlappleGigantamax, .iconSprite = gMonIcon_FlappleGigantamax, .iconPalIndex = 1, + SHADOW(0, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Flapple) .isGigantamax = TRUE, .levelUpLearnset = sFlappleLevelUpLearnset, @@ -2500,6 +2540,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Appletun, .iconSprite = gMonIcon_Appletun, .iconPalIndex = 1, + SHADOW(5, 6, SHADOW_SIZE_L) FOOTPRINT(Appletun) OVERWORLD( sPicTable_Appletun, @@ -2563,6 +2604,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_AppletunGigantamax, .iconSprite = gMonIcon_AppletunGigantamax, .iconPalIndex = 1, + SHADOW(0, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Appletun) .isGigantamax = TRUE, .levelUpLearnset = sAppletunLevelUpLearnset, @@ -2619,7 +2661,16 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Dipplin, .iconSprite = gMonIcon_Dipplin, .iconPalIndex = 1, + SHADOW(-4, 8, SHADOW_SIZE_S) FOOTPRINT(Dipplin) + OVERWORLD( + sPicTable_Dipplin, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Dipplin, + gShinyOverworldPalette_Dipplin + ) .levelUpLearnset = sDipplinLevelUpLearnset, .teachableLearnset = sDipplinTeachableLearnset, .evolutions = EVOLUTION({EVO_MOVE, MOVE_DRAGON_CHEER, SPECIES_HYDRAPPLE}), @@ -2672,7 +2723,16 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Hydrapple, .iconSprite = gMonIcon_Hydrapple, .iconPalIndex = 5, + SHADOW(1, 12, SHADOW_SIZE_L) FOOTPRINT(Hydrapple) + OVERWORLD( + sPicTable_Hydrapple, + SIZE_64x64, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Hydrapple, + gShinyOverworldPalette_Hydrapple + ) .levelUpLearnset = sHydrappleLevelUpLearnset, .teachableLearnset = sHydrappleTeachableLearnset, }, @@ -2726,6 +2786,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Silicobra, .iconSprite = gMonIcon_Silicobra, .iconPalIndex = 1, + SHADOW(3, 1, SHADOW_SIZE_M) FOOTPRINT(Silicobra) OVERWORLD( sPicTable_Silicobra, @@ -2788,6 +2849,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Sandaconda, .iconSprite = gMonIcon_Sandaconda, .iconPalIndex = 1, + SHADOW(2, -1, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Sandaconda) OVERWORLD( sPicTable_Sandaconda, @@ -2851,6 +2913,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_SandacondaGigantamax, .iconSprite = gMonIcon_SandacondaGigantamax, .iconPalIndex = 1, + SHADOW(0, 14, SHADOW_SIZE_M) FOOTPRINT(Sandaconda) .isGigantamax = TRUE, .levelUpLearnset = sSandacondaLevelUpLearnset, @@ -2908,6 +2971,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Cramorant, .iconSprite = gMonIcon_Cramorant, .iconPalIndex = 0, + SHADOW(5, 14, SHADOW_SIZE_M) FOOTPRINT(Cramorant) OVERWORLD( sPicTable_Cramorant, @@ -2971,6 +3035,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CramorantGulping, .iconSprite = gMonIcon_CramorantGulping, .iconPalIndex = 0, + SHADOW(5, 14, SHADOW_SIZE_M) FOOTPRINT(Cramorant) .levelUpLearnset = sCramorantLevelUpLearnset, .teachableLearnset = sCramorantTeachableLearnset, @@ -3026,6 +3091,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CramorantGorging, .iconSprite = gMonIcon_CramorantGorging, .iconPalIndex = 0, + SHADOW(5, 14, SHADOW_SIZE_M) FOOTPRINT(Cramorant) .levelUpLearnset = sCramorantLevelUpLearnset, .teachableLearnset = sCramorantTeachableLearnset, @@ -3083,6 +3149,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Arrokuda, .iconSprite = gMonIcon_Arrokuda, .iconPalIndex = 2, + SHADOW(-1, -5, SHADOW_SIZE_S) FOOTPRINT(Arrokuda) OVERWORLD( sPicTable_Arrokuda, @@ -3117,7 +3184,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_2), .abilities = { ABILITY_SWIFT_SWIM, ABILITY_NONE, ABILITY_PROPELLER_TAIL }, .bodyColor = BODY_COLOR_BROWN, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Barraskewd", "Barraskewda"), + .speciesName = _("Barraskewda"), .cryId = CRY_BARRASKEWDA, .natDexNum = NATIONAL_DEX_BARRASKEWDA, .categoryName = _("Skewer"), @@ -3145,6 +3212,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Barraskewda, .iconSprite = gMonIcon_Barraskewda, .iconPalIndex = 2, + SHADOW(4, 5, SHADOW_SIZE_M) FOOTPRINT(Barraskewda) OVERWORLD( sPicTable_Barraskewda, @@ -3207,6 +3275,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Toxel, .iconSprite = gMonIcon_Toxel, .iconPalIndex = 2, + SHADOW(-2, 1, SHADOW_SIZE_M) FOOTPRINT(Toxel) OVERWORLD( sPicTable_Toxel, @@ -3270,6 +3339,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ToxtricityAmped, .iconSprite = gMonIcon_ToxtricityAmped, .iconPalIndex = 2, + SHADOW(-6, 13, SHADOW_SIZE_M) FOOTPRINT(Toxtricity) OVERWORLD( sPicTable_ToxtricityAmped, @@ -3329,6 +3399,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ToxtricityGigantamax, .iconSprite = gMonIcon_ToxtricityGigantamax, .iconPalIndex = 0, + SHADOW(1, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Toxtricity) .isGigantamax = TRUE, .levelUpLearnset = sToxtricityAmpedLevelUpLearnset, @@ -3384,6 +3455,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ToxtricityLowKey, .iconSprite = gMonIcon_ToxtricityLowKey, .iconPalIndex = 2, + SHADOW(1, 12, SHADOW_SIZE_M) FOOTPRINT(Toxtricity) OVERWORLD( sPicTable_ToxtricityLowKey, @@ -3443,6 +3515,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ToxtricityGigantamax, .iconSprite = gMonIcon_ToxtricityGigantamax, .iconPalIndex = 0, + SHADOW(1, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Toxtricity) OVERWORLD( sPicTable_ToxtricityLowKey, @@ -3508,6 +3581,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Sizzlipede, .iconSprite = gMonIcon_Sizzlipede, .iconPalIndex = 0, + SHADOW(6, -4, SHADOW_SIZE_S) FOOTPRINT(Sizzlipede) OVERWORLD( sPicTable_Sizzlipede, @@ -3542,7 +3616,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG), .abilities = { ABILITY_FLASH_FIRE, ABILITY_WHITE_SMOKE, ABILITY_FLAME_BODY }, .bodyColor = BODY_COLOR_RED, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Centiskorc", "Centiskorch"), + .speciesName = _("Centiskorch"), .cryId = CRY_CENTISKORCH, .natDexNum = NATIONAL_DEX_CENTISKORCH, .categoryName = _("Radiator"), @@ -3570,6 +3644,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Centiskorch, .iconSprite = gMonIcon_Centiskorch, .iconPalIndex = 0, + SHADOW(-3, 7, SHADOW_SIZE_M) FOOTPRINT(Centiskorch) OVERWORLD( sPicTable_Centiskorch, @@ -3605,7 +3680,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_BUG), .abilities = { ABILITY_FLASH_FIRE, ABILITY_WHITE_SMOKE, ABILITY_FLAME_BODY }, .bodyColor = BODY_COLOR_RED, - .speciesName = _("Centiskorc"), + .speciesName = _("Centiskorch"), .cryId = CRY_CENTISKORCH, .natDexNum = NATIONAL_DEX_CENTISKORCH, .categoryName = _("Radiator"), @@ -3633,6 +3708,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CentiskorchGigantamax, .iconSprite = gMonIcon_CentiskorchGigantamax, .iconPalIndex = 0, + SHADOW(6, 9, SHADOW_SIZE_L) FOOTPRINT(Centiskorch) .isGigantamax = TRUE, .levelUpLearnset = sCentiskorchLevelUpLearnset, @@ -3691,6 +3767,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Clobbopus, .iconSprite = gMonIcon_Clobbopus, .iconPalIndex = 0, + SHADOW(1, -2, SHADOW_SIZE_S) FOOTPRINT(Clobbopus) OVERWORLD( sPicTable_Clobbopus, @@ -3752,6 +3829,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Grapploct, .iconSprite = gMonIcon_Grapploct, .iconPalIndex = 2, + SHADOW(4, 9, SHADOW_SIZE_M) FOOTPRINT(Grapploct) OVERWORLD( sPicTable_Grapploct, @@ -3814,6 +3892,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Sinistea, .iconSprite = gMonIcon_Sinistea, .iconPalIndex = 2, + SHADOW(3, 3, SHADOW_SIZE_S) FOOTPRINT(Sinistea) OVERWORLD( sPicTable_Sinistea, @@ -3877,6 +3956,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Sinistea, .iconSprite = gMonIcon_Sinistea, .iconPalIndex = 2, + SHADOW(3, 4, SHADOW_SIZE_S) FOOTPRINT(Sinistea) OVERWORLD( sPicTable_Sinistea, @@ -3911,7 +3991,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS), .abilities = { ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_CURSED_BODY }, .bodyColor = BODY_COLOR_PURPLE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Polteageis", "Polteageist"), + .speciesName = _("Polteageist"), .cryId = CRY_POLTEAGEIST, .natDexNum = NATIONAL_DEX_POLTEAGEIST, .categoryName = _("Black Tea"), @@ -3939,6 +4019,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Polteageist, .iconSprite = gMonIcon_Polteageist, .iconPalIndex = 2, + SHADOW(0, 12, SHADOW_SIZE_S) FOOTPRINT(Polteageist) OVERWORLD( sPicTable_Polteageist, @@ -3972,7 +4053,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS), .abilities = { ABILITY_WEAK_ARMOR, ABILITY_NONE, ABILITY_CURSED_BODY }, .bodyColor = BODY_COLOR_PURPLE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Polteageis", "Polteageist"), + .speciesName = _("Polteageist"), .cryId = CRY_POLTEAGEIST, .natDexNum = NATIONAL_DEX_POLTEAGEIST, .categoryName = _("Black Tea"), @@ -4001,6 +4082,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Polteageist, .iconSprite = gMonIcon_Polteageist, .iconPalIndex = 2, + SHADOW(0, 11, SHADOW_SIZE_S) FOOTPRINT(Polteageist) OVERWORLD( sPicTable_Polteageist, @@ -4064,6 +4146,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Hatenna, .iconSprite = gMonIcon_Hatenna, .iconPalIndex = 0, + SHADOW(0, 1, SHADOW_SIZE_M) FOOTPRINT(Hatenna) OVERWORLD( sPicTable_Hatenna, @@ -4125,6 +4208,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Hattrem, .iconSprite = gMonIcon_Hattrem, .iconPalIndex = 0, + SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Hattrem) OVERWORLD( sPicTable_Hattrem, @@ -4185,6 +4269,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Hatterene, .iconSprite = gMonIcon_Hatterene, .iconPalIndex = 0, + SHADOW(6, 13, SHADOW_SIZE_S) FOOTPRINT(Hatterene) OVERWORLD( sPicTable_Hatterene, @@ -4248,6 +4333,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_HattereneGigantamax, .iconSprite = gMonIcon_HattereneGigantamax, .iconPalIndex = 0, + SHADOW(-3, 13, SHADOW_SIZE_S) FOOTPRINT(Hatterene) .isGigantamax = TRUE, .levelUpLearnset = sHattereneLevelUpLearnset, @@ -4306,6 +4392,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Impidimp, .iconSprite = gMonIcon_Impidimp, .iconPalIndex = 0, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Impidimp) OVERWORLD( sPicTable_Impidimp, @@ -4367,6 +4454,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Morgrem, .iconSprite = gMonIcon_Morgrem, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Morgrem) OVERWORLD( sPicTable_Morgrem, @@ -4428,6 +4516,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Grimmsnarl, .iconSprite = gMonIcon_Grimmsnarl, .iconPalIndex = 0, + SHADOW(1, 11, SHADOW_SIZE_L) FOOTPRINT(Grimmsnarl) OVERWORLD( sPicTable_Grimmsnarl, @@ -4491,6 +4580,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_GrimmsnarlGigantamax, .iconSprite = gMonIcon_GrimmsnarlGigantamax, .iconPalIndex = 0, + SHADOW(0, 14, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Grimmsnarl) .isGigantamax = TRUE, .levelUpLearnset = sGrimmsnarlLevelUpLearnset, @@ -4549,6 +4639,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Milcery, .iconSprite = gMonIcon_Milcery, .iconPalIndex = 1, + SHADOW(0, 6, SHADOW_SIZE_S) FOOTPRINT(Milcery) OVERWORLD( sPicTable_Milcery, @@ -4618,6 +4709,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Alcremie ##sweet, \ .iconSprite = gMonIcon_AlcremieStrawberryVanillaCream, /*AlcremieStrawberry##cream##*/ \ .iconPalIndex = 1, \ + SHADOW(0, 5, SHADOW_SIZE_S) \ FOOTPRINT(Alcremie) \ OVERWORLD( \ sPicTable_AlcremieStrawberry, /*Alcremie ##sweet*/ \ @@ -4728,6 +4820,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_AlcremieGigantamax, .iconSprite = gMonIcon_AlcremieGigantamax, .iconPalIndex = 1, + SHADOW(0, 10, SHADOW_SIZE_L) FOOTPRINT(Alcremie) .isGigantamax = TRUE, .levelUpLearnset = sAlcremieLevelUpLearnset, @@ -4785,6 +4878,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Falinks, .iconSprite = gMonIcon_Falinks, .iconPalIndex = 0, + SHADOW(-7, 5, SHADOW_SIZE_S) FOOTPRINT(Falinks) OVERWORLD( sPicTable_Falinks, @@ -4846,6 +4940,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Pincurchin, .iconSprite = gMonIcon_Pincurchin, .iconPalIndex = 2, + SHADOW(-1, -4, SHADOW_SIZE_S) FOOTPRINT(Pincurchin) OVERWORLD( sPicTable_Pincurchin, @@ -4910,6 +5005,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Snom, .iconSprite = gMonIcon_Snom, .iconPalIndex = 0, + SHADOW(-2, -7, SHADOW_SIZE_S) FOOTPRINT(Snom) OVERWORLD( sPicTable_Snom, @@ -4973,6 +5069,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Frosmoth, .iconSprite = gMonIcon_Frosmoth, .iconPalIndex = 0, + SHADOW(-7, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Frosmoth) OVERWORLD( sPicTable_Frosmoth, @@ -5007,7 +5104,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL), .abilities = { ABILITY_POWER_SPOT, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_GRAY, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Stonjourne", "Stonjourner"), + .speciesName = _("Stonjourner"), .cryId = CRY_STONJOURNER, .natDexNum = NATIONAL_DEX_STONJOURNER, .categoryName = _("Big Rock"), @@ -5035,6 +5132,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Stonjourner, .iconSprite = gMonIcon_Stonjourner, .iconPalIndex = 2, + SHADOW(0, 10, SHADOW_SIZE_L) FOOTPRINT(Stonjourner) OVERWORLD( sPicTable_Stonjourner, @@ -5098,6 +5196,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_EiscueIceFace, .iconSprite = gMonIcon_EiscueIceFace, .iconPalIndex = 0, + SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Eiscue) OVERWORLD( sPicTable_EiscueIceFace, @@ -5161,6 +5260,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_EiscueNoiceFace, .iconSprite = gMonIcon_EiscueNoiceFace, .iconPalIndex = 0, + SHADOW(-1, 13, SHADOW_SIZE_S) FOOTPRINT(Eiscue) .levelUpLearnset = sEiscueLevelUpLearnset, .teachableLearnset = sEiscueTeachableLearnset, @@ -5218,6 +5318,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_IndeedeeMale, .iconSprite = gMonIcon_IndeedeeMale, .iconPalIndex = 2, + SHADOW(2, 4, SHADOW_SIZE_S) FOOTPRINT(Indeedee) OVERWORLD( sPicTable_IndeedeeMale, @@ -5279,7 +5380,16 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_IndeedeeFemale, .iconSprite = gMonIcon_IndeedeeFemale, .iconPalIndex = 2, + SHADOW(2, 4, SHADOW_SIZE_S) FOOTPRINT(Indeedee) + OVERWORLD( + sPicTable_IndeedeeFemale, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_IndeedeeFemale, + gShinyOverworldPalette_IndeedeeFemale + ) .levelUpLearnset = sIndeedeeFemaleLevelUpLearnset, .teachableLearnset = sIndeedeeFemaleTeachableLearnset, .eggMoveLearnset = sIndeedeeFemaleEggMoveLearnset, @@ -5335,6 +5445,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_MorpekoFullBelly, .iconSprite = gMonIcon_MorpekoFullBelly, .iconPalIndex = 2, + SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Morpeko) OVERWORLD( sPicTable_MorpekoFullBelly, @@ -5398,6 +5509,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_MorpekoHangry, .iconSprite = gMonIcon_MorpekoHangry, .iconPalIndex = 2, + SHADOW(0, 0, SHADOW_SIZE_S) FOOTPRINT(Morpeko) .levelUpLearnset = sMorpekoLevelUpLearnset, .teachableLearnset = sMorpekoTeachableLearnset, @@ -5456,6 +5568,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Cufant, .iconSprite = gMonIcon_Cufant, .iconPalIndex = 0, + SHADOW(5, 2, SHADOW_SIZE_M) FOOTPRINT(Cufant) OVERWORLD( sPicTable_Cufant, @@ -5518,6 +5631,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Copperajah, .iconSprite = gMonIcon_Copperajah, .iconPalIndex = 0, + SHADOW(6, 7, SHADOW_SIZE_L) FOOTPRINT(Copperajah) OVERWORLD( sPicTable_Copperajah, @@ -5582,6 +5696,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CopperajahGigantamax, .iconSprite = gMonIcon_CopperajahGigantamax, .iconPalIndex = 0, + SHADOW(0, 11, SHADOW_SIZE_L) FOOTPRINT(Copperajah) .isGigantamax = TRUE, .levelUpLearnset = sCopperajahLevelUpLearnset, @@ -5640,6 +5755,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Dracozolt, .iconSprite = gMonIcon_Dracozolt, .iconPalIndex = 1, + SHADOW(-4, 10, SHADOW_SIZE_L) FOOTPRINT(Dracozolt) OVERWORLD( sPicTable_Dracozolt, @@ -5701,6 +5817,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Arctozolt, .iconSprite = gMonIcon_Arctozolt, .iconPalIndex = 0, + SHADOW(-2, 11, SHADOW_SIZE_M) FOOTPRINT(Arctozolt) OVERWORLD( sPicTable_Arctozolt, @@ -5763,6 +5880,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Dracovish, .iconSprite = gMonIcon_Dracovish, .iconPalIndex = 0, + SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(Dracovish) OVERWORLD( sPicTable_Dracovish, @@ -5825,6 +5943,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Arctovish, .iconSprite = gMonIcon_Arctovish, .iconPalIndex = 0, + SHADOW(0, 11, SHADOW_SIZE_L) FOOTPRINT(Arctovish) OVERWORLD( sPicTable_Arctovish, @@ -5886,6 +6005,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Duraludon, .iconSprite = gMonIcon_Duraludon, .iconPalIndex = 0, + SHADOW(2, 11, SHADOW_SIZE_L) FOOTPRINT(Duraludon) OVERWORLD( sPicTable_Duraludon, @@ -5951,6 +6071,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_DuraludonGigantamax, .iconSprite = gMonIcon_DuraludonGigantamax, .iconPalIndex = 0, + SHADOW(3, 12, SHADOW_SIZE_L) FOOTPRINT(Duraludon) .isGigantamax = TRUE, .levelUpLearnset = sDuraludonLevelUpLearnset, @@ -6009,7 +6130,16 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Archaludon, .iconSprite = gMonIcon_Archaludon, .iconPalIndex = 0, + SHADOW(4, 14, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Archaludon) + OVERWORLD( + sPicTable_Archaludon, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Archaludon, + gShinyOverworldPalette_Archaludon + ) .levelUpLearnset = sArchaludonLevelUpLearnset, .teachableLearnset = sArchaludonTeachableLearnset, }, @@ -6065,6 +6195,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Dreepy, .iconSprite = gMonIcon_Dreepy, .iconPalIndex = 0, + SHADOW(0, 2, SHADOW_SIZE_S) FOOTPRINT(Dreepy) OVERWORLD( sPicTable_Dreepy, @@ -6127,6 +6258,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Drakloak, .iconSprite = gMonIcon_Drakloak, .iconPalIndex = 0, + SHADOW(0, 9, SHADOW_SIZE_M) FOOTPRINT(Drakloak) OVERWORLD( sPicTable_Drakloak, @@ -6189,6 +6321,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Dragapult, .iconSprite = gMonIcon_Dragapult, .iconPalIndex = 0, + SHADOW(0, 12, SHADOW_SIZE_M) FOOTPRINT(Dragapult) OVERWORLD( sPicTable_Dragapult, @@ -6250,6 +6383,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ZacianHeroOfManyBattles, .iconSprite = gMonIcon_ZacianHeroOfManyBattles, .iconPalIndex = 2, + SHADOW(-1, 9, SHADOW_SIZE_L) FOOTPRINT(Zacian) OVERWORLD( sPicTable_ZacianHeroOfManyBattles, @@ -6261,6 +6395,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZacianLevelUpLearnset, .teachableLearnset = sZacianTeachableLearnset, .formSpeciesIdTable = sZacianFormSpeciesIdTable, @@ -6314,6 +6449,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ZacianCrownedSword, .iconSprite = gMonIcon_ZacianCrownedSword, .iconPalIndex = 2, + SHADOW(-3, 12, SHADOW_SIZE_L) FOOTPRINT(Zacian) OVERWORLD( sPicTable_ZacianCrownedSword, @@ -6325,6 +6461,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZacianLevelUpLearnset, .teachableLearnset = sZacianTeachableLearnset, .formSpeciesIdTable = sZacianFormSpeciesIdTable, @@ -6380,6 +6517,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ZamazentaHeroOfManyBattles, .iconSprite = gMonIcon_ZamazentaHeroOfManyBattles, .iconPalIndex = 2, + SHADOW(-1, 12, SHADOW_SIZE_L) FOOTPRINT(Zamazenta) OVERWORLD( sPicTable_ZamazentaHeroOfManyBattles, @@ -6391,6 +6529,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZamazentaLevelUpLearnset, .teachableLearnset = sZamazentaTeachableLearnset, .formSpeciesIdTable = sZamazentaFormSpeciesIdTable, @@ -6444,6 +6583,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ZamazentaCrownedShield, .iconSprite = gMonIcon_ZamazentaCrownedShield, .iconPalIndex = 2, + SHADOW(0, 12, SHADOW_SIZE_L) FOOTPRINT(Zamazenta) OVERWORLD( sPicTable_ZamazentaCrownedShield, @@ -6455,6 +6595,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZamazentaLevelUpLearnset, .teachableLearnset = sZamazentaTeachableLearnset, .formSpeciesIdTable = sZamazentaFormSpeciesIdTable, @@ -6511,6 +6652,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Eternatus, .iconSprite = gMonIcon_Eternatus, .iconPalIndex = 0, + SHADOW(0, 14, SHADOW_SIZE_L) FOOTPRINT(Eternatus) OVERWORLD( sPicTable_Eternatus, @@ -6522,6 +6664,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sEternatusLevelUpLearnset, .teachableLearnset = sEternatusTeachableLearnset, .formSpeciesIdTable = sEternatusFormSpeciesIdTable, @@ -6575,9 +6718,11 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_EternatusEternamax, .iconSprite = gMonIcon_EternatusEternamax, .iconPalIndex = 0, + SHADOW(-3, 20, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Eternatus) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sEternatusLevelUpLearnset, .teachableLearnset = sEternatusTeachableLearnset, .formSpeciesIdTable = sEternatusFormSpeciesIdTable, @@ -6631,6 +6776,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Kubfu, .iconSprite = gMonIcon_Kubfu, .iconPalIndex = 1, + SHADOW(-2, 5, SHADOW_SIZE_S) FOOTPRINT(Kubfu) OVERWORLD( sPicTable_Kubfu, @@ -6641,6 +6787,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Kubfu ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKubfuLevelUpLearnset, .teachableLearnset = sKubfuTeachableLearnset, .evolutions = EVOLUTION({EVO_DARK_SCROLL, 0, SPECIES_URSHIFU_SINGLE_STRIKE_STYLE}, @@ -6696,6 +6843,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_UrshifuSingleStrikeStyle, .iconSprite = gMonIcon_Urshifu, .iconPalIndex = 2, + SHADOW(0, 14, SHADOW_SIZE_L) FOOTPRINT(Urshifu) OVERWORLD( sPicTable_Urshifu, @@ -6706,6 +6854,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Urshifu ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sUrshifuSingleStrikeStyleLevelUpLearnset, .teachableLearnset = sUrshifuSingleStrikeStyleTeachableLearnset, .formSpeciesIdTable = sUrshifuFormSpeciesIdTable, @@ -6760,9 +6909,11 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_UrshifuSingleStrikeStyleGigantamax, .iconSprite = gMonIcon_UrshifuSingleStrikeStyleGigantamax, .iconPalIndex = 0, + SHADOW(1, 13, SHADOW_SIZE_L) FOOTPRINT(Urshifu) .isLegendary = TRUE, .isGigantamax = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sUrshifuSingleStrikeStyleLevelUpLearnset, .teachableLearnset = sUrshifuSingleStrikeStyleTeachableLearnset, .formSpeciesIdTable = sUrshifuFormSpeciesIdTable, @@ -6816,6 +6967,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_UrshifuRapidStrikeStyle, .iconSprite = gMonIcon_Urshifu, .iconPalIndex = 2, + SHADOW(4, 14, SHADOW_SIZE_M) FOOTPRINT(Urshifu) OVERWORLD( sPicTable_Urshifu, @@ -6826,6 +6978,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Urshifu ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sUrshifuRapidStrikeStyleLevelUpLearnset, .teachableLearnset = sUrshifuRapidStrikeStyleTeachableLearnset, .formSpeciesIdTable = sUrshifuFormSpeciesIdTable, @@ -6880,9 +7033,11 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_UrshifuRapidStrikeStyleGigantamax, .iconSprite = gMonIcon_UrshifuRapidStrikeStyleGigantamax, .iconPalIndex = 0, + SHADOW(2, 13, SHADOW_SIZE_M) FOOTPRINT(Urshifu) .isLegendary = TRUE, .isGigantamax = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sUrshifuRapidStrikeStyleLevelUpLearnset, .teachableLearnset = sUrshifuRapidStrikeStyleTeachableLearnset, .formSpeciesIdTable = sUrshifuFormSpeciesIdTable, @@ -6939,6 +7094,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Zarude, .iconSprite = gMonIcon_Zarude, .iconPalIndex = 1, + SHADOW(5, 11, SHADOW_SIZE_L) FOOTPRINT(Zarude) OVERWORLD( sPicTable_Zarude, @@ -6950,6 +7106,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZarudeLevelUpLearnset, .teachableLearnset = sZarudeTeachableLearnset, .formSpeciesIdTable = sZarudeFormSpeciesIdTable, @@ -7001,9 +7158,11 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_ZarudeDada, .iconSprite = gMonIcon_ZarudeDada, .iconPalIndex = 1, + SHADOW(5, 11, SHADOW_SIZE_L) FOOTPRINT(Zarude) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sZarudeLevelUpLearnset, .teachableLearnset = sZarudeTeachableLearnset, .formSpeciesIdTable = sZarudeFormSpeciesIdTable, @@ -7059,6 +7218,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Regieleki, .iconSprite = gMonIcon_Regieleki, .iconPalIndex = 0, + SHADOW(-3, 14, SHADOW_SIZE_S) FOOTPRINT(Regieleki) OVERWORLD( sPicTable_Regieleki, @@ -7069,6 +7229,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Regieleki ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegielekiLevelUpLearnset, .teachableLearnset = sRegielekiTeachableLearnset, }, @@ -7123,6 +7284,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Regidrago, .iconSprite = gMonIcon_Regidrago, .iconPalIndex = 0, + SHADOW(0, 13, SHADOW_SIZE_M) FOOTPRINT(Regidrago) OVERWORLD( sPicTable_Regidrago, @@ -7133,6 +7295,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Regidrago ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sRegidragoLevelUpLearnset, .teachableLearnset = sRegidragoTeachableLearnset, }, @@ -7185,6 +7348,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Glastrier, .iconSprite = gMonIcon_Glastrier, .iconPalIndex = 0, + SHADOW(-5, 11, SHADOW_SIZE_L) FOOTPRINT(Glastrier) OVERWORLD( sPicTable_Glastrier, @@ -7195,6 +7359,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Glastrier ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sGlastrierLevelUpLearnset, .teachableLearnset = sGlastrierTeachableLearnset, }, @@ -7248,6 +7413,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Spectrier, .iconSprite = gMonIcon_Spectrier, .iconPalIndex = 0, + SHADOW(-6, 12, SHADOW_SIZE_L) FOOTPRINT(Spectrier) OVERWORLD( sPicTable_Spectrier, @@ -7258,6 +7424,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = gShinyOverworldPalette_Spectrier ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sSpectrierLevelUpLearnset, .teachableLearnset = sSpectrierTeachableLearnset, }, @@ -7311,6 +7478,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_Calyrex, .iconSprite = gMonIcon_Calyrex, .iconPalIndex = 0, + SHADOW(-1, 12, SHADOW_SIZE_S) FOOTPRINT(Calyrex) OVERWORLD( sPicTable_Calyrex, @@ -7322,6 +7490,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCalyrexLevelUpLearnset, .teachableLearnset = sCalyrexTeachableLearnset, .formSpeciesIdTable = sCalyrexFormSpeciesIdTable, @@ -7375,6 +7544,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CalyrexIceRider, .iconSprite = gMonIcon_CalyrexIceRider, .iconPalIndex = 0, + SHADOW(-5, 11, SHADOW_SIZE_L) FOOTPRINT(Calyrex) OVERWORLD( sPicTable_CalyrexIceRider, @@ -7387,6 +7557,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCalyrexIceRiderLevelUpLearnset, .teachableLearnset = sCalyrexIceRiderTeachableLearnset, .formSpeciesIdTable = sCalyrexFormSpeciesIdTable, @@ -7439,6 +7610,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_CalyrexShadowRider, .iconSprite = gMonIcon_CalyrexShadowRider, .iconPalIndex = 0, + SHADOW(-5, 12, SHADOW_SIZE_L) FOOTPRINT(Calyrex) OVERWORLD( sPicTable_CalyrexShadowRider, @@ -7451,6 +7623,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .isLegendary = TRUE, .cannotBeTraded = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sCalyrexShadowRiderLevelUpLearnset, .teachableLearnset = sCalyrexShadowRiderTeachableLearnset, .formSpeciesIdTable = sCalyrexFormSpeciesIdTable, @@ -7507,16 +7680,18 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_EnamorusIncarnate, .iconSprite = gMonIcon_EnamorusIncarnate, .iconPalIndex = 1, + SHADOW(0, 17, SHADOW_SIZE_M) FOOTPRINT(Enamorus) OVERWORLD( sPicTable_EnamorusIncarnate, SIZE_64x64, SHADOW_SIZE_M, - TRACKS_NONE - //, gOverworldPalette_EnamorusIncarnate - //, gShinyOverworldPalette_EnamorusIncarnate + TRACKS_NONE, + gOverworldPalette_EnamorusIncarnate, + gShinyOverworldPalette_EnamorusIncarnate ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sEnamorusLevelUpLearnset, .teachableLearnset = sEnamorusTeachableLearnset, .formSpeciesIdTable = sEnamorusFormSpeciesIdTable, @@ -7569,16 +7744,18 @@ const struct SpeciesInfo gSpeciesInfoGen8[] = .shinyPalette = gMonShinyPalette_EnamorusTherian, .iconSprite = gMonIcon_EnamorusTherian, .iconPalIndex = 1, + SHADOW(2, 8, SHADOW_SIZE_L) FOOTPRINT(Enamorus) OVERWORLD( sPicTable_EnamorusTherian, SIZE_64x64, SHADOW_SIZE_M, - TRACKS_NONE - //, gOverworldPalette_EnamorusTherian - //, gShinyOverworldPalette_EnamorusTherian + TRACKS_NONE, + gOverworldPalette_EnamorusTherian, + gShinyOverworldPalette_EnamorusTherian ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sEnamorusLevelUpLearnset, .teachableLearnset = sEnamorusTeachableLearnset, .formSpeciesIdTable = sEnamorusFormSpeciesIdTable, diff --git a/src/data/pokemon/species_info/gen_9_families.h b/src/data/pokemon/species_info/gen_9_families.h index 8880d3584d..922e57784b 100644 --- a/src/data/pokemon/species_info/gen_9_families.h +++ b/src/data/pokemon/species_info/gen_9_families.h @@ -51,7 +51,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Sprigatito, .iconSprite = gMonIcon_Sprigatito, .iconPalIndex = 1, + SHADOW(-2, 5, SHADOW_SIZE_S) FOOTPRINT(Sprigatito) + OVERWORLD( + sPicTable_Sprigatito, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_Sprigatito, + gShinyOverworldPalette_Sprigatito + ) .levelUpLearnset = sSprigatitoLevelUpLearnset, .teachableLearnset = sSprigatitoTeachableLearnset, .eggMoveLearnset = sSprigatitoEggMoveLearnset, @@ -105,7 +114,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Floragato, .iconSprite = gMonIcon_Floragato, .iconPalIndex = 1, + SHADOW(-3, 11, SHADOW_SIZE_M) FOOTPRINT(Floragato) + OVERWORLD( + sPicTable_Floragato, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_Floragato, + gShinyOverworldPalette_Floragato + ) .levelUpLearnset = sFloragatoLevelUpLearnset, .teachableLearnset = sFloragatoTeachableLearnset, .evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_MEOWSCARADA}), @@ -130,7 +148,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FIELD, EGG_GROUP_GRASS), .abilities = { ABILITY_OVERGROW, ABILITY_NONE, ABILITY_PROTEAN }, .bodyColor = BODY_COLOR_GREEN, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Meowscarad", "Meowscarada"), + .speciesName = _("Meowscarada"), .cryId = CRY_MEOWSCARADA, .natDexNum = NATIONAL_DEX_MEOWSCARADA, .categoryName = _("Magician"), @@ -158,7 +176,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Meowscarada, .iconSprite = gMonIcon_Meowscarada, .iconPalIndex = 1, + SHADOW(-3, 14, SHADOW_SIZE_S) FOOTPRINT(Meowscarada) + OVERWORLD( + sPicTable_Meowscarada, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Meowscarada, + gShinyOverworldPalette_Meowscarada + ) .levelUpLearnset = sMeowscaradaLevelUpLearnset, .teachableLearnset = sMeowscaradaTeachableLearnset, }, @@ -212,7 +239,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Fuecoco, .iconSprite = gMonIcon_Fuecoco, .iconPalIndex = 2, + SHADOW(-3, 5, SHADOW_SIZE_S) FOOTPRINT(Fuecoco) + OVERWORLD( + sPicTable_Fuecoco, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_Fuecoco, + gShinyOverworldPalette_Fuecoco + ) .levelUpLearnset = sFuecocoLevelUpLearnset, .teachableLearnset = sFuecocoTeachableLearnset, .eggMoveLearnset = sFuecocoEggMoveLearnset, @@ -266,7 +302,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Crocalor, .iconSprite = gMonIcon_Crocalor, .iconPalIndex = 0, + SHADOW(2, 8, SHADOW_SIZE_M) FOOTPRINT(Crocalor) + OVERWORLD( + sPicTable_Crocalor, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Crocalor, + gShinyOverworldPalette_Crocalor + ) .levelUpLearnset = sCrocalorLevelUpLearnset, .teachableLearnset = sCrocalorTeachableLearnset, .evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_SKELEDIRGE}), @@ -319,7 +364,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Skeledirge, .iconSprite = gMonIcon_Skeledirge, .iconPalIndex = 0, + SHADOW(6, 7, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Skeledirge) + OVERWORLD( + sPicTable_Skeledirge, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Skeledirge, + gShinyOverworldPalette_Skeledirge + ) .levelUpLearnset = sSkeledirgeLevelUpLearnset, .teachableLearnset = sSkeledirgeTeachableLearnset, }, @@ -373,7 +427,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Quaxly, .iconSprite = gMonIcon_Quaxly, .iconPalIndex = 0, + SHADOW(0, 5, SHADOW_SIZE_S) FOOTPRINT(Quaxly) + OVERWORLD( + sPicTable_Quaxly, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_Quaxly, + gShinyOverworldPalette_Quaxly + ) .levelUpLearnset = sQuaxlyLevelUpLearnset, .teachableLearnset = sQuaxlyTeachableLearnset, .eggMoveLearnset = sQuaxlyEggMoveLearnset, @@ -427,7 +490,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Quaxwell, .iconSprite = gMonIcon_Quaxwell, .iconPalIndex = 0, + SHADOW(1, 10, SHADOW_SIZE_S) FOOTPRINT(Quaxwell) + OVERWORLD( + sPicTable_Quaxwell, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Quaxwell, + gShinyOverworldPalette_Quaxwell + ) .levelUpLearnset = sQuaxwellLevelUpLearnset, .teachableLearnset = sQuaxwellTeachableLearnset, .evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_QUAQUAVAL}), @@ -480,7 +552,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Quaquaval, .iconSprite = gMonIcon_Quaquaval, .iconPalIndex = 0, + SHADOW(-7, 13, SHADOW_SIZE_M) FOOTPRINT(Quaquaval) + OVERWORLD( + sPicTable_Quaquaval, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Quaquaval, + gShinyOverworldPalette_Quaquaval + ) .levelUpLearnset = sQuaquavalLevelUpLearnset, .teachableLearnset = sQuaquavalTeachableLearnset, }, @@ -534,7 +615,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Lechonk, .iconSprite = gMonIcon_Lechonk, .iconPalIndex = 1, + SHADOW(0, 1, SHADOW_SIZE_S) FOOTPRINT(Lechonk) + OVERWORLD( + sPicTable_Lechonk, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_Lechonk, + gShinyOverworldPalette_Lechonk + ) .levelUpLearnset = sLechonkLevelUpLearnset, .teachableLearnset = sLechonkTeachableLearnset, .eggMoveLearnset = sLechonkEggMoveLearnset, @@ -588,7 +678,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_OinkologneMale, .iconSprite = gMonIcon_OinkologneMale, .iconPalIndex = 1, + SHADOW(-2, 6, SHADOW_SIZE_M) FOOTPRINT(Oinkologne) + OVERWORLD( + sPicTable_OinkologneMale, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_OinkologneMale, + gShinyOverworldPalette_OinkologneMale + ) .levelUpLearnset = sOinkologneMaleLevelUpLearnset, .teachableLearnset = sOinkologneTeachableLearnset, .formSpeciesIdTable = sOinkologneFormSpeciesIdTable, @@ -641,7 +740,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_OinkologneFemale, .iconSprite = gMonIcon_OinkologneFemale, .iconPalIndex = 0, + SHADOW(3, 7, SHADOW_SIZE_M) FOOTPRINT(Oinkologne) + OVERWORLD( + sPicTable_OinkologneFemale, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_OinkologneFemale, + gShinyOverworldPalette_OinkologneFemale + ) .levelUpLearnset = sOinkologneFemaleLevelUpLearnset, .teachableLearnset = sOinkologneTeachableLearnset, .formSpeciesIdTable = sOinkologneFormSpeciesIdTable, @@ -696,7 +804,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Tarountula, .iconSprite = gMonIcon_Tarountula, .iconPalIndex = 1, + SHADOW(-1, 2, SHADOW_SIZE_M) FOOTPRINT(Tarountula) + OVERWORLD( + sPicTable_Tarountula, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_BUG, + gOverworldPalette_Tarountula, + gShinyOverworldPalette_Tarountula + ) .levelUpLearnset = sTarountulaLevelUpLearnset, .teachableLearnset = sTarountulaTeachableLearnset, .eggMoveLearnset = sTarountulaEggMoveLearnset, @@ -750,7 +867,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Spidops, .iconSprite = gMonIcon_Spidops, .iconPalIndex = 1, + SHADOW(6, 8, SHADOW_SIZE_L) FOOTPRINT(Spidops) + OVERWORLD( + sPicTable_Spidops, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Spidops, + gShinyOverworldPalette_Spidops + ) .levelUpLearnset = sSpidopsLevelUpLearnset, .teachableLearnset = sSpidopsTeachableLearnset, }, @@ -804,7 +930,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Nymble, .iconSprite = gMonIcon_Nymble, .iconPalIndex = 0, + SHADOW(1, 3, SHADOW_SIZE_M) FOOTPRINT(Nymble) + OVERWORLD( + sPicTable_Nymble, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_BUG, + gOverworldPalette_Nymble, + gShinyOverworldPalette_Nymble + ) .levelUpLearnset = sNymbleLevelUpLearnset, .teachableLearnset = sNymbleTeachableLearnset, .eggMoveLearnset = sNymbleEggMoveLearnset, @@ -858,7 +993,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Lokix, .iconSprite = gMonIcon_Lokix, .iconPalIndex = 0, + SHADOW(0, 11, SHADOW_SIZE_M) FOOTPRINT(Lokix) + OVERWORLD( + sPicTable_Lokix, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Lokix, + gShinyOverworldPalette_Lokix + ) .levelUpLearnset = sLokixLevelUpLearnset, .teachableLearnset = sLokixTeachableLearnset, }, @@ -912,7 +1056,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Pawmi, .iconSprite = gMonIcon_Pawmi, .iconPalIndex = 0, + SHADOW(1, 4, SHADOW_SIZE_M) FOOTPRINT(Pawmi) + OVERWORLD( + sPicTable_Pawmi, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_Pawmi, + gShinyOverworldPalette_Pawmi + ) .levelUpLearnset = sPawmiLevelUpLearnset, .teachableLearnset = sPawmiTeachableLearnset, .eggMoveLearnset = sPawmiEggMoveLearnset, @@ -966,7 +1119,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Pawmo, .iconSprite = gMonIcon_Pawmo, .iconPalIndex = 0, + SHADOW(-3, 10, SHADOW_SIZE_S) FOOTPRINT(Pawmo) + OVERWORLD( + sPicTable_Pawmo, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_Pawmo, + gShinyOverworldPalette_Pawmo + ) .levelUpLearnset = sPawmoLevelUpLearnset, .teachableLearnset = sPawmoTeachableLearnset, .evolutions = EVOLUTION({EVO_OVERWORLD_STEPS, 1000, SPECIES_PAWMOT}), @@ -1019,7 +1181,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Pawmot, .iconSprite = gMonIcon_Pawmot, .iconPalIndex = 0, + SHADOW(-1, 11, SHADOW_SIZE_M) FOOTPRINT(Pawmot) + OVERWORLD( + sPicTable_Pawmot, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Pawmot, + gShinyOverworldPalette_Pawmot + ) .levelUpLearnset = sPawmotLevelUpLearnset, .teachableLearnset = sPawmotTeachableLearnset, }, @@ -1073,7 +1244,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Tandemaus, .iconSprite = gMonIcon_Tandemaus, .iconPalIndex = 1, + SHADOW(0, -1, SHADOW_SIZE_M) FOOTPRINT(Tandemaus) + OVERWORLD( + sPicTable_Tandemaus, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_Tandemaus, + gShinyOverworldPalette_Tandemaus + ) .levelUpLearnset = sTandemausLevelUpLearnset, .teachableLearnset = sTandemausTeachableLearnset, .eggMoveLearnset = sTandemausEggMoveLearnset, @@ -1128,7 +1308,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Maushold, .iconSprite = gMonIcon_MausholdFamilyOfThree, .iconPalIndex = 1, + SHADOW(4, -1, SHADOW_SIZE_L) FOOTPRINT(MausholdFamilyOfThree) + OVERWORLD( + sPicTable_MausholdFamilyOfThree, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_MausholdFamilyOfThree, + gShinyOverworldPalette_MausholdFamilyOfThree + ) .levelUpLearnset = sMausholdLevelUpLearnset, .teachableLearnset = sMausholdTeachableLearnset, .formSpeciesIdTable = sMausholdFormSpeciesIdTable, @@ -1180,7 +1369,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Maushold, .iconSprite = gMonIcon_MausholdFamilyOfFour, .iconPalIndex = 1, + SHADOW(0, -1, SHADOW_SIZE_L) FOOTPRINT(MausholdFamilyOfFour) + OVERWORLD( + sPicTable_MausholdFamilyOfFour, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_MausholdFamilyOfFour, + gShinyOverworldPalette_MausholdFamilyOfFour + ) .levelUpLearnset = sMausholdLevelUpLearnset, .teachableLearnset = sMausholdTeachableLearnset, .formSpeciesIdTable = sMausholdFormSpeciesIdTable, @@ -1235,7 +1433,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Fidough, .iconSprite = gMonIcon_Fidough, .iconPalIndex = 1, + SHADOW(4, 0, SHADOW_SIZE_S) FOOTPRINT(Fidough) + OVERWORLD( + sPicTable_Fidough, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_Fidough, + gShinyOverworldPalette_Fidough + ) .levelUpLearnset = sFidoughLevelUpLearnset, .teachableLearnset = sFidoughTeachableLearnset, .eggMoveLearnset = sFidoughEggMoveLearnset, @@ -1289,7 +1496,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Dachsbun, .iconSprite = gMonIcon_Dachsbun, .iconPalIndex = 0, + SHADOW(-1, 7, SHADOW_SIZE_L) FOOTPRINT(Dachsbun) + OVERWORLD( + sPicTable_Dachsbun, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Dachsbun, + gShinyOverworldPalette_Dachsbun + ) .levelUpLearnset = sDachsbunLevelUpLearnset, .teachableLearnset = sDachsbunTeachableLearnset, }, @@ -1343,7 +1559,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Smoliv, .iconSprite = gMonIcon_Smoliv, .iconPalIndex = 1, + SHADOW(-1, -2, SHADOW_SIZE_S) FOOTPRINT(Smoliv) + OVERWORLD( + sPicTable_Smoliv, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_Smoliv, + gShinyOverworldPalette_Smoliv + ) .levelUpLearnset = sSmolivLevelUpLearnset, .teachableLearnset = sSmolivTeachableLearnset, .eggMoveLearnset = sSmolivEggMoveLearnset, @@ -1397,7 +1622,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Dolliv, .iconSprite = gMonIcon_Dolliv, .iconPalIndex = 1, + SHADOW(1, 9, SHADOW_SIZE_M) FOOTPRINT(Dolliv) + OVERWORLD( + sPicTable_Dolliv, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_Dolliv, + gShinyOverworldPalette_Dolliv + ) .levelUpLearnset = sDollivLevelUpLearnset, .teachableLearnset = sDollivTeachableLearnset, .evolutions = EVOLUTION({EVO_LEVEL, 35, SPECIES_ARBOLIVA}), @@ -1450,7 +1684,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Arboliva, .iconSprite = gMonIcon_Arboliva, .iconPalIndex = 1, + SHADOW(1, 13, SHADOW_SIZE_L) FOOTPRINT(Arboliva) + OVERWORLD( + sPicTable_Arboliva, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Arboliva, + gShinyOverworldPalette_Arboliva + ) .levelUpLearnset = sArbolivaLevelUpLearnset, .teachableLearnset = sArbolivaTeachableLearnset, }, @@ -1476,7 +1719,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), .abilities = { ABILITY_INTIMIDATE, ABILITY_HUSTLE, ABILITY_GUTS }, .bodyColor = BODY_COLOR_GREEN, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Sqawkabily", "Squawkabilly"), + .speciesName = _("Squawkabilly"), .cryId = CRY_SQUAWKABILLY, .natDexNum = NATIONAL_DEX_SQUAWKABILLY, .categoryName = _("Parrot"), @@ -1504,7 +1747,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_SquawkabillyGreenPlumage, .iconSprite = gMonIcon_SquawkabillyGreenPlumage, .iconPalIndex = 1, + SHADOW(-6, 9, SHADOW_SIZE_M) FOOTPRINT(Squawkabilly) + OVERWORLD( + sPicTable_SquawkabillyGreenPlumage, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_NONE, + gOverworldPalette_SquawkabillyGreenPlumage, + gShinyOverworldPalette_SquawkabillyGreenPlumage + ) .levelUpLearnset = sSquawkabillyLevelUpLearnset, .teachableLearnset = sSquawkabillyTeachableLearnset, .eggMoveLearnset = sSquawkabillyEggMoveLearnset, @@ -1530,7 +1782,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), .abilities = { ABILITY_INTIMIDATE, ABILITY_HUSTLE, ABILITY_GUTS }, .bodyColor = BODY_COLOR_BLUE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Sqawkabily", "Squawkabilly"), + .speciesName = _("Squawkabilly"), .cryId = CRY_SQUAWKABILLY, .natDexNum = NATIONAL_DEX_SQUAWKABILLY, .categoryName = _("Parrot"), @@ -1558,7 +1810,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_SquawkabillyBluePlumage, .iconSprite = gMonIcon_SquawkabillyBluePlumage, .iconPalIndex = 0, + SHADOW(-6, 9, SHADOW_SIZE_M) FOOTPRINT(Squawkabilly) + OVERWORLD( + sPicTable_SquawkabillyBluePlumage, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_NONE, + gOverworldPalette_SquawkabillyBluePlumage, + gShinyOverworldPalette_SquawkabillyBluePlumage + ) .levelUpLearnset = sSquawkabillyLevelUpLearnset, .teachableLearnset = sSquawkabillyTeachableLearnset, .eggMoveLearnset = sSquawkabillyEggMoveLearnset, @@ -1584,7 +1845,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), .abilities = { ABILITY_INTIMIDATE, ABILITY_HUSTLE, ABILITY_SHEER_FORCE }, .bodyColor = BODY_COLOR_YELLOW, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Sqawkabily", "Squawkabilly"), + .speciesName = _("Squawkabilly"), .cryId = CRY_SQUAWKABILLY, .natDexNum = NATIONAL_DEX_SQUAWKABILLY, .categoryName = _("Parrot"), @@ -1612,7 +1873,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_SquawkabillyYellowPlumage, .iconSprite = gMonIcon_SquawkabillyYellowPlumage, .iconPalIndex = 1, + SHADOW(-6, 9, SHADOW_SIZE_M) FOOTPRINT(Squawkabilly) + OVERWORLD( + sPicTable_SquawkabillyYellowPlumage, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_NONE, + gOverworldPalette_SquawkabillyYellowPlumage, + gShinyOverworldPalette_SquawkabillyYellowPlumage + ) .levelUpLearnset = sSquawkabillyLevelUpLearnset, .teachableLearnset = sSquawkabillyTeachableLearnset, .eggMoveLearnset = sSquawkabillyEggMoveLearnset, @@ -1638,7 +1908,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING), .abilities = { ABILITY_INTIMIDATE, ABILITY_HUSTLE, ABILITY_SHEER_FORCE }, .bodyColor = BODY_COLOR_WHITE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Sqawkabily", "Squawkabilly"), + .speciesName = _("Squawkabilly"), .cryId = CRY_SQUAWKABILLY, .natDexNum = NATIONAL_DEX_SQUAWKABILLY, .categoryName = _("Parrot"), @@ -1666,7 +1936,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_SquawkabillyWhitePlumage, .iconSprite = gMonIcon_SquawkabillyWhitePlumage, .iconPalIndex = 0, + SHADOW(-6, 9, SHADOW_SIZE_M) FOOTPRINT(Squawkabilly) + OVERWORLD( + sPicTable_SquawkabillyWhitePlumage, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_NONE, + gOverworldPalette_SquawkabillyWhitePlumage, + gShinyOverworldPalette_SquawkabillyWhitePlumage + ) .levelUpLearnset = sSquawkabillyLevelUpLearnset, .teachableLearnset = sSquawkabillyTeachableLearnset, .eggMoveLearnset = sSquawkabillyEggMoveLearnset, @@ -1722,7 +2001,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Nacli, .iconSprite = gMonIcon_Nacli, .iconPalIndex = 2, + SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Nacli) + OVERWORLD( + sPicTable_Nacli, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_Nacli, + gShinyOverworldPalette_Nacli + ) .levelUpLearnset = sNacliLevelUpLearnset, .teachableLearnset = sNacliTeachableLearnset, .eggMoveLearnset = sNacliEggMoveLearnset, @@ -1765,7 +2053,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .trainerOffset = 0, .frontPic = gMonFrontPic_Naclstack, .frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicYOffset = 2, + .frontPicYOffset = 9, .frontAnimFrames = sAnims_Naclstack, //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, .backPic = gMonBackPic_Naclstack, @@ -1776,7 +2064,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Naclstack, .iconSprite = gMonIcon_Naclstack, .iconPalIndex = 2, + SHADOW(0, 5, SHADOW_SIZE_L) FOOTPRINT(Naclstack) + OVERWORLD( + sPicTable_Naclstack, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Naclstack, + gShinyOverworldPalette_Naclstack + ) .levelUpLearnset = sNaclstackLevelUpLearnset, .teachableLearnset = sNaclstackTeachableLearnset, .evolutions = EVOLUTION({EVO_LEVEL, 38, SPECIES_GARGANACL}), @@ -1818,18 +2115,27 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .trainerOffset = 0, .frontPic = gMonFrontPic_Garganacl, .frontPicSize = MON_COORDS_SIZE(64, 64), - .frontPicYOffset = 1, + .frontPicYOffset = 5, .frontAnimFrames = sAnims_Garganacl, //.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE, .backPic = gMonBackPic_Garganacl, .backPicSize = MON_COORDS_SIZE(64, 64), - .backPicYOffset = 2, + .backPicYOffset = 14, //.backAnimId = BACK_ANIM_NONE, .palette = gMonPalette_Garganacl, .shinyPalette = gMonShinyPalette_Garganacl, .iconSprite = gMonIcon_Garganacl, .iconPalIndex = 2, + SHADOW(0, 13, SHADOW_SIZE_L) FOOTPRINT(Garganacl) + OVERWORLD( + sPicTable_Garganacl, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Garganacl, + gShinyOverworldPalette_Garganacl + ) .levelUpLearnset = sGarganaclLevelUpLearnset, .teachableLearnset = sGarganaclTeachableLearnset, }, @@ -1883,7 +2189,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Charcadet, .iconSprite = gMonIcon_Charcadet, .iconPalIndex = 0, + SHADOW(-1, 5, SHADOW_SIZE_S) FOOTPRINT(Charcadet) + OVERWORLD( + sPicTable_Charcadet, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_Charcadet, + gShinyOverworldPalette_Charcadet + ) .levelUpLearnset = sCharcadetLevelUpLearnset, .teachableLearnset = sCharcadetTeachableLearnset, .eggMoveLearnset = sCharcadetEggMoveLearnset, @@ -1938,7 +2253,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Armarouge, .iconSprite = gMonIcon_Armarouge, .iconPalIndex = 0, + SHADOW(0, 14, SHADOW_SIZE_L) FOOTPRINT(Armarouge) + OVERWORLD( + sPicTable_Armarouge, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Armarouge, + gShinyOverworldPalette_Armarouge + ) .levelUpLearnset = sArmarougeLevelUpLearnset, .teachableLearnset = sArmarougeTeachableLearnset, }, @@ -1990,7 +2314,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Ceruledge, .iconSprite = gMonIcon_Ceruledge, .iconPalIndex = 2, + SHADOW(9, 14, SHADOW_SIZE_L) FOOTPRINT(Ceruledge) + OVERWORLD( + sPicTable_Ceruledge, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Ceruledge, + gShinyOverworldPalette_Ceruledge + ) .levelUpLearnset = sCeruledgeLevelUpLearnset, .teachableLearnset = sCeruledgeTeachableLearnset, }, @@ -2045,7 +2378,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Tadbulb, .iconSprite = gMonIcon_Tadbulb, .iconPalIndex = 0, + SHADOW(0, 19, SHADOW_SIZE_S) FOOTPRINT(Tadbulb) + OVERWORLD( + sPicTable_Tadbulb, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_NONE, + gOverworldPalette_Tadbulb, + gShinyOverworldPalette_Tadbulb + ) .levelUpLearnset = sTadbulbLevelUpLearnset, .teachableLearnset = sTadbulbTeachableLearnset, .eggMoveLearnset = sTadbulbEggMoveLearnset, @@ -2099,7 +2441,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Bellibolt, .iconSprite = gMonIcon_Bellibolt, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(Bellibolt) + OVERWORLD( + sPicTable_Bellibolt, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Bellibolt, + gShinyOverworldPalette_Bellibolt + ) .levelUpLearnset = sBelliboltLevelUpLearnset, .teachableLearnset = sBelliboltTeachableLearnset, }, @@ -2153,7 +2504,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Wattrel, .iconSprite = gMonIcon_Wattrel, .iconPalIndex = 0, + SHADOW(-3, 0, SHADOW_SIZE_S) FOOTPRINT(Wattrel) + OVERWORLD( + sPicTable_Wattrel, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_NONE, + gOverworldPalette_Wattrel, + gShinyOverworldPalette_Wattrel + ) .levelUpLearnset = sWattrelLevelUpLearnset, .teachableLearnset = sWattrelTeachableLearnset, .eggMoveLearnset = sWattrelEggMoveLearnset, @@ -2179,7 +2539,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_WATER_1, EGG_GROUP_FLYING), .abilities = { ABILITY_WIND_POWER, ABILITY_VOLT_ABSORB, ABILITY_COMPETITIVE }, .bodyColor = BODY_COLOR_YELLOW, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Kilowatrel", "Kilowattrel"), + .speciesName = _("Kilowattrel"), .cryId = CRY_KILOWATTREL, .natDexNum = NATIONAL_DEX_KILOWATTREL, .categoryName = _("Frigatebird"), @@ -2207,7 +2567,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Kilowattrel, .iconSprite = gMonIcon_Kilowattrel, .iconPalIndex = 0, + SHADOW(-6, 6, SHADOW_SIZE_M) FOOTPRINT(Kilowattrel) + OVERWORLD( + sPicTable_Kilowattrel, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_NONE, + gOverworldPalette_Kilowattrel, + gShinyOverworldPalette_Kilowattrel + ) .levelUpLearnset = sKilowattrelLevelUpLearnset, .teachableLearnset = sKilowattrelTeachableLearnset, }, @@ -2261,7 +2630,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Maschiff, .iconSprite = gMonIcon_Maschiff, .iconPalIndex = 0, + SHADOW(2, 5, SHADOW_SIZE_L) FOOTPRINT(Maschiff) + OVERWORLD( + sPicTable_Maschiff, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_Maschiff, + gShinyOverworldPalette_Maschiff + ) .levelUpLearnset = sMaschiffLevelUpLearnset, .teachableLearnset = sMaschiffTeachableLearnset, .eggMoveLearnset = sMaschiffEggMoveLearnset, @@ -2315,7 +2693,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Mabosstiff, .iconSprite = gMonIcon_Mabosstiff, .iconPalIndex = 0, + SHADOW(1, 5, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Mabosstiff) + OVERWORLD( + sPicTable_Mabosstiff, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Mabosstiff, + gShinyOverworldPalette_Mabosstiff + ) .levelUpLearnset = sMabosstiffLevelUpLearnset, .teachableLearnset = sMabosstiffTeachableLearnset, }, @@ -2369,7 +2756,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Shroodle, .iconSprite = gMonIcon_Shroodle, .iconPalIndex = 0, + SHADOW(0, -6, SHADOW_SIZE_S) FOOTPRINT(Shroodle) + OVERWORLD( + sPicTable_Shroodle, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_BUG, + gOverworldPalette_Shroodle, + gShinyOverworldPalette_Shroodle + ) .levelUpLearnset = sShroodleLevelUpLearnset, .teachableLearnset = sShroodleTeachableLearnset, .eggMoveLearnset = sShroodleEggMoveLearnset, @@ -2423,7 +2819,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Grafaiai, .iconSprite = gMonIcon_Grafaiai, .iconPalIndex = 0, + SHADOW(-2, 5, SHADOW_SIZE_S) FOOTPRINT(Grafaiai) + OVERWORLD( + sPicTable_Grafaiai, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Grafaiai, + gShinyOverworldPalette_Grafaiai + ) .levelUpLearnset = sGrafaiaiLevelUpLearnset, .teachableLearnset = sGrafaiaiTeachableLearnset, }, @@ -2477,7 +2882,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Bramblin, .iconSprite = gMonIcon_Bramblin, .iconPalIndex = 1, + SHADOW(2, 0, SHADOW_SIZE_S) FOOTPRINT(Bramblin) + OVERWORLD( + sPicTable_Bramblin, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_NONE, + gOverworldPalette_Bramblin, + gShinyOverworldPalette_Bramblin + ) .levelUpLearnset = sBramblinLevelUpLearnset, .teachableLearnset = sBramblinTeachableLearnset, .eggMoveLearnset = sBramblinEggMoveLearnset, @@ -2503,7 +2917,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_GRASS), .abilities = { ABILITY_WIND_RIDER, ABILITY_NONE, ABILITY_INFILTRATOR }, .bodyColor = BODY_COLOR_BROWN, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Brmblghast", "Brambleghast"), + .speciesName = _("Brambleghast"), .cryId = CRY_BRAMBLEGHAST, .natDexNum = NATIONAL_DEX_BRAMBLEGHAST, .categoryName = _("Tumbleweed"), @@ -2531,7 +2945,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Brambleghast, .iconSprite = gMonIcon_Brambleghast, .iconPalIndex = 2, + SHADOW(0, 6, SHADOW_SIZE_M) FOOTPRINT(Brambleghast) + OVERWORLD( + sPicTable_Brambleghast, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_NONE, + gOverworldPalette_Brambleghast, + gShinyOverworldPalette_Brambleghast + ) .levelUpLearnset = sBrambleghastLevelUpLearnset, .teachableLearnset = sBrambleghastTeachableLearnset, }, @@ -2587,7 +3010,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Toedscool, .iconSprite = gMonIcon_Toedscool, .iconPalIndex = 0, + SHADOW(-2, 10, SHADOW_SIZE_M) FOOTPRINT(Toedscool) + OVERWORLD( + sPicTable_Toedscool, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_Toedscool, + gShinyOverworldPalette_Toedscool + ) .levelUpLearnset = sToedscoolLevelUpLearnset, .teachableLearnset = sToedscoolTeachableLearnset, .eggMoveLearnset = sToedscoolEggMoveLearnset, @@ -2643,7 +3075,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Toedscruel, .iconSprite = gMonIcon_Toedscruel, .iconPalIndex = 0, + SHADOW(2, 8, SHADOW_SIZE_L) FOOTPRINT(Toedscruel) + OVERWORLD( + sPicTable_Toedscruel, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Toedscruel, + gShinyOverworldPalette_Toedscruel + ) .levelUpLearnset = sToedscruelLevelUpLearnset, .teachableLearnset = sToedscruelTeachableLearnset, }, @@ -2697,7 +3138,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Klawf, .iconSprite = gMonIcon_Klawf, .iconPalIndex = 0, + SHADOW(0, 0, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Klawf) + OVERWORLD( + sPicTable_Klawf, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Klawf, + gShinyOverworldPalette_Klawf + ) .levelUpLearnset = sKlawfLevelUpLearnset, .teachableLearnset = sKlawfTeachableLearnset, .eggMoveLearnset = sKlawfEggMoveLearnset, @@ -2752,7 +3202,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Capsakid, .iconSprite = gMonIcon_Capsakid, .iconPalIndex = 1, + SHADOW(2, 0, SHADOW_SIZE_S) FOOTPRINT(Capsakid) + OVERWORLD( + sPicTable_Capsakid, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_Capsakid, + gShinyOverworldPalette_Capsakid + ) .levelUpLearnset = sCapsakidLevelUpLearnset, .teachableLearnset = sCapsakidTeachableLearnset, .eggMoveLearnset = sCapsakidEggMoveLearnset, @@ -2806,7 +3265,17 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Scovillain, .iconSprite = gMonIcon_Scovillain, .iconPalIndex = 1, + SHADOW(6, 11, SHADOW_SIZE_M) FOOTPRINT(Scovillain) + OVERWORLD( + sPicTable_Scovillain, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + //sAnimTable_Following_Asym, + gOverworldPalette_Scovillain, + gShinyOverworldPalette_Scovillain + ) .levelUpLearnset = sScovillainLevelUpLearnset, .teachableLearnset = sScovillainTeachableLearnset, }, @@ -2860,7 +3329,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Rellor, .iconSprite = gMonIcon_Rellor, .iconPalIndex = 0, + SHADOW(4, -3, SHADOW_SIZE_L) FOOTPRINT(Rellor) + OVERWORLD( + sPicTable_Rellor, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_BUG, + gOverworldPalette_Rellor, + gShinyOverworldPalette_Rellor + ) .levelUpLearnset = sRellorLevelUpLearnset, .teachableLearnset = sRellorTeachableLearnset, .eggMoveLearnset = sRellorEggMoveLearnset, @@ -2914,7 +3392,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Rabsca, .iconSprite = gMonIcon_Rabsca, .iconPalIndex = 0, + SHADOW(-2, 14, SHADOW_SIZE_M) FOOTPRINT(Rabsca) + OVERWORLD( + sPicTable_Rabsca, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_NONE, + gOverworldPalette_Rabsca, + gShinyOverworldPalette_Rabsca + ) .levelUpLearnset = sRabscaLevelUpLearnset, .teachableLearnset = sRabscaTeachableLearnset, }, @@ -2968,7 +3455,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Flittle, .iconSprite = gMonIcon_Flittle, .iconPalIndex = 1, + SHADOW(-2, 2, SHADOW_SIZE_S) FOOTPRINT(Flittle) + OVERWORLD( + sPicTable_Flittle, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_NONE, + gOverworldPalette_Flittle, + gShinyOverworldPalette_Flittle + ) .levelUpLearnset = sFlittleLevelUpLearnset, .teachableLearnset = sFlittleTeachableLearnset, .eggMoveLearnset = sFlittleEggMoveLearnset, @@ -3022,7 +3518,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Espathra, .iconSprite = gMonIcon_Espathra, .iconPalIndex = 0, + SHADOW(-5, 10, SHADOW_SIZE_M) FOOTPRINT(Espathra) + OVERWORLD( + sPicTable_Espathra, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Espathra, + gShinyOverworldPalette_Espathra + ) .levelUpLearnset = sEspathraLevelUpLearnset, .teachableLearnset = sEspathraTeachableLearnset, }, @@ -3076,7 +3581,17 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Tinkatink, .iconSprite = gMonIcon_Tinkatink, .iconPalIndex = 1, + SHADOW(-3, 1, SHADOW_SIZE_S) FOOTPRINT(Tinkatink) + OVERWORLD( + sPicTable_Tinkatink, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + //sAnimTable_Following_Asym, + gOverworldPalette_Tinkatink, + gShinyOverworldPalette_Tinkatink + ) .levelUpLearnset = sTinkatinkLevelUpLearnset, .teachableLearnset = sTinkatinkTeachableLearnset, .eggMoveLearnset = sTinkatinkEggMoveLearnset, @@ -3130,7 +3645,17 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Tinkatuff, .iconSprite = gMonIcon_Tinkatuff, .iconPalIndex = 1, + SHADOW(-4, 5, SHADOW_SIZE_L) FOOTPRINT(Tinkatuff) + OVERWORLD( + sPicTable_Tinkatuff, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + //sAnimTable_Following_Asym, + gOverworldPalette_Tinkatuff, + gShinyOverworldPalette_Tinkatuff + ) .levelUpLearnset = sTinkatuffLevelUpLearnset, .teachableLearnset = sTinkatuffTeachableLearnset, .evolutions = EVOLUTION({EVO_LEVEL, 38, SPECIES_TINKATON}), @@ -3183,7 +3708,17 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Tinkaton, .iconSprite = gMonIcon_Tinkaton, .iconPalIndex = 1, + SHADOW(-5, 15, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Tinkaton) + OVERWORLD( + sPicTable_Tinkaton, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + //sAnimTable_Following_Asym, + gOverworldPalette_Tinkaton, + gShinyOverworldPalette_Tinkaton + ) .levelUpLearnset = sTinkatonLevelUpLearnset, .teachableLearnset = sTinkatonTeachableLearnset, }, @@ -3236,7 +3771,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Wiglett, .iconSprite = gMonIcon_Wiglett, .iconPalIndex = 0, + NO_SHADOW FOOTPRINT(Wiglett) + OVERWORLD( + sPicTable_Wiglett, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_SLITHER, + gOverworldPalette_Wiglett, + gShinyOverworldPalette_Wiglett + ) .levelUpLearnset = sWiglettLevelUpLearnset, .teachableLearnset = sWiglettTeachableLearnset, .eggMoveLearnset = sWiglettEggMoveLearnset, @@ -3289,7 +3833,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Wugtrio, .iconSprite = gMonIcon_Wugtrio, .iconPalIndex = 0, + NO_SHADOW FOOTPRINT(Wugtrio) + OVERWORLD( + sPicTable_Wugtrio, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_SLITHER, + gOverworldPalette_Wugtrio, + gShinyOverworldPalette_Wugtrio + ) .levelUpLearnset = sWugtrioLevelUpLearnset, .teachableLearnset = sWugtrioTeachableLearnset, }, @@ -3344,7 +3897,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Bombirdier, .iconSprite = gMonIcon_Bombirdier, .iconPalIndex = 0, + SHADOW(1, 18, SHADOW_SIZE_M) FOOTPRINT(Bombirdier) + OVERWORLD( + sPicTable_Bombirdier, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_NONE, + gOverworldPalette_Bombirdier, + gShinyOverworldPalette_Bombirdier + ) .levelUpLearnset = sBombirdierLevelUpLearnset, .teachableLearnset = sBombirdierTeachableLearnset, .eggMoveLearnset = sBombirdierEggMoveLearnset, @@ -3398,7 +3960,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Finizen, .iconSprite = gMonIcon_Finizen, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Finizen) + OVERWORLD( + sPicTable_Finizen, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_NONE, + gOverworldPalette_Finizen, + gShinyOverworldPalette_Finizen + ) .levelUpLearnset = sFinizenLevelUpLearnset, .teachableLearnset = sFinizenTeachableLearnset, .eggMoveLearnset = sFinizenEggMoveLearnset, @@ -3452,7 +4023,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_PalafinZero, .iconSprite = gMonIcon_PalafinZero, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Palafin) + OVERWORLD( + sPicTable_PalafinZero, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_NONE, + gOverworldPalette_PalafinZero, + gShinyOverworldPalette_PalafinZero + ) .levelUpLearnset = sPalafinLevelUpLearnset, .teachableLearnset = sPalafinTeachableLearnset, .formSpeciesIdTable = sPalafinFormSpeciesIdTable, @@ -3506,7 +4086,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_PalafinHero, .iconSprite = gMonIcon_PalafinHero, .iconPalIndex = 0, + SHADOW(1, 13, SHADOW_SIZE_M) FOOTPRINT(Palafin) + OVERWORLD( + sPicTable_PalafinHero, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_PalafinHero, + gShinyOverworldPalette_PalafinHero + ) .levelUpLearnset = sPalafinLevelUpLearnset, .teachableLearnset = sPalafinTeachableLearnset, .formSpeciesIdTable = sPalafinFormSpeciesIdTable, @@ -3562,7 +4151,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Varoom, .iconSprite = gMonIcon_Varoom, .iconPalIndex = 2, + SHADOW(0, 0, SHADOW_SIZE_M) FOOTPRINT(Varoom) + OVERWORLD( + sPicTable_Varoom, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_NONE, + gOverworldPalette_Varoom, + gShinyOverworldPalette_Varoom + ) .levelUpLearnset = sVaroomLevelUpLearnset, .teachableLearnset = sVaroomTeachableLearnset, .eggMoveLearnset = sVaroomEggMoveLearnset, @@ -3616,7 +4214,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Revavroom, .iconSprite = gMonIcon_Revavroom, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_L) FOOTPRINT(Revavroom) + OVERWORLD( + sPicTable_Revavroom, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_NONE, + gOverworldPalette_Revavroom, + gShinyOverworldPalette_Revavroom + ) .levelUpLearnset = sRevavroomLevelUpLearnset, .teachableLearnset = sRevavroomTeachableLearnset, }, @@ -3670,7 +4277,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Cyclizar, .iconSprite = gMonIcon_Cyclizar, .iconPalIndex = 1, + SHADOW(-1, 9, SHADOW_SIZE_M) FOOTPRINT(Cyclizar) + OVERWORLD( + sPicTable_Cyclizar, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Cyclizar, + gShinyOverworldPalette_Cyclizar + ) .levelUpLearnset = sCyclizarLevelUpLearnset, .teachableLearnset = sCyclizarTeachableLearnset, .eggMoveLearnset = sCyclizarEggMoveLearnset, @@ -3725,7 +4341,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Orthworm, .iconSprite = gMonIcon_Orthworm, .iconPalIndex = 0, + SHADOW(6, 10, SHADOW_SIZE_L) FOOTPRINT(Orthworm) + OVERWORLD( + sPicTable_Orthworm, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_SLITHER, + gOverworldPalette_Orthworm, + gShinyOverworldPalette_Orthworm + ) .levelUpLearnset = sOrthwormLevelUpLearnset, .teachableLearnset = sOrthwormTeachableLearnset, .eggMoveLearnset = sOrthwormEggMoveLearnset, @@ -3781,7 +4406,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Glimmet, .iconSprite = gMonIcon_Glimmet, .iconPalIndex = 0, + SHADOW(-2, 6, SHADOW_SIZE_S) FOOTPRINT(Glimmet) + OVERWORLD( + sPicTable_Glimmet, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_NONE, + gOverworldPalette_Glimmet, + gShinyOverworldPalette_Glimmet + ) .levelUpLearnset = sGlimmetLevelUpLearnset, .teachableLearnset = sGlimmetTeachableLearnset, .eggMoveLearnset = sGlimmetEggMoveLearnset, @@ -3836,7 +4470,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Glimmora, .iconSprite = gMonIcon_Glimmora, .iconPalIndex = 0, + SHADOW(-3, 17, SHADOW_SIZE_M) FOOTPRINT(Glimmora) + OVERWORLD( + sPicTable_Glimmora, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_NONE, + gOverworldPalette_Glimmora, + gShinyOverworldPalette_Glimmora + ) .levelUpLearnset = sGlimmoraLevelUpLearnset, .teachableLearnset = sGlimmoraTeachableLearnset, }, @@ -3890,7 +4533,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Greavard, .iconSprite = gMonIcon_Greavard, .iconPalIndex = 0, + SHADOW(3, 2, SHADOW_SIZE_M) FOOTPRINT(Greavard) + OVERWORLD( + sPicTable_Greavard, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_Greavard, + gShinyOverworldPalette_Greavard + ) .levelUpLearnset = sGreavardLevelUpLearnset, .teachableLearnset = sGreavardTeachableLearnset, .eggMoveLearnset = sGreavardEggMoveLearnset, @@ -3944,7 +4596,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Houndstone, .iconSprite = gMonIcon_Houndstone, .iconPalIndex = 2, + SHADOW(4, 6, SHADOW_SIZE_L) FOOTPRINT(Houndstone) + OVERWORLD( + sPicTable_Houndstone, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Houndstone, + gShinyOverworldPalette_Houndstone + ) .levelUpLearnset = sHoundstoneLevelUpLearnset, .teachableLearnset = sHoundstoneTeachableLearnset, }, @@ -3998,7 +4659,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Flamigo, .iconSprite = gMonIcon_Flamigo, .iconPalIndex = 1, + SHADOW(0, 12, SHADOW_SIZE_S) FOOTPRINT(Flamigo) + OVERWORLD( + sPicTable_Flamigo, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_Flamigo, + gShinyOverworldPalette_Flamigo + ) .levelUpLearnset = sFlamigoLevelUpLearnset, .teachableLearnset = sFlamigoTeachableLearnset, .eggMoveLearnset = sFlamigoEggMoveLearnset, @@ -4053,7 +4723,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Cetoddle, .iconSprite = gMonIcon_Cetoddle, .iconPalIndex = 0, + SHADOW(2, 0, SHADOW_SIZE_M) FOOTPRINT(Cetoddle) + OVERWORLD( + sPicTable_Cetoddle, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_Cetoddle, + gShinyOverworldPalette_Cetoddle + ) .levelUpLearnset = sCetoddleLevelUpLearnset, .teachableLearnset = sCetoddleTeachableLearnset, .eggMoveLearnset = sCetoddleEggMoveLearnset, @@ -4107,7 +4786,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Cetitan, .iconSprite = gMonIcon_Cetitan, .iconPalIndex = 0, + SHADOW(-1, 10, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Cetitan) + OVERWORLD( + sPicTable_Cetitan, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Cetitan, + gShinyOverworldPalette_Cetitan + ) .levelUpLearnset = sCetitanLevelUpLearnset, .teachableLearnset = sCetitanTeachableLearnset, }, @@ -4162,7 +4850,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Veluza, .iconSprite = gMonIcon_Veluza, .iconPalIndex = 1, + SHADOW(0, 5, SHADOW_SIZE_M) FOOTPRINT(Veluza) + OVERWORLD( + sPicTable_Veluza, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_NONE, + gOverworldPalette_Veluza, + gShinyOverworldPalette_Veluza + ) .levelUpLearnset = sVeluzaLevelUpLearnset, .teachableLearnset = sVeluzaTeachableLearnset, .eggMoveLearnset = sVeluzaEggMoveLearnset, @@ -4218,7 +4915,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Dondozo, .iconSprite = gMonIcon_Dondozo, .iconPalIndex = 0, + SHADOW(-1, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Dondozo) + OVERWORLD( + sPicTable_Dondozo, + SIZE_64x64, + SHADOW_SIZE_L, + TRACKS_NONE, + gOverworldPalette_Dondozo, + gShinyOverworldPalette_Dondozo + ) .levelUpLearnset = sDondozoLevelUpLearnset, .teachableLearnset = sDondozoTeachableLearnset, .eggMoveLearnset = sDondozoEggMoveLearnset, @@ -4273,7 +4979,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_TatsugiriCurly, .iconSprite = gMonIcon_TatsugiriCurly, .iconPalIndex = 0, + SHADOW(-2, -1, SHADOW_SIZE_S) FOOTPRINT(Tatsugiri) + OVERWORLD( + sPicTable_TatsugiriCurly, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_SLITHER, + gOverworldPalette_TatsugiriCurly, + gShinyOverworldPalette_TatsugiriCurly + ) .levelUpLearnset = sTatsugiriLevelUpLearnset, .teachableLearnset = sTatsugiriTeachableLearnset, .eggMoveLearnset = sTatsugiriEggMoveLearnset, @@ -4326,7 +5041,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_TatsugiriDroopy, .iconSprite = gMonIcon_TatsugiriDroopy, .iconPalIndex = 0, + SHADOW(-2, -1, SHADOW_SIZE_S) FOOTPRINT(Tatsugiri) + OVERWORLD( + sPicTable_TatsugiriDroopy, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_SLITHER, + gOverworldPalette_TatsugiriDroopy, + gShinyOverworldPalette_TatsugiriDroopy + ) .levelUpLearnset = sTatsugiriLevelUpLearnset, .teachableLearnset = sTatsugiriTeachableLearnset, .eggMoveLearnset = sTatsugiriEggMoveLearnset, @@ -4379,7 +5103,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_TatsugiriStretchy, .iconSprite = gMonIcon_TatsugiriStretchy, .iconPalIndex = 0, + SHADOW(-2, -1, SHADOW_SIZE_S) FOOTPRINT(Tatsugiri) + OVERWORLD( + sPicTable_TatsugiriStretchy, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_SLITHER, + gOverworldPalette_TatsugiriStretchy, + gShinyOverworldPalette_TatsugiriStretchy + ) .levelUpLearnset = sTatsugiriLevelUpLearnset, .teachableLearnset = sTatsugiriTeachableLearnset, .eggMoveLearnset = sTatsugiriEggMoveLearnset, @@ -4436,7 +5169,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_GreatTusk, .iconSprite = gMonIcon_GreatTusk, .iconPalIndex = 0, + SHADOW(3, 6, SHADOW_SIZE_L) FOOTPRINT(GreatTusk) + OVERWORLD( + sPicTable_GreatTusk, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_GreatTusk, + gShinyOverworldPalette_GreatTusk + ) .isParadox = TRUE, .levelUpLearnset = sGreatTuskLevelUpLearnset, .teachableLearnset = sGreatTuskTeachableLearnset, @@ -4464,7 +5206,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_PROTOSYNTHESIS, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_PINK, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("ScreamTail", "Scream Tail"), + .speciesName = _("Scream Tail"), .cryId = CRY_SCREAM_TAIL, .natDexNum = NATIONAL_DEX_SCREAM_TAIL, .categoryName = _("Paradox"), @@ -4492,7 +5234,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_ScreamTail, .iconSprite = gMonIcon_ScreamTail, .iconPalIndex = 0, + SHADOW(0, 3, SHADOW_SIZE_L) FOOTPRINT(ScreamTail) + OVERWORLD( + sPicTable_ScreamTail, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_ScreamTail, + gShinyOverworldPalette_ScreamTail + ) .isParadox = TRUE, .levelUpLearnset = sScreamTailLevelUpLearnset, .teachableLearnset = sScreamTailTeachableLearnset, @@ -4520,7 +5271,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_PROTOSYNTHESIS, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_WHITE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("BruteBonet", "Brute Bonnet"), + .speciesName = _("Brute Bonnet"), .cryId = CRY_BRUTE_BONNET, .natDexNum = NATIONAL_DEX_BRUTE_BONNET, .categoryName = _("Paradox"), @@ -4548,7 +5299,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_BruteBonnet, .iconSprite = gMonIcon_BruteBonnet, .iconPalIndex = 1, + SHADOW(2, 7, SHADOW_SIZE_L) FOOTPRINT(BruteBonnet) + OVERWORLD( + sPicTable_BruteBonnet, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_BruteBonnet, + gShinyOverworldPalette_BruteBonnet + ) .isParadox = TRUE, .levelUpLearnset = sBruteBonnetLevelUpLearnset, .teachableLearnset = sBruteBonnetTeachableLearnset, @@ -4578,7 +5338,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_PROTOSYNTHESIS, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_GRAY, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("FluttrMane", "Flutter Mane"), + .speciesName = _("Flutter Mane"), .cryId = CRY_FLUTTER_MANE, .natDexNum = NATIONAL_DEX_FLUTTER_MANE, .categoryName = _("Paradox"), @@ -4607,7 +5367,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_FlutterMane, .iconSprite = gMonIcon_FlutterMane, .iconPalIndex = 2, + SHADOW(-2, 20, SHADOW_SIZE_S) FOOTPRINT(FlutterMane) + OVERWORLD( + sPicTable_FlutterMane, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_NONE, + gOverworldPalette_FlutterMane, + gShinyOverworldPalette_FlutterMane + ) .isParadox = TRUE, .levelUpLearnset = sFlutterManeLevelUpLearnset, .teachableLearnset = sFlutterManeTeachableLearnset, @@ -4635,7 +5404,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_PROTOSYNTHESIS, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_WHITE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("SlithrWing", "Slither Wing"), + .speciesName = _("Slither Wing"), .cryId = CRY_SLITHER_WING, .natDexNum = NATIONAL_DEX_SLITHER_WING, .categoryName = _("Paradox"), @@ -4662,7 +5431,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_SlitherWing, .iconSprite = gMonIcon_SlitherWing, .iconPalIndex = 1, + SHADOW(-5, 13, SHADOW_SIZE_M) FOOTPRINT(SlitherWing) + OVERWORLD( + sPicTable_SlitherWing, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_SLITHER, + gOverworldPalette_SlitherWing, + gShinyOverworldPalette_SlitherWing + ) .isParadox = TRUE, .levelUpLearnset = sSlitherWingLevelUpLearnset, .teachableLearnset = sSlitherWingTeachableLearnset, @@ -4690,7 +5468,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_PROTOSYNTHESIS, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_GRAY, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("SndyShocks", "Sandy Shocks"), + .speciesName = _("Sandy Shocks"), .cryId = CRY_SANDY_SHOCKS, .natDexNum = NATIONAL_DEX_SANDY_SHOCKS, .categoryName = _("Paradox"), @@ -4718,7 +5496,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_SandyShocks, .iconSprite = gMonIcon_SandyShocks, .iconPalIndex = 0, + SHADOW(2, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(SandyShocks) + OVERWORLD( + sPicTable_SandyShocks, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_SandyShocks, + gShinyOverworldPalette_SandyShocks + ) .isParadox = TRUE, .levelUpLearnset = sSandyShocksLevelUpLearnset, .teachableLearnset = sSandyShocksTeachableLearnset, @@ -4746,7 +5533,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_QUARK_DRIVE, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_GRAY, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("IronTreads", "Iron Treads"), + .speciesName = _("Iron Treads"), .cryId = CRY_IRON_TREADS, .natDexNum = NATIONAL_DEX_IRON_TREADS, .categoryName = _("Paradox"), @@ -4774,7 +5561,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronTreads, .iconSprite = gMonIcon_IronTreads, .iconPalIndex = 1, + SHADOW(4, 3, SHADOW_SIZE_L) FOOTPRINT(IronTreads) + OVERWORLD( + sPicTable_IronTreads, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_IronTreads, + gShinyOverworldPalette_IronTreads + ) .isParadox = TRUE, .levelUpLearnset = sIronTreadsLevelUpLearnset, .teachableLearnset = sIronTreadsTeachableLearnset, @@ -4802,7 +5598,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_QUARK_DRIVE, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_RED, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("IronBundle", "Iron Bundle"), + .speciesName = _("Iron Bundle"), .cryId = CRY_IRON_BUNDLE, .natDexNum = NATIONAL_DEX_IRON_BUNDLE, .categoryName = _("Paradox"), @@ -4830,7 +5626,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronBundle, .iconSprite = gMonIcon_IronBundle, .iconPalIndex = 0, + SHADOW(-1, 6, SHADOW_SIZE_M) FOOTPRINT(IronBundle) + OVERWORLD( + sPicTable_IronBundle, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_IronBundle, + gShinyOverworldPalette_IronBundle + ) .isParadox = TRUE, .levelUpLearnset = sIronBundleLevelUpLearnset, .teachableLearnset = sIronBundleTeachableLearnset, @@ -4886,7 +5691,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronHands, .iconSprite = gMonIcon_IronHands, .iconPalIndex = 0, + SHADOW(-2, 8, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(IronHands) + OVERWORLD( + sPicTable_IronHands, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_IronHands, + gShinyOverworldPalette_IronHands + ) .isParadox = TRUE, .levelUpLearnset = sIronHandsLevelUpLearnset, .teachableLearnset = sIronHandsTeachableLearnset, @@ -4914,7 +5728,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_QUARK_DRIVE, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_BLUE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("IronJuguls", "Iron Jugulis"), + .speciesName = _("Iron Jugulis"), .cryId = CRY_IRON_JUGULIS, .natDexNum = NATIONAL_DEX_IRON_JUGULIS, .categoryName = _("Paradox"), @@ -4943,7 +5757,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronJugulis, .iconSprite = gMonIcon_IronJugulis, .iconPalIndex = 0, + SHADOW(0, 15, SHADOW_SIZE_M) FOOTPRINT(IronJugulis) + OVERWORLD( + sPicTable_IronJugulis, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_NONE, + gOverworldPalette_IronJugulis, + gShinyOverworldPalette_IronJugulis + ) .isParadox = TRUE, .levelUpLearnset = sIronJugulisLevelUpLearnset, .teachableLearnset = sIronJugulisTeachableLearnset, @@ -5000,7 +5823,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronMoth, .iconSprite = gMonIcon_IronMoth, .iconPalIndex = 3, + SHADOW(-4, 14, SHADOW_SIZE_M) FOOTPRINT(IronMoth) + OVERWORLD( + sPicTable_IronMoth, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_IronMoth, + gShinyOverworldPalette_IronMoth + ) .isParadox = TRUE, .levelUpLearnset = sIronMothLevelUpLearnset, .teachableLearnset = sIronMothTeachableLearnset, @@ -5028,7 +5860,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_QUARK_DRIVE, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_GREEN, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("IronThorns", "Iron Thorns"), + .speciesName = _("Iron Thorns"), .cryId = CRY_IRON_THORNS, .natDexNum = NATIONAL_DEX_IRON_THORNS, .categoryName = _("Paradox"), @@ -5056,7 +5888,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronThorns, .iconSprite = gMonIcon_IronThorns, .iconPalIndex = 1, + SHADOW(-9, 12, SHADOW_SIZE_L) FOOTPRINT(IronThorns) + OVERWORLD( + sPicTable_IronThorns, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_IronThorns, + gShinyOverworldPalette_IronThorns + ) .isParadox = TRUE, .levelUpLearnset = sIronThornsLevelUpLearnset, .teachableLearnset = sIronThornsTeachableLearnset, @@ -5111,7 +5952,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Frigibax, .iconSprite = gMonIcon_Frigibax, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_S) FOOTPRINT(Frigibax) + OVERWORLD( + sPicTable_Frigibax, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_Frigibax, + gShinyOverworldPalette_Frigibax + ) .levelUpLearnset = sFrigibaxLevelUpLearnset, .teachableLearnset = sFrigibaxTeachableLearnset, .eggMoveLearnset = sFrigibaxEggMoveLearnset, @@ -5165,7 +6015,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Arctibax, .iconSprite = gMonIcon_Arctibax, .iconPalIndex = 0, + SHADOW(4, 8, SHADOW_SIZE_M) FOOTPRINT(Arctibax) + OVERWORLD( + sPicTable_Arctibax, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_FOOT, + gOverworldPalette_Arctibax, + gShinyOverworldPalette_Arctibax + ) .levelUpLearnset = sArctibaxLevelUpLearnset, .teachableLearnset = sArctibaxTeachableLearnset, .evolutions = EVOLUTION({EVO_LEVEL, 54, SPECIES_BAXCALIBUR}), @@ -5218,7 +6077,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Baxcalibur, .iconSprite = gMonIcon_Baxcalibur, .iconPalIndex = 0, + SHADOW(5, 12, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Baxcalibur) + OVERWORLD( + sPicTable_Baxcalibur, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Baxcalibur, + gShinyOverworldPalette_Baxcalibur + ) .levelUpLearnset = sBaxcaliburLevelUpLearnset, .teachableLearnset = sBaxcaliburTeachableLearnset, }, @@ -5272,7 +6140,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_GimmighoulChest, .iconSprite = gMonIcon_GimmighoulChest, .iconPalIndex = 0, + SHADOW(0, 7, SHADOW_SIZE_M) FOOTPRINT(GimmighoulChest) + OVERWORLD( + sPicTable_GimmighoulChest, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_NONE, + gOverworldPalette_GimmighoulChest, + gShinyOverworldPalette_GimmighoulChest + ) .levelUpLearnset = sGimmighoulLevelUpLearnset, .teachableLearnset = sGimmighoulTeachableLearnset, .formSpeciesIdTable = sGimmighoulFormSpeciesIdTable, @@ -5326,6 +6203,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_GimmighoulRoaming, .iconSprite = gMonIcon_GimmighoulRoaming, .iconPalIndex = 0, + SHADOW(-1, -4, SHADOW_SIZE_S) FOOTPRINT(GimmighoulRoaming) .levelUpLearnset = sGimmighoulLevelUpLearnset, .teachableLearnset = sGimmighoulTeachableLearnset, @@ -5380,7 +6258,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Gholdengo, .iconSprite = gMonIcon_Gholdengo, .iconPalIndex = 0, + SHADOW(3, 13, SHADOW_SIZE_M) FOOTPRINT(Gholdengo) + OVERWORLD( + sPicTable_Gholdengo, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_NONE, + gOverworldPalette_Gholdengo, + gShinyOverworldPalette_Gholdengo + ) .levelUpLearnset = sGholdengoLevelUpLearnset, .teachableLearnset = sGholdengoTeachableLearnset, }, @@ -5434,8 +6321,18 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_WoChien, .iconSprite = gMonIcon_WoChien, .iconPalIndex = 1, + SHADOW(0, 11, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(WoChien) + OVERWORLD( + sPicTable_WoChien, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_SLITHER, + gOverworldPalette_WoChien, + gShinyOverworldPalette_WoChien + ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sWoChienLevelUpLearnset, .teachableLearnset = sWoChienTeachableLearnset, }, @@ -5489,8 +6386,18 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_ChienPao, .iconSprite = gMonIcon_ChienPao, .iconPalIndex = 0, + SHADOW(-4, 8, SHADOW_SIZE_L) FOOTPRINT(ChienPao) + OVERWORLD( + sPicTable_ChienPao, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_ChienPao, + gShinyOverworldPalette_ChienPao + ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sChienPaoLevelUpLearnset, .teachableLearnset = sChienPaoTeachableLearnset, }, @@ -5544,8 +6451,18 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_TingLu, .iconSprite = gMonIcon_TingLu, .iconPalIndex = 0, + SHADOW(12, 13, SHADOW_SIZE_L) FOOTPRINT(TingLu) + OVERWORLD( + sPicTable_TingLu, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_TingLu, + gShinyOverworldPalette_TingLu + ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTingLuLevelUpLearnset, .teachableLearnset = sTingLuTeachableLearnset, }, @@ -5600,8 +6517,18 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_ChiYu, .iconSprite = gMonIcon_ChiYu, .iconPalIndex = 0, + SHADOW(0, 16, SHADOW_SIZE_S) FOOTPRINT(ChiYu) + OVERWORLD( + sPicTable_ChiYu, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_NONE, + gOverworldPalette_ChiYu, + gShinyOverworldPalette_ChiYu + ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sChiYuLevelUpLearnset, .teachableLearnset = sChiYuTeachableLearnset, }, @@ -5628,7 +6555,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_PROTOSYNTHESIS, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_BLUE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("RoarngMoon", "Roaring Moon"), + .speciesName = _("Roaring Moon"), .cryId = CRY_ROARING_MOON, .natDexNum = NATIONAL_DEX_ROARING_MOON, .categoryName = _("Paradox"), @@ -5657,7 +6584,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_RoaringMoon, .iconSprite = gMonIcon_RoaringMoon, .iconPalIndex = 0, + SHADOW(3, 9, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(RoaringMoon) + OVERWORLD( + sPicTable_RoaringMoon, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_RoaringMoon, + gShinyOverworldPalette_RoaringMoon + ) .isParadox = TRUE, .levelUpLearnset = sRoaringMoonLevelUpLearnset, .teachableLearnset = sRoaringMoonTeachableLearnset, @@ -5685,7 +6621,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_QUARK_DRIVE, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_WHITE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("IronVliant", "Iron Valiant"), + .speciesName = _("Iron Valiant"), .cryId = CRY_IRON_VALIANT, .natDexNum = NATIONAL_DEX_IRON_VALIANT, .categoryName = _("Paradox"), @@ -5712,7 +6648,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronValiant, .iconSprite = gMonIcon_IronValiant, .iconPalIndex = 1, + SHADOW(2, 14, SHADOW_SIZE_L) FOOTPRINT(IronValiant) + OVERWORLD( + sPicTable_IronValiant, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_IronValiant, + gShinyOverworldPalette_IronValiant + ) .isParadox = TRUE, .levelUpLearnset = sIronValiantLevelUpLearnset, .teachableLearnset = sIronValiantTeachableLearnset, @@ -5767,9 +6712,19 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Koraidon, .iconSprite = gMonIcon_Koraidon, .iconPalIndex = 0, + SHADOW(-3, 13, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(Koraidon) + OVERWORLD( + sPicTable_Koraidon, + SIZE_64x64, + SHADOW_SIZE_M, + TRACKS_NONE, + gOverworldPalette_Koraidon, + gShinyOverworldPalette_Koraidon + ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sKoraidonLevelUpLearnset, .teachableLearnset = sKoraidonTeachableLearnset, }, @@ -5823,9 +6778,19 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Miraidon, .iconSprite = gMonIcon_Miraidon, .iconPalIndex = 2, + SHADOW(10, 14, SHADOW_SIZE_L) FOOTPRINT(Miraidon) + OVERWORLD( + sPicTable_Miraidon, + SIZE_64x64, + SHADOW_SIZE_M, + TRACKS_NONE, + gOverworldPalette_Miraidon, + gShinyOverworldPalette_Miraidon + ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMiraidonLevelUpLearnset, .teachableLearnset = sMiraidonTeachableLearnset, }, @@ -5852,7 +6817,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_PROTOSYNTHESIS, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_BLUE, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("WalkngWake", "Walking Wake"), + .speciesName = _("Walking Wake"), .cryId = CRY_WALKING_WAKE, .natDexNum = NATIONAL_DEX_WALKING_WAKE, .categoryName = _("Paradox"), @@ -5879,7 +6844,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_WalkingWake, .iconSprite = gMonIcon_WalkingWake, .iconPalIndex = 2, + SHADOW(2, 13, SHADOW_SIZE_L) FOOTPRINT(WalkingWake) + OVERWORLD( + sPicTable_WalkingWake, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_WalkingWake, + gShinyOverworldPalette_WalkingWake + ) .isParadox = TRUE, .levelUpLearnset = sWalkingWakeLevelUpLearnset, .teachableLearnset = sWalkingWakeTeachableLearnset, @@ -5907,7 +6881,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_QUARK_DRIVE, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_GREEN, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("IronLeaves", "Iron Leaves"), + .speciesName = _("Iron Leaves"), .cryId = CRY_IRON_LEAVES, .natDexNum = NATIONAL_DEX_IRON_LEAVES, .categoryName = _("Paradox"), @@ -5934,7 +6908,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronLeaves, .iconSprite = gMonIcon_IronLeaves, .iconPalIndex = 1, + SHADOW(2, 11, SHADOW_SIZE_M) FOOTPRINT(IronLeaves) + OVERWORLD( + sPicTable_IronLeaves, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_IronLeaves, + gShinyOverworldPalette_IronLeaves + ) .isParadox = TRUE, .levelUpLearnset = sIronLeavesLevelUpLearnset, .teachableLearnset = sIronLeavesTeachableLearnset, @@ -5961,7 +6944,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS), .abilities = { ABILITY_HOSPITALITY, ABILITY_NONE, ABILITY_HEATPROOF }, .bodyColor = BODY_COLOR_GREEN, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Ptchageist", "Poltchageist"), + .speciesName = _("Poltchageist"), .cryId = CRY_POLTCHAGEIST, .natDexNum = NATIONAL_DEX_POLTCHAGEIST, .categoryName = _("Matcha"), @@ -5990,7 +6973,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Poltchageist, .iconSprite = gMonIcon_Poltchageist, .iconPalIndex = 1, + SHADOW(-1, 14, SHADOW_SIZE_S) FOOTPRINT(Poltchageist) + OVERWORLD( + sPicTable_Poltchageist, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_NONE, + gOverworldPalette_Poltchageist, + gShinyOverworldPalette_Poltchageist + ) .levelUpLearnset = sPoltchageistLevelUpLearnset, .teachableLearnset = sPoltchageistTeachableLearnset, .evolutions = EVOLUTION({EVO_ITEM, ITEM_UNREMARKABLE_TEACUP, SPECIES_SINISTCHA_UNREMARKABLE}), @@ -6014,7 +7006,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MINERAL, EGG_GROUP_AMORPHOUS), .abilities = { ABILITY_HOSPITALITY, ABILITY_NONE, ABILITY_HEATPROOF }, .bodyColor = BODY_COLOR_GREEN, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Ptchageist", "Poltchageist"), + .speciesName = _("Poltchageist"), .cryId = CRY_POLTCHAGEIST, .natDexNum = NATIONAL_DEX_POLTCHAGEIST, .categoryName = _("Matcha"), @@ -6043,7 +7035,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Poltchageist, .iconSprite = gMonIcon_Poltchageist, .iconPalIndex = 1, + SHADOW(-1, 14, SHADOW_SIZE_S) FOOTPRINT(Poltchageist) + OVERWORLD( + sPicTable_Poltchageist, + SIZE_32x32, + SHADOW_SIZE_S, + TRACKS_NONE, + gOverworldPalette_Poltchageist, + gShinyOverworldPalette_Poltchageist + ) .levelUpLearnset = sPoltchageistLevelUpLearnset, .teachableLearnset = sPoltchageistTeachableLearnset, .evolutions = EVOLUTION({EVO_ITEM, ITEM_MASTERPIECE_TEACUP, SPECIES_SINISTCHA_MASTERPIECE}), @@ -6097,7 +7098,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Sinistcha, .iconSprite = gMonIcon_Sinistcha, .iconPalIndex = 1, + SHADOW(0, 11, SHADOW_SIZE_M) FOOTPRINT(Sinistcha) + OVERWORLD( + sPicTable_Sinistcha, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_NONE, + gOverworldPalette_Sinistcha, + gShinyOverworldPalette_Sinistcha + ) .levelUpLearnset = sSinistchaLevelUpLearnset, .teachableLearnset = sSinistchaTeachableLearnset, }, @@ -6149,7 +7159,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Sinistcha, .iconSprite = gMonIcon_Sinistcha, .iconPalIndex = 1, + SHADOW(0, 11, SHADOW_SIZE_M) FOOTPRINT(Sinistcha) + OVERWORLD( + sPicTable_Sinistcha, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_NONE, + gOverworldPalette_Sinistcha, + gShinyOverworldPalette_Sinistcha + ) .levelUpLearnset = sSinistchaLevelUpLearnset, .teachableLearnset = sSinistchaTeachableLearnset, }, @@ -6203,8 +7222,18 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Okidogi, .iconSprite = gMonIcon_Okidogi, .iconPalIndex = 1, + SHADOW(-1, 11, SHADOW_SIZE_L) FOOTPRINT(Okidogi) + OVERWORLD( + sPicTable_Okidogi, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Okidogi, + gShinyOverworldPalette_Okidogi + ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sOkidogiLevelUpLearnset, .teachableLearnset = sOkidogiTeachableLearnset, }, @@ -6258,8 +7287,18 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Munkidori, .iconSprite = gMonIcon_Munkidori, .iconPalIndex = 0, + SHADOW(1, 8, SHADOW_SIZE_S) FOOTPRINT(Munkidori) + OVERWORLD( + sPicTable_Munkidori, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Munkidori, + gShinyOverworldPalette_Munkidori + ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sMunkidoriLevelUpLearnset, .teachableLearnset = sMunkidoriTeachableLearnset, }, @@ -6285,7 +7324,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_TOXIC_CHAIN, ABILITY_NONE, ABILITY_TECHNICIAN }, .bodyColor = BODY_COLOR_BLACK, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Fezndipiti", "Fezandipiti"), + .speciesName = _("Fezandipiti"), .cryId = CRY_FEZANDIPITI, .natDexNum = NATIONAL_DEX_FEZANDIPITI, .categoryName = _("Retainer"), @@ -6313,8 +7352,18 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Fezandipiti, .iconSprite = gMonIcon_Fezandipiti, .iconPalIndex = 0, + SHADOW(-3, 10, SHADOW_SIZE_M) FOOTPRINT(Fezandipiti) + OVERWORLD( + sPicTable_Fezandipiti, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Fezandipiti, + gShinyOverworldPalette_Fezandipiti + ) .isLegendary = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sFezandipitiLevelUpLearnset, .teachableLearnset = sFezandipitiTeachableLearnset, }, @@ -6365,13 +7414,23 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Ogerpon##Form1##Form2, \ .iconSprite = gMonIcon_Ogerpon##Form1##Mask, \ .iconPalIndex = iconpalette, \ + SHADOW(7, 13, SHADOW_SIZE_L) \ FOOTPRINT(Ogerpon) \ + OVERWORLD( \ + sPicTable_Ogerpon##Form1##Form2, \ + SIZE_32x32, \ + SHADOW_SIZE_M, \ + TRACKS_FOOT, \ + gOverworldPalette_Ogerpon##Form1##Form2, \ + gShinyOverworldPalette_Ogerpon##Form1##Form2 \ + ) \ .levelUpLearnset = sOgerponLevelUpLearnset, \ .teachableLearnset = sOgerponTeachableLearnset, \ .formSpeciesIdTable = sOgerponFormSpeciesIdTable, \ .formChangeTable = sOgerponFormChangeTable, \ .isLegendary = TRUE, \ .isTeraForm = isTeraform, \ + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, \ } [SPECIES_OGERPON_TEAL_MASK] = OGERPON_SPECIES_INFO(Teal, Mask, TYPE_GRASS, ABILITY_DEFIANT, BODY_COLOR_GREEN, 1, FALSE), @@ -6408,7 +7467,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_PROTOSYNTHESIS, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_BROWN, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("GouginFire", "Gouging Fire"), + .speciesName = _("Gouging Fire"), .cryId = CRY_GOUGING_FIRE, .natDexNum = NATIONAL_DEX_GOUGING_FIRE, .categoryName = _("Paradox"), @@ -6436,7 +7495,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_GougingFire, .iconSprite = gMonIcon_GougingFire, .iconPalIndex = 5, + SHADOW(-1, 6, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(GougingFire) + OVERWORLD( + sPicTable_GougingFire, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_GougingFire, + gShinyOverworldPalette_GougingFire + ) .isParadox = TRUE, .levelUpLearnset = sGougingFireLevelUpLearnset, .teachableLearnset = sGougingFireTeachableLearnset, @@ -6464,7 +7532,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_PROTOSYNTHESIS, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_YELLOW, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("RagingBolt", "Raging Bolt"), + .speciesName = _("Raging Bolt"), .cryId = CRY_RAGING_BOLT, .natDexNum = NATIONAL_DEX_RAGING_BOLT, .categoryName = _("Paradox"), @@ -6492,7 +7560,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_RagingBolt, .iconSprite = gMonIcon_RagingBolt, .iconPalIndex = 2, + SHADOW(4, 14, SHADOW_SIZE_L) FOOTPRINT(RagingBolt) + OVERWORLD( + sPicTable_RagingBolt, + SIZE_64x64, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_RagingBolt, + gShinyOverworldPalette_RagingBolt + ) .isParadox = TRUE, .levelUpLearnset = sRagingBoltLevelUpLearnset, .teachableLearnset = sRagingBoltTeachableLearnset, @@ -6520,7 +7597,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), .abilities = { ABILITY_QUARK_DRIVE, ABILITY_NONE, ABILITY_NONE }, .bodyColor = BODY_COLOR_GRAY, - .speciesName = HANDLE_EXPANDED_SPECIES_NAME("IronBouldr", "Iron Boulder"), + .speciesName = _("Iron Boulder"), .cryId = CRY_IRON_BOULDER, .natDexNum = NATIONAL_DEX_IRON_BOULDER, .categoryName = _("Paradox"), @@ -6547,7 +7624,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronBoulder, .iconSprite = gMonIcon_IronBoulder, .iconPalIndex = 5, + SHADOW(4, 7, SHADOW_SIZE_XL_BATTLE_ONLY) FOOTPRINT(IronBoulder) + OVERWORLD( + sPicTable_IronBoulder, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_IronBoulder, + gShinyOverworldPalette_IronBoulder + ) .isParadox = TRUE, .levelUpLearnset = sIronBoulderLevelUpLearnset, .teachableLearnset = sIronBoulderTeachableLearnset, @@ -6603,7 +7689,16 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_IronCrown, .iconSprite = gMonIcon_IronCrown, .iconPalIndex = 3, + SHADOW(0, 14, SHADOW_SIZE_L) FOOTPRINT(IronCrown) + OVERWORLD( + sPicTable_IronCrown, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_IronCrown, + gShinyOverworldPalette_IronCrown + ) .isParadox = TRUE, .levelUpLearnset = sIronCrownLevelUpLearnset, .teachableLearnset = sIronCrownTeachableLearnset, @@ -6660,9 +7755,19 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_TerapagosNormal, .iconSprite = gMonIcon_TerapagosNormal, .iconPalIndex = 0, + SHADOW(3, 13, SHADOW_SIZE_L) FOOTPRINT(TerapagosNormal) + OVERWORLD( + sPicTable_TerapagosNormal, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_TerapagosNormal, + gShinyOverworldPalette_TerapagosNormal + ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTerapagosLevelUpLearnset, .teachableLearnset = sTerapagosTeachableLearnset, .formSpeciesIdTable = sTerapagosFormSpeciesIdTable, @@ -6719,9 +7824,19 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_TerapagosTerastal, .iconSprite = gMonIcon_TerapagosTerastal, .iconPalIndex = 0, + SHADOW(-4, 4, SHADOW_SIZE_L) FOOTPRINT(TerapagosTerastal) + OVERWORLD( + sPicTable_TerapagosTerastal, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_TerapagosTerastal, + gShinyOverworldPalette_TerapagosTerastal + ) .isLegendary = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTerapagosLevelUpLearnset, .teachableLearnset = sTerapagosTeachableLearnset, .formSpeciesIdTable = sTerapagosFormSpeciesIdTable, @@ -6776,10 +7891,12 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_TerapagosStellar, .iconSprite = gMonIcon_TerapagosStellar, .iconPalIndex = 0, + SHADOW(0, 12, SHADOW_SIZE_L) FOOTPRINT(TerapagosStellar) .isLegendary = TRUE, .isTeraForm = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sTerapagosLevelUpLearnset, .teachableLearnset = sTerapagosTeachableLearnset, .formSpeciesIdTable = sTerapagosFormSpeciesIdTable, @@ -6835,9 +7952,19 @@ const struct SpeciesInfo gSpeciesInfoGen9[] = .shinyPalette = gMonShinyPalette_Pecharunt, .iconSprite = gMonIcon_Pecharunt, .iconPalIndex = 0, + SHADOW(2, 1, SHADOW_SIZE_L) FOOTPRINT(Pecharunt) + OVERWORLD( + sPicTable_Pecharunt, + SIZE_32x32, + SHADOW_SIZE_M, + TRACKS_FOOT, + gOverworldPalette_Pecharunt, + gShinyOverworldPalette_Pecharunt + ) .isMythical = TRUE, .isFrontierBanned = TRUE, + .perfectIVCount = LEGENDARY_PERFECT_IV_COUNT, .levelUpLearnset = sPecharuntLevelUpLearnset, .teachableLearnset = sPecharuntTeachableLearnset, }, diff --git a/src/data/script_menu.h b/src/data/script_menu.h index c5afa87043..3b29171327 100644 --- a/src/data/script_menu.h +++ b/src/data/script_menu.h @@ -105,107 +105,107 @@ static const struct MenuAction MultichoiceList_LevelMode[] = static const struct MenuAction MultichoiceList_Mechadoll1_Q1[] = { - {gTrickHouse_Mechadoll_Oddish}, - {gTrickHouse_Mechadoll_Poochyena}, - {gTrickHouse_Mechadoll_Taillow}, + {COMPOUND_STRING("ODDISH")}, + {COMPOUND_STRING("POOCHYENA")}, + {COMPOUND_STRING("TAILLOW")}, }; static const struct MenuAction MultichoiceList_Mechadoll1_Q2[] = { - {gTrickHouse_Mechadoll_Azurill}, - {gTrickHouse_Mechadoll_Lotad}, - {gTrickHouse_Mechadoll_Wingull}, + {COMPOUND_STRING("AZURILL")}, + {COMPOUND_STRING("LOTAD")}, + {COMPOUND_STRING("WINGULL")}, }; static const struct MenuAction MultichoiceList_Mechadoll1_Q3[] = { - {gTrickHouse_Mechadoll_Dustox}, - {gTrickHouse_Mechadoll_Zubat}, - {gTrickHouse_Mechadoll_Nincada}, + {COMPOUND_STRING("DUSTOX")}, + {COMPOUND_STRING("ZUBAT")}, + {COMPOUND_STRING("NINCADA")}, }; static const struct MenuAction MultichoiceList_Mechadoll2_Q1[] = { - {gTrickHouse_Mechadoll_Ralts}, - {gTrickHouse_Mechadoll_Zigzagoon}, - {gTrickHouse_Mechadoll_Slakoth}, + {COMPOUND_STRING("RALTS")}, + {COMPOUND_STRING("ZIGZAGOON")}, + {COMPOUND_STRING("SLAKOTH")}, }; static const struct MenuAction MultichoiceList_Mechadoll2_Q2[] = { - {gTrickHouse_Mechadoll_Poochyena2}, - {gTrickHouse_Mechadoll_Shroomish}, - {gTrickHouse_Mechadoll_Zigzagoon2}, + {COMPOUND_STRING("POOCHYENA")}, + {COMPOUND_STRING("SHROOMISH")}, + {COMPOUND_STRING("ZIGZAGOON")}, }; static const struct MenuAction MultichoiceList_Mechadoll2_Q3[] = { - {gTrickHouse_Mechadoll_Poochyena3}, - {gTrickHouse_Mechadoll_Zubat2}, - {gTrickHouse_Mechadoll_Carvanha}, + {COMPOUND_STRING("POOCHYENA")}, + {COMPOUND_STRING("ZUBAT")}, + {COMPOUND_STRING("CARVANHA")}, }; static const struct MenuAction MultichoiceList_Mechadoll3_Q1[] = { - {gTrickHouse_Mechadoll_BurnHeal}, - {gTrickHouse_Mechadoll_HarborMail}, - {gTrickHouse_Mechadoll_SamePrice}, + {COMPOUND_STRING("BURN HEAL")}, + {COMPOUND_STRING("HARBOR MAIL")}, + {COMPOUND_STRING("Same price")}, }; static const struct MenuAction MultichoiceList_Mechadoll3_Q2[] = { - {gTrickHouse_Mechadoll_60Yen}, - {gTrickHouse_Mechadoll_55Yen}, - {gTrickHouse_Mechadoll_Nothing}, + {COMPOUND_STRING("¥60")}, + {COMPOUND_STRING("¥55")}, + {COMPOUND_STRING("Nothing")}, }; static const struct MenuAction MultichoiceList_Mechadoll3_Q3[] = { - {gTrickHouse_Mechadoll_CostMore}, - {gTrickHouse_Mechadoll_CostLess}, - {gTrickHouse_Mechadoll_SamePrice2}, + {COMPOUND_STRING("They will cost more.")}, + {COMPOUND_STRING("They will cost less.")}, + {COMPOUND_STRING("Same price")}, }; static const struct MenuAction MultichoiceList_Mechadoll4_Q1[] = { - {gTrickHouse_Mechadoll_Male}, - {gTrickHouse_Mechadoll_Female}, - {gTrickHouse_Mechadoll_Neither}, + {COMPOUND_STRING("Male")}, + {COMPOUND_STRING("Female")}, + {COMPOUND_STRING("Neither")}, }; static const struct MenuAction MultichoiceList_Mechadoll4_Q2[] = { - {gTrickHouse_Mechadoll_ElderlyMen}, - {gTrickHouse_Mechadoll_ElderlyLadies}, - {gTrickHouse_Mechadoll_SameNumber}, + {COMPOUND_STRING("Elderly men")}, + {COMPOUND_STRING("Elderly ladies")}, + {COMPOUND_STRING("Same number")}, }; static const struct MenuAction MultichoiceList_Mechadoll4_Q3[] = { - {gTrickHouse_Mechadoll_None}, - {gTrickHouse_Mechadoll_One}, - {gTrickHouse_Mechadoll_Two}, + {COMPOUND_STRING("None")}, + {COMPOUND_STRING("1")}, + {COMPOUND_STRING("2")}, }; static const struct MenuAction MultichoiceList_Mechadoll5_Q1[] = { - {gTrickHouse_Mechadoll_Two2}, - {gTrickHouse_Mechadoll_Three}, - {gTrickHouse_Mechadoll_Four}, + {COMPOUND_STRING("2")}, + {COMPOUND_STRING("3")}, + {COMPOUND_STRING("4")}, }; static const struct MenuAction MultichoiceList_Mechadoll5_Q2[] = { - {gTrickHouse_Mechadoll_Six}, - {gTrickHouse_Mechadoll_Seven}, - {gTrickHouse_Mechadoll_Eight}, + {COMPOUND_STRING("6")}, + {COMPOUND_STRING("7")}, + {COMPOUND_STRING("8")}, }; static const struct MenuAction MultichoiceList_Mechadoll5_Q3[] = { - {gTrickHouse_Mechadoll_Six2}, - {gTrickHouse_Mechadoll_Seven2}, - {gTrickHouse_Mechadoll_Eight2}, + {COMPOUND_STRING("6")}, + {COMPOUND_STRING("7")}, + {COMPOUND_STRING("8")}, }; static const struct MenuAction MultichoiceList_VendingMachine[] = diff --git a/src/data/text/follower_messages.h b/src/data/text/follower_messages.h index 7678992f22..638df64d88 100644 --- a/src/data/text/follower_messages.h +++ b/src/data/text/follower_messages.h @@ -34,7 +34,7 @@ static const u8 sHappyMsg11[] = _("Your POKéMON has caught the scent of\nsmoke. static const u8 sHappyMsg12[] = _("{STR_VAR_1} is poking at your belly."); static const u8 sHappyMsg13[] = _("Your POKéMON stretched out its body\nand is relaxing."); static const u8 sHappyMsg14[] = _("{STR_VAR_1} looks like it wants to\nlead!"); -static const u8 sHappyMsg15[] = _("{STR_VAR_1} is doing it's best to\nkeep up with you."); +static const u8 sHappyMsg15[] = _("{STR_VAR_1} is doing its best to\nkeep up with you."); static const u8 sHappyMsg16[] = _("{STR_VAR_1} is happily cuddling up\nto you!"); static const u8 sHappyMsg17[] = _("{STR_VAR_1} is full of life!"); static const u8 sHappyMsg18[] = _("{STR_VAR_1} seems to be very happy!"); @@ -134,7 +134,7 @@ const struct FollowerMsgInfo gFollowerUpsetMessages[] = { // Unconditional angry messages static const u8 sAngryMsg00[] = _("{STR_VAR_1} let out a roar!"); -static const u8 sAngryMsg01[] = _("{STR_VAR_1} is making a face like\nits angry!"); +static const u8 sAngryMsg01[] = _("{STR_VAR_1} is making a face like\nit's angry!"); static const u8 sAngryMsg02[] = _("{STR_VAR_1} seems to be angry for\nsome reason."); static const u8 sAngryMsg03[] = _("Your POKéMON turned to face the\nother way, showing a defiant face."); static const u8 sAngryMsg04[] = _("{STR_VAR_1} cried out."); diff --git a/src/data/tilesets/graphics.h b/src/data/tilesets/graphics.h index 2fdc28d213..a4cec62cf5 100644 --- a/src/data/tilesets/graphics.h +++ b/src/data/tilesets/graphics.h @@ -2,528 +2,528 @@ const u32 gTilesetTiles_Petalburg[] = INCBIN_U32("data/tilesets/secondary/petalb const u16 gTilesetPalettes_Petalburg[][16] = { - INCBIN_U16("data/tilesets/secondary/petalburg/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg/palettes/15.gbapal"), }; const u32 gTilesetTiles_Rustboro[] = INCBIN_U32("data/tilesets/secondary/rustboro/tiles.4bpp.lz"); const u16 gTilesetPalettes_Rustboro[][16] = { - INCBIN_U16("data/tilesets/secondary/rustboro/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro/palettes/15.gbapal"), }; const u32 gTilesetTiles_Dewford[] = INCBIN_U32("data/tilesets/secondary/dewford/tiles.4bpp.lz"); const u16 gTilesetPalettes_Dewford[][16] = { - INCBIN_U16("data/tilesets/secondary/dewford/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford/palettes/15.gbapal"), }; const u32 gTilesetTiles_Slateport[] = INCBIN_U32("data/tilesets/secondary/slateport/tiles.4bpp.lz"); const u16 gTilesetPalettes_Slateport[][16] = { - INCBIN_U16("data/tilesets/secondary/slateport/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/slateport/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/slateport/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/slateport/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/slateport/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/slateport/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/slateport/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/slateport/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/slateport/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/slateport/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/slateport/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/slateport/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/slateport/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/slateport/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/slateport/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/slateport/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/slateport/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/slateport/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/slateport/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/slateport/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/slateport/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/slateport/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/slateport/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/slateport/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/slateport/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/slateport/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/slateport/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/slateport/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/slateport/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/slateport/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/slateport/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/slateport/palettes/15.gbapal"), }; const u32 gTilesetTiles_Mauville[] = INCBIN_U32("data/tilesets/secondary/mauville/tiles.4bpp.lz"); const u16 gTilesetPalettes_Mauville[][16] = { - INCBIN_U16("data/tilesets/secondary/mauville/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville/palettes/15.gbapal"), }; const u32 gTilesetTiles_Lavaridge[] = INCBIN_U32("data/tilesets/secondary/lavaridge/tiles.4bpp.lz"); const u16 gTilesetPalettes_Lavaridge[][16] = { - INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge/palettes/15.gbapal"), }; const u32 gTilesetTiles_Fallarbor[] = INCBIN_U32("data/tilesets/secondary/fallarbor/tiles.4bpp.lz"); const u16 gTilesetPalettes_Fallarbor[][16] = { - INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/fallarbor/palettes/15.gbapal"), }; const u32 gTilesetTiles_Fortree[] = INCBIN_U32("data/tilesets/secondary/fortree/tiles.4bpp.lz"); const u16 gTilesetPalettes_Fortree[][16] = { - INCBIN_U16("data/tilesets/secondary/fortree/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree/palettes/15.gbapal"), }; const u32 gTilesetTiles_Lilycove[] = INCBIN_U32("data/tilesets/secondary/lilycove/tiles.4bpp.lz"); const u16 gTilesetPalettes_Lilycove[][16] = { - INCBIN_U16("data/tilesets/secondary/lilycove/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove/palettes/15.gbapal"), }; const u32 gTilesetTiles_Mossdeep[] = INCBIN_U32("data/tilesets/secondary/mossdeep/tiles.4bpp.lz"); const u16 gTilesetPalettes_Mossdeep[][16] = { - INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep/palettes/15.gbapal"), }; const u32 gTilesetTiles_EverGrande[] = INCBIN_U32("data/tilesets/secondary/ever_grande/tiles.4bpp.lz"); const u16 gTilesetPalettes_EverGrande[][16] = { - INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/ever_grande/palettes/15.gbapal"), }; const u32 gTilesetTiles_Pacifidlog[] = INCBIN_U32("data/tilesets/secondary/pacifidlog/tiles.4bpp.lz"); const u16 gTilesetPalettes_Pacifidlog[][16] = { - INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/pacifidlog/palettes/15.gbapal"), }; const u32 gTilesetTiles_Sootopolis[] = INCBIN_U32("data/tilesets/secondary/sootopolis/tiles.4bpp.lz"); const u16 gTilesetPalettes_Sootopolis[][16] = { - INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis/palettes/15.gbapal"), }; const u32 gTilesetTiles_BattleFrontierOutsideWest[] = INCBIN_U32("data/tilesets/secondary/battle_frontier_outside_west/tiles.4bpp.lz"); const u16 gTilesetPalettes_BattleFrontierOutsideWest[][16] = { - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_west/palettes/15.gbapal"), }; const u32 gTilesetTiles_BattleFrontierOutsideEast[] = INCBIN_U32("data/tilesets/secondary/battle_frontier_outside_east/tiles.4bpp.lz"); const u16 gTilesetPalettes_BattleFrontierOutsideEast[][16] = { - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_outside_east/palettes/15.gbapal"), }; const u32 gTilesetTiles_InsideBuilding[] = INCBIN_U32("data/tilesets/primary/building/tiles.4bpp.lz"); const u16 gTilesetPalettes_InsideBuilding[][16] = { - INCBIN_U16("data/tilesets/primary/building/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/primary/building/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/primary/building/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/primary/building/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/primary/building/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/primary/building/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/primary/building/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/primary/building/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/primary/building/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/primary/building/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/primary/building/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/primary/building/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/primary/building/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/primary/building/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/primary/building/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/primary/building/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/primary/building/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/primary/building/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/primary/building/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/primary/building/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/primary/building/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/primary/building/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/primary/building/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/primary/building/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/primary/building/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/primary/building/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/primary/building/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/primary/building/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/primary/building/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/primary/building/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/primary/building/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/primary/building/palettes/15.gbapal"), }; const u32 gTilesetTiles_Shop[] = INCBIN_U32("data/tilesets/secondary/shop/tiles.4bpp.lz"); const u16 gTilesetPalettes_Shop[][16] = { - INCBIN_U16("data/tilesets/secondary/shop/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/shop/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/shop/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/shop/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/shop/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/shop/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/shop/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/shop/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/shop/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/shop/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/shop/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/shop/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/shop/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/shop/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/shop/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/shop/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/shop/palettes/15.gbapal"), }; const u32 gTilesetTiles_PokemonCenter[] = INCBIN_U32("data/tilesets/secondary/pokemon_center/tiles.4bpp.lz"); const u16 gTilesetPalettes_PokemonCenter[][16] = { - INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_center/palettes/15.gbapal"), }; const u32 gTilesetTiles_Cave[] = INCBIN_U32("data/tilesets/secondary/cave/tiles.4bpp.lz"); const u16 gTilesetPalettes_Cave[][16] = { - INCBIN_U16("data/tilesets/secondary/cave/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/cave/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/cave/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/cave/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/cave/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/cave/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/cave/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/cave/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/cave/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/cave/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/cave/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/cave/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/cave/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/cave/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/cave/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/cave/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/cave/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/cave/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/cave/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/cave/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/cave/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/cave/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/cave/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/cave/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/cave/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/cave/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/cave/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/cave/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/cave/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/cave/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/cave/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/cave/palettes/15.gbapal"), }; const u32 gTilesetTiles_PokemonSchool[] = INCBIN_U32("data/tilesets/secondary/pokemon_school/tiles.4bpp.lz"); const u16 gTilesetPalettes_PokemonSchool[][16] = { - INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_school/palettes/15.gbapal"), }; const u32 gTilesetTiles_PokemonFanClub[] = INCBIN_U32("data/tilesets/secondary/pokemon_fan_club/tiles.4bpp.lz"); const u16 gTilesetPalettes_PokemonFanClub[][16] = { - INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_fan_club/palettes/15.gbapal"), }; const u32 gTilesetTiles_Unused1[] = INCBIN_U32("data/tilesets/secondary/unused_1/tiles.4bpp.lz"); const u16 gTilesetPalettes_Unused1[][16] = { - INCBIN_U16("data/tilesets/secondary/unused_1/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_1/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_1/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_1/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_1/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_1/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_1/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_1/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_1/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_1/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_1/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_1/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_1/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_1/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_1/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_1/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_1/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_1/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_1/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_1/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_1/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_1/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_1/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_1/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_1/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_1/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_1/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_1/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_1/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_1/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_1/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_1/palettes/15.gbapal"), }; const u32 gTilesetTiles_MeteorFalls[] = INCBIN_U32("data/tilesets/secondary/meteor_falls/tiles.4bpp.lz"); const u16 gTilesetPalettes_MeteorFalls[][16] = { - INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/meteor_falls/palettes/15.gbapal"), }; const u32 gTilesetTiles_OceanicMuseum[] = INCBIN_U32("data/tilesets/secondary/oceanic_museum/tiles.4bpp.lz"); const u16 gTilesetPalettes_OceanicMuseum[][16] = { - INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/oceanic_museum/palettes/15.gbapal"), }; const u32 gTilesetTiles_CableClub[] = INCBIN_U32("data/tilesets/secondary/cable_club/tiles.4bpp"); @@ -531,286 +531,286 @@ const u32 gTilesetTiles_UnknownCableClub[] = INCBIN_U32("data/tilesets/secondary const u16 gTilesetPalettes_CableClub[][16] = { - INCBIN_U16("data/tilesets/secondary/cable_club/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/cable_club/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/cable_club/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/cable_club/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/cable_club/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/cable_club/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/cable_club/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/cable_club/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/cable_club/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/cable_club/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/cable_club/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/cable_club/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/cable_club/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/cable_club/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/cable_club/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/cable_club/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/cable_club/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/cable_club/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/cable_club/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/cable_club/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/cable_club/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/cable_club/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/cable_club/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/cable_club/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/cable_club/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/cable_club/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/cable_club/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/cable_club/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/cable_club/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/cable_club/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/cable_club/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/cable_club/palettes/15.gbapal"), }; const u32 gTilesetTiles_SeashoreHouse[] = INCBIN_U32("data/tilesets/secondary/seashore_house/tiles.4bpp.lz"); const u16 gTilesetPalettes_SeashoreHouse[][16] = { - INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/seashore_house/palettes/15.gbapal"), }; const u32 gTilesetTiles_PrettyPetalFlowerShop[] = INCBIN_U32("data/tilesets/secondary/pretty_petal_flower_shop/tiles.4bpp.lz"); const u16 gTilesetPalettes_PrettyPetalFlowerShop[][16] = { - INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/pretty_petal_flower_shop/palettes/15.gbapal"), }; const u32 gTilesetTiles_PokemonDayCare[] = INCBIN_U32("data/tilesets/secondary/pokemon_day_care/tiles.4bpp.lz"); const u16 gTilesetPalettes_PokemonDayCare[][16] = { - INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/pokemon_day_care/palettes/15.gbapal"), }; const u32 gTilesetTiles_Facility[] = INCBIN_U32("data/tilesets/secondary/facility/tiles.4bpp.lz"); const u16 gTilesetPalettes_Facility[][16] = { - INCBIN_U16("data/tilesets/secondary/facility/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/facility/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/facility/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/facility/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/facility/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/facility/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/facility/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/facility/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/facility/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/facility/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/facility/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/facility/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/facility/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/facility/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/facility/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/facility/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/facility/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/facility/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/facility/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/facility/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/facility/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/facility/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/facility/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/facility/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/facility/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/facility/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/facility/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/facility/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/facility/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/facility/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/facility/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/facility/palettes/15.gbapal"), }; const u32 gTilesetTiles_BikeShop[] = INCBIN_U32("data/tilesets/secondary/bike_shop/tiles.4bpp.lz"); const u16 gTilesetPalettes_BikeShop[][16] = { - INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/bike_shop/palettes/15.gbapal"), }; const u32 gTilesetTiles_RusturfTunnel[] = INCBIN_U32("data/tilesets/secondary/rusturf_tunnel/tiles.4bpp.lz"); const u16 gTilesetPalettes_RusturfTunnel[][16] = { - INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/rusturf_tunnel/palettes/15.gbapal"), }; const u32 gTilesetTiles_SecretBaseBrownCaveCompressed[] = INCBIN_U32("data/tilesets/secondary/secret_base/brown_cave/unused_tiles.4bpp.lz"); const u16 gTilesetPalettes_SecretBaseBrownCave[][16] = { - INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/brown_cave/palettes/15.gbapal"), }; const u32 gTilesetTiles_SecretBaseTreeCompressed[] = INCBIN_U32("data/tilesets/secondary/secret_base/tree/unused_tiles.4bpp.lz"); const u16 gTilesetPalettes_SecretBaseTree[][16] = { - INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/tree/palettes/15.gbapal"), }; const u32 gTilesetTiles_SecretBaseShrubCompressed[] = INCBIN_U32("data/tilesets/secondary/secret_base/shrub/unused_tiles.4bpp.lz"); const u16 gTilesetPalettes_SecretBaseShrub[][16] = { - INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/shrub/palettes/15.gbapal"), }; const u32 gTilesetTiles_SecretBaseBlueCaveCompressed[] = INCBIN_U32("data/tilesets/secondary/secret_base/blue_cave/unused_tiles.4bpp.lz"); const u16 gTilesetPalettes_SecretBaseBlueCave[][16] = { - INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/blue_cave/palettes/15.gbapal"), }; const u32 gTilesetTiles_SecretBaseYellowCaveCompressed[] = INCBIN_U32("data/tilesets/secondary/secret_base/yellow_cave/unused_tiles.4bpp.lz"); const u16 gTilesetPalettes_SecretBaseYellowCave[][16] = { - INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/yellow_cave/palettes/15.gbapal"), }; const u32 gTilesetTiles_SecretBaseRedCaveCompressed[] = INCBIN_U32("data/tilesets/secondary/secret_base/red_cave/unused_tiles.4bpp.lz"); const u16 gTilesetPalettes_SecretBaseRedCave[][16] = { - INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/secret_base/red_cave/palettes/15.gbapal"), }; const u32 gTilesetTiles_SecretBaseBrownCave[] = INCBIN_U32("data/tilesets/secondary/secret_base/brown_cave/tiles.4bpp"); @@ -824,418 +824,418 @@ const u32 gTilesetTiles_InsideOfTruck[] = INCBIN_U32("data/tilesets/secondary/in const u16 gTilesetPalettes_InsideOfTruck[][16] = { - INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_of_truck/palettes/15.gbapal"), }; const u32 gTilesetTiles_Contest[] = INCBIN_U32("data/tilesets/secondary/contest/tiles.4bpp.lz"); const u16 gTilesetPalettes_Contest[][16] = { - INCBIN_U16("data/tilesets/secondary/contest/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/contest/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/contest/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/contest/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/contest/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/contest/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/contest/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/contest/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/contest/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/contest/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/contest/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/contest/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/contest/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/contest/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/contest/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/contest/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/contest/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/contest/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/contest/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/contest/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/contest/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/contest/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/contest/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/contest/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/contest/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/contest/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/contest/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/contest/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/contest/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/contest/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/contest/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/contest/palettes/15.gbapal"), }; const u32 gTilesetTiles_LilycoveMuseum[] = INCBIN_U32("data/tilesets/secondary/lilycove_museum/tiles.4bpp.lz"); const u16 gTilesetPalettes_LilycoveMuseum[][16] = { - INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/lilycove_museum/palettes/15.gbapal"), }; const u32 gTilesetTiles_BrendansMaysHouse[] = INCBIN_U32("data/tilesets/secondary/brendans_mays_house/tiles.4bpp.lz"); const u16 gTilesetPalettes_BrendansMaysHouse[][16] = { - INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/brendans_mays_house/palettes/15.gbapal"), }; const u32 gTilesetTiles_Lab[] = INCBIN_U32("data/tilesets/secondary/lab/tiles.4bpp.lz"); const u16 gTilesetPalettes_Lab[][16] = { - INCBIN_U16("data/tilesets/secondary/lab/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/lab/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/lab/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/lab/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/lab/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/lab/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/lab/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/lab/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/lab/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/lab/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/lab/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/lab/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/lab/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/lab/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/lab/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/lab/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/lab/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/lab/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/lab/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/lab/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/lab/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/lab/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/lab/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/lab/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/lab/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/lab/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/lab/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/lab/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/lab/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/lab/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/lab/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/lab/palettes/15.gbapal"), }; const u32 gTilesetTiles_Underwater[] = INCBIN_U32("data/tilesets/secondary/underwater/tiles.4bpp.lz"); const u16 gTilesetPalettes_Underwater[][16] = { - INCBIN_U16("data/tilesets/secondary/underwater/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/underwater/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/underwater/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/underwater/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/underwater/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/underwater/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/underwater/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/underwater/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/underwater/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/underwater/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/underwater/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/underwater/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/underwater/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/underwater/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/underwater/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/underwater/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/underwater/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/underwater/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/underwater/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/underwater/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/underwater/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/underwater/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/underwater/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/underwater/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/underwater/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/underwater/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/underwater/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/underwater/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/underwater/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/underwater/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/underwater/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/underwater/palettes/15.gbapal"), }; const u32 gTilesetTiles_GenericBuilding[] = INCBIN_U32("data/tilesets/secondary/generic_building/tiles.4bpp.lz"); const u16 gTilesetPalettes_GenericBuilding[][16] = { - INCBIN_U16("data/tilesets/secondary/generic_building/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/generic_building/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/generic_building/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/generic_building/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/generic_building/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/generic_building/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/generic_building/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/generic_building/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/generic_building/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/generic_building/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/generic_building/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/generic_building/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/generic_building/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/generic_building/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/generic_building/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/generic_building/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/generic_building/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/generic_building/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/generic_building/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/generic_building/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/generic_building/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/generic_building/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/generic_building/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/generic_building/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/generic_building/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/generic_building/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/generic_building/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/generic_building/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/generic_building/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/generic_building/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/generic_building/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/generic_building/palettes/15.gbapal"), }; const u32 gTilesetTiles_MauvilleGameCorner[] = INCBIN_U32("data/tilesets/secondary/mauville_game_corner/tiles.4bpp.lz"); const u16 gTilesetPalettes_MauvilleGameCorner[][16] = { - INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_game_corner/palettes/15.gbapal"), }; const u32 gTilesetTiles_Unused2[] = INCBIN_U32("data/tilesets/secondary/unused_2/tiles.4bpp.lz"); const u16 gTilesetPalettes_Unused2[][16] = { - INCBIN_U16("data/tilesets/secondary/unused_2/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_2/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_2/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_2/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_2/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_2/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_2/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_2/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_2/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_2/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_2/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_2/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_2/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_2/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_2/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/unused_2/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_2/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_2/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_2/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_2/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_2/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_2/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_2/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_2/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_2/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_2/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_2/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_2/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_2/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_2/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_2/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/unused_2/palettes/15.gbapal"), }; const u32 gTilesetTiles_RustboroGym[] = INCBIN_U32("data/tilesets/secondary/rustboro_gym/tiles.4bpp.lz"); const u16 gTilesetPalettes_RustboroGym[][16] = { - INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/rustboro_gym/palettes/15.gbapal"), }; const u32 gTilesetTiles_DewfordGym[] = INCBIN_U32("data/tilesets/secondary/dewford_gym/tiles.4bpp.lz"); const u16 gTilesetPalettes_DewfordGym[][16] = { - INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/dewford_gym/palettes/15.gbapal"), }; const u32 gTilesetTiles_MauvilleGym[] = INCBIN_U32("data/tilesets/secondary/mauville_gym/tiles.4bpp.lz"); const u16 gTilesetPalettes_MauvilleGym[][16] = { - INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/mauville_gym/palettes/15.gbapal"), }; const u32 gTilesetTiles_LavaridgeGym[] = INCBIN_U32("data/tilesets/secondary/lavaridge_gym/tiles.4bpp.lz"); const u16 gTilesetPalettes_LavaridgeGym[][16] = { - INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/lavaridge_gym/palettes/15.gbapal"), }; const u32 gTilesetTiles_PetalburgGym[] = INCBIN_U32("data/tilesets/secondary/petalburg_gym/tiles.4bpp.lz"); const u16 gTilesetPalettes_PetalburgGym[][16] = { - INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/petalburg_gym/palettes/15.gbapal"), }; const u32 gTilesetTiles_FortreeGym[] = INCBIN_U32("data/tilesets/secondary/fortree_gym/tiles.4bpp.lz"); const u16 gTilesetPalettes_FortreeGym[][16] = { - INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/fortree_gym/palettes/15.gbapal"), }; const u32 gTilesetTiles_MossdeepGym[] = INCBIN_U32("data/tilesets/secondary/mossdeep_gym/tiles.4bpp.lz"); const u16 gTilesetPalettes_MossdeepGym[][16] = { - INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_gym/palettes/15.gbapal"), }; const u32 gTilesetTiles_SootopolisGym[] = INCBIN_U32("data/tilesets/secondary/sootopolis_gym/tiles.4bpp.lz"); const u16 gTilesetPalettes_SootopolisGym[][16] = { - INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/sootopolis_gym/palettes/15.gbapal"), }; const u32 gTilesetTiles_TrickHousePuzzle[] = INCBIN_U32("data/tilesets/secondary/trick_house_puzzle/tiles.4bpp.lz"); const u16 gTilesetPalettes_TrickHousePuzzle[][16] = { - INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/trick_house_puzzle/palettes/15.gbapal"), }; const u32 gTilesetTiles_InsideShip[] = INCBIN_U32("data/tilesets/secondary/inside_ship/tiles.4bpp.lz"); const u16 gTilesetPalettes_InsideShip[][16] = { - INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/inside_ship/palettes/15.gbapal"), }; const u32 gTilesetTiles_SecretBase[] = INCBIN_U32("data/tilesets/primary/secret_base/tiles.4bpp"); @@ -1243,394 +1243,394 @@ const u32 gTilesetTiles_UnknownSecretBase[] = INCBIN_U32("data/tilesets/primary/ const u16 gTilesetPalettes_SecretBase[][16] = { - INCBIN_U16("data/tilesets/primary/secret_base/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/primary/secret_base/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/primary/secret_base/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/primary/secret_base/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/primary/secret_base/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/primary/secret_base/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/primary/secret_base/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/primary/secret_base/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/primary/secret_base/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/primary/secret_base/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/primary/secret_base/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/primary/secret_base/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/primary/secret_base/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/primary/secret_base/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/primary/secret_base/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/primary/secret_base/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/primary/secret_base/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/primary/secret_base/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/primary/secret_base/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/primary/secret_base/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/primary/secret_base/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/primary/secret_base/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/primary/secret_base/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/primary/secret_base/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/primary/secret_base/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/primary/secret_base/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/primary/secret_base/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/primary/secret_base/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/primary/secret_base/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/primary/secret_base/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/primary/secret_base/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/primary/secret_base/palettes/15.gbapal"), }; const u32 gTilesetTiles_EliteFour[] = INCBIN_U32("data/tilesets/secondary/elite_four/tiles.4bpp.lz"); const u16 gTilesetPalettes_EliteFour[][16] = { - INCBIN_U16("data/tilesets/secondary/elite_four/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/elite_four/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/elite_four/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/elite_four/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/elite_four/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/elite_four/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/elite_four/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/elite_four/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/elite_four/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/elite_four/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/elite_four/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/elite_four/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/elite_four/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/elite_four/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/elite_four/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/elite_four/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/elite_four/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/elite_four/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/elite_four/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/elite_four/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/elite_four/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/elite_four/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/elite_four/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/elite_four/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/elite_four/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/elite_four/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/elite_four/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/elite_four/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/elite_four/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/elite_four/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/elite_four/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/elite_four/palettes/15.gbapal"), }; const u32 gTilesetTiles_BattleFrontier[] = INCBIN_U32("data/tilesets/secondary/battle_frontier/tiles.4bpp.lz"); const u16 gTilesetPalettes_BattleFrontier[][16] = { - INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier/palettes/15.gbapal"), }; const u32 gTilesetTiles_BattlePalace[] = INCBIN_U32("data/tilesets/secondary/battle_palace/tiles.4bpp.lz"); const u16 gTilesetPalettes_BattlePalace[][16] = { - INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_palace/palettes/15.gbapal"), }; const u32 gTilesetTiles_BattleDome[] = INCBIN_U32("data/tilesets/secondary/battle_dome/tiles.4bpp.lz"); const u16 gTilesetPalettes_BattleDome[][16] = { - INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_dome/palettes/15.gbapal"), }; const u32 gTilesetTiles_BattleFactory[] = INCBIN_U32("data/tilesets/secondary/battle_factory/tiles.4bpp.lz"); const u16 gTilesetPalettes_BattleFactory[][16] = { - INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_factory/palettes/15.gbapal"), }; const u32 gTilesetTiles_BattlePike[] = INCBIN_U32("data/tilesets/secondary/battle_pike/tiles.4bpp.lz"); const u16 gTilesetPalettes_BattlePike[][16] = { - INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pike/palettes/15.gbapal"), }; const u32 gTilesetTiles_BattleArena[] = INCBIN_U32("data/tilesets/secondary/battle_arena/tiles.4bpp.lz"); const u16 gTilesetPalettes_BattleArena[][16] = { - INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_arena/palettes/15.gbapal"), }; const u32 gTilesetTiles_BattlePyramid[] = INCBIN_U32("data/tilesets/secondary/battle_pyramid/tiles.4bpp.lz"); const u16 gTilesetPalettes_BattlePyramid[][16] = { - INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_pyramid/palettes/15.gbapal"), }; const u32 gTilesetTiles_MirageTower[] = INCBIN_U32("data/tilesets/secondary/mirage_tower/tiles.4bpp.lz"); const u16 gTilesetPalettes_MirageTower[][16] = { - INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/mirage_tower/palettes/15.gbapal"), }; const u32 gTilesetTiles_MossdeepGameCorner[] = INCBIN_U32("data/tilesets/secondary/mossdeep_game_corner/tiles.4bpp.lz"); const u16 gTilesetPalettes_MossdeepGameCorner[][16] = { - INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/mossdeep_game_corner/palettes/15.gbapal"), }; const u32 gTilesetTiles_IslandHarbor[] = INCBIN_U32("data/tilesets/secondary/island_harbor/tiles.4bpp.lz"); const u16 gTilesetPalettes_IslandHarbor[][16] = { - INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/island_harbor/palettes/15.gbapal"), }; const u32 gTilesetTiles_TrainerHill[] = INCBIN_U32("data/tilesets/secondary/trainer_hill/tiles.4bpp.lz"); const u16 gTilesetPalettes_TrainerHill[][16] = { - INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/trainer_hill/palettes/15.gbapal"), }; const u32 gTilesetTiles_NavelRock[] = INCBIN_U32("data/tilesets/secondary/navel_rock/tiles.4bpp.lz"); const u16 gTilesetPalettes_NavelRock[][16] = { - INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/navel_rock/palettes/15.gbapal"), }; const u32 gTilesetTiles_BattleFrontierRankingHall[] = INCBIN_U32("data/tilesets/secondary/battle_frontier_ranking_hall/tiles.4bpp.lz"); const u16 gTilesetPalettes_BattleFrontierRankingHall[][16] = { - INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_frontier_ranking_hall/palettes/15.gbapal"), }; const u32 gTilesetTiles_BattleTent[] = INCBIN_U32("data/tilesets/secondary/battle_tent/tiles.4bpp.lz"); const u16 gTilesetPalettes_BattleTent[][16] = { - INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/battle_tent/palettes/15.gbapal"), }; const u32 gTilesetTiles_MysteryEventsHouse[] = INCBIN_U32("data/tilesets/secondary/mystery_events_house/tiles.4bpp.lz"); const u16 gTilesetPalettes_MysteryEventsHouse[][16] = { - INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/mystery_events_house/palettes/15.gbapal"), }; const u16 gTilesetPalettes_UnionRoom[][16] = { - INCBIN_U16("data/tilesets/secondary/union_room/palettes/00.gbapal"), - INCBIN_U16("data/tilesets/secondary/union_room/palettes/01.gbapal"), - INCBIN_U16("data/tilesets/secondary/union_room/palettes/02.gbapal"), - INCBIN_U16("data/tilesets/secondary/union_room/palettes/03.gbapal"), - INCBIN_U16("data/tilesets/secondary/union_room/palettes/04.gbapal"), - INCBIN_U16("data/tilesets/secondary/union_room/palettes/05.gbapal"), - INCBIN_U16("data/tilesets/secondary/union_room/palettes/06.gbapal"), - INCBIN_U16("data/tilesets/secondary/union_room/palettes/07.gbapal"), - INCBIN_U16("data/tilesets/secondary/union_room/palettes/08.gbapal"), - INCBIN_U16("data/tilesets/secondary/union_room/palettes/09.gbapal"), - INCBIN_U16("data/tilesets/secondary/union_room/palettes/10.gbapal"), - INCBIN_U16("data/tilesets/secondary/union_room/palettes/11.gbapal"), - INCBIN_U16("data/tilesets/secondary/union_room/palettes/12.gbapal"), - INCBIN_U16("data/tilesets/secondary/union_room/palettes/13.gbapal"), - INCBIN_U16("data/tilesets/secondary/union_room/palettes/14.gbapal"), - INCBIN_U16("data/tilesets/secondary/union_room/palettes/15.gbapal"), + INCBIN_U16("data/tilesets/secondary/union_room/palettes/00.gbapal"), + INCBIN_U16("data/tilesets/secondary/union_room/palettes/01.gbapal"), + INCBIN_U16("data/tilesets/secondary/union_room/palettes/02.gbapal"), + INCBIN_U16("data/tilesets/secondary/union_room/palettes/03.gbapal"), + INCBIN_U16("data/tilesets/secondary/union_room/palettes/04.gbapal"), + INCBIN_U16("data/tilesets/secondary/union_room/palettes/05.gbapal"), + INCBIN_U16("data/tilesets/secondary/union_room/palettes/06.gbapal"), + INCBIN_U16("data/tilesets/secondary/union_room/palettes/07.gbapal"), + INCBIN_U16("data/tilesets/secondary/union_room/palettes/08.gbapal"), + INCBIN_U16("data/tilesets/secondary/union_room/palettes/09.gbapal"), + INCBIN_U16("data/tilesets/secondary/union_room/palettes/10.gbapal"), + INCBIN_U16("data/tilesets/secondary/union_room/palettes/11.gbapal"), + INCBIN_U16("data/tilesets/secondary/union_room/palettes/12.gbapal"), + INCBIN_U16("data/tilesets/secondary/union_room/palettes/13.gbapal"), + INCBIN_U16("data/tilesets/secondary/union_room/palettes/14.gbapal"), + INCBIN_U16("data/tilesets/secondary/union_room/palettes/15.gbapal"), }; const u32 gTilesetTiles_UnionRoom[] = INCBIN_U32("data/tilesets/secondary/union_room/tiles.4bpp.lz"); diff --git a/src/data/trainers.h b/src/data/trainers.h index 6215baf1c4..ebc85e9cab 100644 --- a/src/data/trainers.h +++ b/src/data/trainers.h @@ -8,554 +8,389 @@ #line 1 "src/data/trainers.party" -#line 11 +#line 76 [TRAINER_NONE] = { -#line 13 +#line 78 .trainerClass = TRAINER_CLASS_PKMN_TRAINER_1, -#line 14 +#line 79 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 16 +#line 81 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 17 +#line 82 .doubleBattle = FALSE, .partySize = 0, .party = (const struct TrainerMon[]) { }, }, -#line 19 +#line 84 [TRAINER_SAWYER_1] = { -#line 20 +#line 85 .trainerName = _("SAWYER"), -#line 21 +#line 86 .trainerClass = TRAINER_CLASS_HIKER, -#line 22 +#line 87 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 24 +#line 89 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 25 +#line 90 .doubleBattle = FALSE, -#line 26 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 91 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 28 +#line 93 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 30 +#line 95 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 29 +#line 94 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 32 +#line 97 [TRAINER_GRUNT_AQUA_HIDEOUT_1] = { -#line 33 +#line 98 .trainerName = _("GRUNT"), -#line 34 +#line 99 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 35 +#line 100 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 37 +#line 102 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 38 +#line 103 .doubleBattle = FALSE, -#line 39 +#line 104 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 41 +#line 106 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 43 +#line 108 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 42 +#line 107 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 45 +#line 110 [TRAINER_GRUNT_AQUA_HIDEOUT_2] = { -#line 46 +#line 111 .trainerName = _("GRUNT"), -#line 47 +#line 112 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 48 +#line 113 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 50 +#line 115 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 51 +#line 116 .doubleBattle = FALSE, -#line 52 +#line 117 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 54 - .species = SPECIES_ZUBAT, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 56 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 55 - .lvl = 31, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 58 - .species = SPECIES_CARVANHA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 60 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 59 - .lvl = 31, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 62 - [TRAINER_GRUNT_AQUA_HIDEOUT_3] = - { -#line 63 - .trainerName = _("GRUNT"), -#line 64 - .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 65 - .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, - .encounterMusic_gender = -#line 67 - TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 68 - .doubleBattle = FALSE, -#line 69 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 71 - .species = SPECIES_ZUBAT, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 73 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 72 - .lvl = 32, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 75 - [TRAINER_GRUNT_AQUA_HIDEOUT_4] = - { -#line 76 - .trainerName = _("GRUNT"), -#line 77 - .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 78 - .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, - .encounterMusic_gender = -#line 80 - TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 81 - .doubleBattle = FALSE, -#line 82 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 84 - .species = SPECIES_CARVANHA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 86 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 85 - .lvl = 32, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 88 - [TRAINER_GRUNT_SEAFLOOR_CAVERN_1] = - { -#line 89 - .trainerName = _("GRUNT"), -#line 90 - .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 91 - .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, - .encounterMusic_gender = -#line 93 - TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 94 - .doubleBattle = FALSE, -#line 95 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 97 - .species = SPECIES_POOCHYENA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 99 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 98 - .lvl = 36, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 101 - [TRAINER_GRUNT_SEAFLOOR_CAVERN_2] = - { -#line 102 - .trainerName = _("GRUNT"), -#line 103 - .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 104 - .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, - .encounterMusic_gender = -#line 106 - TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 107 - .doubleBattle = FALSE, -#line 108 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 110 - .species = SPECIES_CARVANHA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 112 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 111 - .lvl = 36, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 114 - [TRAINER_GRUNT_SEAFLOOR_CAVERN_3] = - { -#line 115 - .trainerName = _("GRUNT"), -#line 116 - .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 117 - .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, - .encounterMusic_gender = #line 119 - TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 120 - .doubleBattle = FALSE, + .species = SPECIES_ZUBAT, + .gender = TRAINER_MON_RANDOM_GENDER, #line 121 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 120 + .lvl = 31, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, { #line 123 - .species = SPECIES_ZUBAT, + .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, #line 125 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 124 - .lvl = 36, + .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, #line 127 - [TRAINER_GABRIELLE_1] = + [TRAINER_GRUNT_AQUA_HIDEOUT_3] = { #line 128 - .trainerName = _("GABRIELLE"), + .trainerName = _("GRUNT"), #line 129 - .trainerClass = TRAINER_CLASS_PKMN_BREEDER, + .trainerClass = TRAINER_CLASS_TEAM_AQUA, #line 130 - .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, + .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 131 -F_TRAINER_FEMALE | #line 132 - TRAINER_ENCOUNTER_MUSIC_FEMALE, + TRAINER_ENCOUNTER_MUSIC_AQUA, #line 133 .doubleBattle = FALSE, #line 134 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 6, - .party = (const struct TrainerMon[]) - { - { -#line 136 - .species = SPECIES_SKITTY, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 138 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 137 - .lvl = 26, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 140 - .species = SPECIES_POOCHYENA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 142 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 141 - .lvl = 26, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 144 - .species = SPECIES_ZIGZAGOON, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 146 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 145 - .lvl = 26, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 148 - .species = SPECIES_LOTAD, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 150 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 149 - .lvl = 26, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 152 - .species = SPECIES_SEEDOT, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 154 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 153 - .lvl = 26, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 156 - .species = SPECIES_TAILLOW, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 158 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 157 - .lvl = 26, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 160 - [TRAINER_GRUNT_PETALBURG_WOODS] = - { -#line 161 - .trainerName = _("GRUNT"), -#line 162 - .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 163 - .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, - .encounterMusic_gender = -#line 165 - TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 166 - .doubleBattle = FALSE, -#line 167 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 169 +#line 136 + .species = SPECIES_ZUBAT, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 138 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 137 + .lvl = 32, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 140 + [TRAINER_GRUNT_AQUA_HIDEOUT_4] = + { +#line 141 + .trainerName = _("GRUNT"), +#line 142 + .trainerClass = TRAINER_CLASS_TEAM_AQUA, +#line 143 + .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, + .encounterMusic_gender = +#line 145 + TRAINER_ENCOUNTER_MUSIC_AQUA, +#line 146 + .doubleBattle = FALSE, +#line 147 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 149 + .species = SPECIES_CARVANHA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 151 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 150 + .lvl = 32, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 153 + [TRAINER_GRUNT_SEAFLOOR_CAVERN_1] = + { +#line 154 + .trainerName = _("GRUNT"), +#line 155 + .trainerClass = TRAINER_CLASS_TEAM_AQUA, +#line 156 + .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, + .encounterMusic_gender = +#line 158 + TRAINER_ENCOUNTER_MUSIC_AQUA, +#line 159 + .doubleBattle = FALSE, +#line 160 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 162 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 171 +#line 164 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 170 - .lvl = 9, +#line 163 + .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 173 - [TRAINER_MARCEL] = +#line 166 + [TRAINER_GRUNT_SEAFLOOR_CAVERN_2] = { -#line 174 - .trainerName = _("MARCEL"), -#line 175 - .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 176 - .trainerPic = TRAINER_PIC_COOLTRAINER_M, +#line 167 + .trainerName = _("GRUNT"), +#line 168 + .trainerClass = TRAINER_CLASS_TEAM_AQUA, +#line 169 + .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 178 - TRAINER_ENCOUNTER_MUSIC_COOL, -#line 179 - .items = { ITEM_HYPER_POTION }, -#line 180 +#line 171 + TRAINER_ENCOUNTER_MUSIC_AQUA, +#line 172 .doubleBattle = FALSE, -#line 181 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 2, +#line 173 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 183 - .species = SPECIES_MANECTRIC, +#line 175 + .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 185 - .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 184 - .lvl = 29, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 187 - .species = SPECIES_SHIFTRY, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 189 - .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 188 - .lvl = 29, +#line 177 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 176 + .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 191 - [TRAINER_ALBERTO] = +#line 179 + [TRAINER_GRUNT_SEAFLOOR_CAVERN_3] = { +#line 180 + .trainerName = _("GRUNT"), +#line 181 + .trainerClass = TRAINER_CLASS_TEAM_AQUA, +#line 182 + .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, + .encounterMusic_gender = +#line 184 + TRAINER_ENCOUNTER_MUSIC_AQUA, +#line 185 + .doubleBattle = FALSE, +#line 186 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 188 + .species = SPECIES_ZUBAT, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 190 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 189 + .lvl = 36, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, #line 192 - .trainerName = _("ALBERTO"), + [TRAINER_GABRIELLE_1] = + { #line 193 - .trainerClass = TRAINER_CLASS_BIRD_KEEPER, + .trainerName = _("GABRIELLE"), #line 194 - .trainerPic = TRAINER_PIC_BIRD_KEEPER, + .trainerClass = TRAINER_CLASS_PKMN_BREEDER, +#line 195 + .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = #line 196 - TRAINER_ENCOUNTER_MUSIC_COOL, +F_TRAINER_FEMALE | #line 197 - .doubleBattle = FALSE, + TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 198 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 200 - .species = SPECIES_PELIPPER, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 202 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 201 - .lvl = 30, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 204 - .species = SPECIES_XATU, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 206 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 205 - .lvl = 30, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 208 - [TRAINER_ED] = - { -#line 209 - .trainerName = _("ED"), -#line 210 - .trainerClass = TRAINER_CLASS_COLLECTOR, -#line 211 - .trainerPic = TRAINER_PIC_COLLECTOR, - .encounterMusic_gender = -#line 213 - TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 214 .doubleBattle = FALSE, -#line 215 +#line 199 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, + .partySize = 6, .party = (const struct TrainerMon[]) { { +#line 201 + .species = SPECIES_SKITTY, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 203 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 202 + .lvl = 26, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 205 + .species = SPECIES_POOCHYENA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 207 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 206 + .lvl = 26, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 209 + .species = SPECIES_ZIGZAGOON, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 211 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 210 + .lvl = 26, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 213 + .species = SPECIES_LOTAD, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 215 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 214 + .lvl = 26, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { #line 217 - .species = SPECIES_ZANGOOSE, + .species = SPECIES_SEEDOT, .gender = TRAINER_MON_RANDOM_GENDER, #line 219 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 218 - .lvl = 30, + .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { #line 221 - .species = SPECIES_SEVIPER, + .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, #line 223 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 222 - .lvl = 30, + .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, #line 225 - [TRAINER_GRUNT_SEAFLOOR_CAVERN_4] = + [TRAINER_GRUNT_PETALBURG_WOODS] = { #line 226 .trainerName = _("GRUNT"), #line 227 .trainerClass = TRAINER_CLASS_TEAM_AQUA, #line 228 - .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, + .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 229 -F_TRAINER_FEMALE | #line 230 TRAINER_ENCOUNTER_MUSIC_AQUA, #line 231 @@ -567,766 +402,764 @@ F_TRAINER_FEMALE | { { #line 234 - .species = SPECIES_CARVANHA, + .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, #line 236 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 235 - .lvl = 36, + .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, #line 238 - [TRAINER_DECLAN] = + [TRAINER_MARCEL] = { #line 239 - .trainerName = _("DECLAN"), + .trainerName = _("MARCEL"), #line 240 - .trainerClass = TRAINER_CLASS_SWIMMER_M, + .trainerClass = TRAINER_CLASS_COOLTRAINER, #line 241 - .trainerPic = TRAINER_PIC_SWIMMER_M, + .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = #line 243 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, + TRAINER_ENCOUNTER_MUSIC_COOL, #line 244 - .doubleBattle = FALSE, + .items = { ITEM_HYPER_POTION }, #line 245 + .doubleBattle = FALSE, +#line 246 + .aiFlags = AI_FLAG_BASIC_TRAINER, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 248 + .species = SPECIES_MANECTRIC, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 250 + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), +#line 249 + .lvl = 29, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 252 + .species = SPECIES_SHIFTRY, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 254 + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), +#line 253 + .lvl = 29, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 256 + [TRAINER_ALBERTO] = + { +#line 257 + .trainerName = _("ALBERTO"), +#line 258 + .trainerClass = TRAINER_CLASS_BIRD_KEEPER, +#line 259 + .trainerPic = TRAINER_PIC_BIRD_KEEPER, + .encounterMusic_gender = +#line 261 + TRAINER_ENCOUNTER_MUSIC_COOL, +#line 262 + .doubleBattle = FALSE, +#line 263 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 265 + .species = SPECIES_PELIPPER, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 267 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 266 + .lvl = 30, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 269 + .species = SPECIES_XATU, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 271 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 270 + .lvl = 30, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 273 + [TRAINER_ED] = + { +#line 274 + .trainerName = _("ED"), +#line 275 + .trainerClass = TRAINER_CLASS_COLLECTOR, +#line 276 + .trainerPic = TRAINER_PIC_COLLECTOR, + .encounterMusic_gender = +#line 278 + TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, +#line 279 + .doubleBattle = FALSE, +#line 280 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 282 + .species = SPECIES_ZANGOOSE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 284 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 283 + .lvl = 30, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 286 + .species = SPECIES_SEVIPER, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 288 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 287 + .lvl = 30, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 290 + [TRAINER_GRUNT_SEAFLOOR_CAVERN_4] = + { +#line 291 + .trainerName = _("GRUNT"), +#line 292 + .trainerClass = TRAINER_CLASS_TEAM_AQUA, +#line 293 + .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, + .encounterMusic_gender = +#line 294 +F_TRAINER_FEMALE | +#line 295 + TRAINER_ENCOUNTER_MUSIC_AQUA, +#line 296 + .doubleBattle = FALSE, +#line 297 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 247 +#line 299 + .species = SPECIES_CARVANHA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 301 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 300 + .lvl = 36, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 303 + [TRAINER_DECLAN] = + { +#line 304 + .trainerName = _("DECLAN"), +#line 305 + .trainerClass = TRAINER_CLASS_SWIMMER_M, +#line 306 + .trainerPic = TRAINER_PIC_SWIMMER_M, + .encounterMusic_gender = +#line 308 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 309 + .doubleBattle = FALSE, +#line 310 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 312 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 249 +#line 314 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 248 +#line 313 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 251 +#line 316 [TRAINER_GRUNT_RUSTURF_TUNNEL] = { -#line 252 +#line 317 .trainerName = _("GRUNT"), -#line 253 +#line 318 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 254 +#line 319 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 256 +#line 321 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 257 +#line 322 .doubleBattle = FALSE, -#line 258 +#line 323 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 260 +#line 325 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 262 +#line 327 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 261 +#line 326 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 264 +#line 329 [TRAINER_GRUNT_WEATHER_INST_1] = { -#line 265 +#line 330 .trainerName = _("GRUNT"), -#line 266 +#line 331 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 267 +#line 332 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 269 +#line 334 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 270 +#line 335 .doubleBattle = FALSE, -#line 271 +#line 336 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 273 +#line 338 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 275 +#line 340 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 274 +#line 339 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 277 +#line 342 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 279 +#line 344 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 278 +#line 343 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 281 +#line 346 [TRAINER_GRUNT_WEATHER_INST_2] = { -#line 282 +#line 347 .trainerName = _("GRUNT"), -#line 283 +#line 348 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 284 +#line 349 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 286 +#line 351 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 287 +#line 352 .doubleBattle = FALSE, -#line 288 +#line 353 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 290 +#line 355 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 292 +#line 357 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 291 +#line 356 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 294 +#line 359 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 296 +#line 361 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 295 +#line 360 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 298 +#line 363 [TRAINER_GRUNT_WEATHER_INST_3] = { -#line 299 +#line 364 .trainerName = _("GRUNT"), -#line 300 +#line 365 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 301 +#line 366 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 303 +#line 368 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 304 +#line 369 .doubleBattle = FALSE, -#line 305 +#line 370 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 307 +#line 372 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 309 +#line 374 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 308 +#line 373 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 311 +#line 376 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 313 +#line 378 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 312 +#line 377 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 315 +#line 380 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 317 +#line 382 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 316 +#line 381 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 319 +#line 384 [TRAINER_GRUNT_MUSEUM_1] = { -#line 320 +#line 385 .trainerName = _("GRUNT"), -#line 321 +#line 386 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 322 +#line 387 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 324 +#line 389 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 325 +#line 390 .doubleBattle = FALSE, -#line 326 +#line 391 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 328 +#line 393 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 330 +#line 395 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 329 +#line 394 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 332 +#line 397 [TRAINER_GRUNT_MUSEUM_2] = { -#line 333 +#line 398 .trainerName = _("GRUNT"), -#line 334 +#line 399 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 335 +#line 400 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 337 +#line 402 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 338 +#line 403 .doubleBattle = FALSE, -#line 339 +#line 404 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 341 +#line 406 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 343 +#line 408 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 342 +#line 407 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 345 +#line 410 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 347 +#line 412 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 346 +#line 411 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 349 +#line 414 [TRAINER_GRUNT_SPACE_CENTER_1] = { -#line 350 +#line 415 .trainerName = _("GRUNT"), -#line 351 +#line 416 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 352 +#line 417 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 354 +#line 419 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 355 +#line 420 .doubleBattle = FALSE, -#line 356 +#line 421 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 358 +#line 423 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 360 +#line 425 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 359 +#line 424 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 362 +#line 427 [TRAINER_GRUNT_MT_PYRE_1] = { -#line 363 +#line 428 .trainerName = _("GRUNT"), -#line 364 +#line 429 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 365 +#line 430 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 367 +#line 432 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 368 +#line 433 .doubleBattle = FALSE, -#line 369 +#line 434 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 371 +#line 436 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 373 +#line 438 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 372 +#line 437 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 375 +#line 440 [TRAINER_GRUNT_MT_PYRE_2] = { -#line 376 +#line 441 .trainerName = _("GRUNT"), -#line 377 +#line 442 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 378 +#line 443 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 380 +#line 445 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 381 +#line 446 .doubleBattle = FALSE, -#line 382 +#line 447 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 384 +#line 449 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 386 +#line 451 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 385 +#line 450 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 388 +#line 453 [TRAINER_GRUNT_MT_PYRE_3] = { -#line 389 +#line 454 .trainerName = _("GRUNT"), -#line 390 +#line 455 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 391 +#line 456 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 393 +#line 458 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 394 +#line 459 .doubleBattle = FALSE, -#line 395 +#line 460 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 397 +#line 462 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 399 +#line 464 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 398 +#line 463 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 401 +#line 466 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 403 +#line 468 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 402 +#line 467 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 405 +#line 470 [TRAINER_GRUNT_WEATHER_INST_4] = { -#line 406 +#line 471 .trainerName = _("GRUNT"), -#line 407 +#line 472 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 408 +#line 473 .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = -#line 409 +#line 474 F_TRAINER_FEMALE | -#line 410 +#line 475 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 411 +#line 476 .doubleBattle = FALSE, -#line 412 +#line 477 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 414 +#line 479 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 416 +#line 481 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 415 +#line 480 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 418 +#line 483 [TRAINER_GRUNT_AQUA_HIDEOUT_5] = { -#line 419 +#line 484 .trainerName = _("GRUNT"), -#line 420 +#line 485 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 421 +#line 486 .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = -#line 422 +#line 487 F_TRAINER_FEMALE | -#line 423 +#line 488 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 424 +#line 489 .doubleBattle = FALSE, -#line 425 +#line 490 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 427 +#line 492 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 429 +#line 494 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 428 +#line 493 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 431 +#line 496 [TRAINER_GRUNT_AQUA_HIDEOUT_6] = { -#line 432 +#line 497 .trainerName = _("GRUNT"), -#line 433 +#line 498 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 434 +#line 499 .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = -#line 435 +#line 500 F_TRAINER_FEMALE | -#line 436 - TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 437 - .doubleBattle = FALSE, -#line 438 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 440 - .species = SPECIES_ZUBAT, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 442 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 441 - .lvl = 32, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 444 - [TRAINER_FREDRICK] = - { -#line 445 - .trainerName = _("FREDRICK"), -#line 446 - .trainerClass = TRAINER_CLASS_EXPERT, -#line 447 - .trainerPic = TRAINER_PIC_EXPERT_M, - .encounterMusic_gender = -#line 449 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 450 - .doubleBattle = FALSE, -#line 451 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 453 - .species = SPECIES_MAKUHITA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 455 - .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 454 - .lvl = 30, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 457 - .species = SPECIES_MACHOKE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 459 - .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 458 - .lvl = 30, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 461 - [TRAINER_MATT] = - { -#line 462 - .trainerName = _("MATT"), -#line 463 - .trainerClass = TRAINER_CLASS_AQUA_ADMIN, -#line 464 - .trainerPic = TRAINER_PIC_AQUA_ADMIN_M, - .encounterMusic_gender = -#line 466 - TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 467 - .items = { ITEM_SUPER_POTION }, -#line 468 - .doubleBattle = FALSE, -#line 469 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 471 - .species = SPECIES_MIGHTYENA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 473 - .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 472 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 475 - .species = SPECIES_GOLBAT, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 477 - .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 476 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 479 - [TRAINER_ZANDER] = - { -#line 480 - .trainerName = _("ZANDER"), -#line 481 - .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 482 - .trainerPic = TRAINER_PIC_BLACK_BELT, - .encounterMusic_gender = -#line 484 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 485 - .doubleBattle = FALSE, -#line 486 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 488 - .species = SPECIES_HARIYAMA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 490 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 489 - .lvl = 31, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 492 - [TRAINER_SHELLY_WEATHER_INSTITUTE] = - { -#line 493 - .trainerName = _("SHELLY"), -#line 494 - .trainerClass = TRAINER_CLASS_AQUA_ADMIN, -#line 495 - .trainerPic = TRAINER_PIC_AQUA_ADMIN_F, - .encounterMusic_gender = -#line 496 -F_TRAINER_FEMALE | -#line 497 - TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 498 - .doubleBattle = FALSE, -#line 499 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { #line 501 - .species = SPECIES_CARVANHA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 503 - .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), + TRAINER_ENCOUNTER_MUSIC_AQUA, #line 502 - .lvl = 28, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, + .doubleBattle = FALSE, +#line 503 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { { #line 505 - .species = SPECIES_MIGHTYENA, + .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, #line 507 - .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 506 - .lvl = 28, + .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, #line 509 - [TRAINER_SHELLY_SEAFLOOR_CAVERN] = + [TRAINER_FREDRICK] = { #line 510 - .trainerName = _("SHELLY"), + .trainerName = _("FREDRICK"), #line 511 - .trainerClass = TRAINER_CLASS_AQUA_ADMIN, + .trainerClass = TRAINER_CLASS_EXPERT, #line 512 - .trainerPic = TRAINER_PIC_AQUA_ADMIN_F, + .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 513 -F_TRAINER_FEMALE | #line 514 - TRAINER_ENCOUNTER_MUSIC_AQUA, + TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 515 .doubleBattle = FALSE, #line 516 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { #line 518 - .species = SPECIES_SHARPEDO, + .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, #line 520 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), #line 519 - .lvl = 37, + .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { #line 522 - .species = SPECIES_MIGHTYENA, + .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, #line 524 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), #line 523 - .lvl = 37, + .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, #line 526 - [TRAINER_ARCHIE] = + [TRAINER_MATT] = { #line 527 - .trainerName = _("ARCHIE"), + .trainerName = _("MATT"), #line 528 - .trainerClass = TRAINER_CLASS_AQUA_LEADER, + .trainerClass = TRAINER_CLASS_AQUA_ADMIN, #line 529 - .trainerPic = TRAINER_PIC_AQUA_LEADER_ARCHIE, + .trainerPic = TRAINER_PIC_AQUA_ADMIN_M, .encounterMusic_gender = #line 531 TRAINER_ENCOUNTER_MUSIC_AQUA, #line 532 - .items = { ITEM_SUPER_POTION, ITEM_SUPER_POTION }, + .items = { ITEM_SUPER_POTION }, #line 533 .doubleBattle = FALSE, #line 534 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 3, + .aiFlags = AI_FLAG_BASIC_TRAINER, + .partySize = 2, .party = (const struct TrainerMon[]) { { @@ -1334,514 +1167,681 @@ F_TRAINER_FEMALE | .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, #line 538 - .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), #line 537 - .lvl = 41, + .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { #line 540 - .species = SPECIES_CROBAT, + .species = SPECIES_GOLBAT, .gender = TRAINER_MON_RANDOM_GENDER, #line 542 - .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), #line 541 - .lvl = 41, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 544 - .species = SPECIES_SHARPEDO, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 546 - .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 545 - .lvl = 43, + .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 548 - [TRAINER_LEAH] = +#line 544 + [TRAINER_ZANDER] = { -#line 549 - .trainerName = _("LEAH"), -#line 550 - .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 551 - .trainerPic = TRAINER_PIC_HEX_MANIAC, +#line 545 + .trainerName = _("ZANDER"), +#line 546 + .trainerClass = TRAINER_CLASS_BLACK_BELT, +#line 547 + .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 552 -F_TRAINER_FEMALE | -#line 553 - TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 554 +#line 549 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 550 .doubleBattle = FALSE, -#line 555 +#line 551 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 557 - .species = SPECIES_SPOINK, +#line 553 + .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 559 +#line 555 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 558 +#line 554 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, +#line 557 + [TRAINER_SHELLY_WEATHER_INSTITUTE] = + { +#line 558 + .trainerName = _("SHELLY"), +#line 559 + .trainerClass = TRAINER_CLASS_AQUA_ADMIN, +#line 560 + .trainerPic = TRAINER_PIC_AQUA_ADMIN_F, + .encounterMusic_gender = #line 561 +F_TRAINER_FEMALE | +#line 562 + TRAINER_ENCOUNTER_MUSIC_AQUA, +#line 563 + .doubleBattle = FALSE, +#line 564 + .aiFlags = AI_FLAG_BASIC_TRAINER, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 566 + .species = SPECIES_CARVANHA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 568 + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), +#line 567 + .lvl = 28, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 570 + .species = SPECIES_MIGHTYENA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 572 + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), +#line 571 + .lvl = 28, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 574 + [TRAINER_SHELLY_SEAFLOOR_CAVERN] = + { +#line 575 + .trainerName = _("SHELLY"), +#line 576 + .trainerClass = TRAINER_CLASS_AQUA_ADMIN, +#line 577 + .trainerPic = TRAINER_PIC_AQUA_ADMIN_F, + .encounterMusic_gender = +#line 578 +F_TRAINER_FEMALE | +#line 579 + TRAINER_ENCOUNTER_MUSIC_AQUA, +#line 580 + .doubleBattle = FALSE, +#line 581 + .aiFlags = AI_FLAG_BASIC_TRAINER, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 583 + .species = SPECIES_SHARPEDO, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 585 + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), +#line 584 + .lvl = 37, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 587 + .species = SPECIES_MIGHTYENA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 589 + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), +#line 588 + .lvl = 37, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 591 + [TRAINER_ARCHIE] = + { +#line 592 + .trainerName = _("ARCHIE"), +#line 593 + .trainerClass = TRAINER_CLASS_AQUA_LEADER, +#line 594 + .trainerPic = TRAINER_PIC_AQUA_LEADER_ARCHIE, + .encounterMusic_gender = +#line 596 + TRAINER_ENCOUNTER_MUSIC_AQUA, +#line 597 + .items = { ITEM_SUPER_POTION, ITEM_SUPER_POTION }, +#line 598 + .doubleBattle = FALSE, +#line 599 + .aiFlags = AI_FLAG_BASIC_TRAINER, + .partySize = 3, + .party = (const struct TrainerMon[]) + { + { +#line 601 + .species = SPECIES_MIGHTYENA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 603 + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), +#line 602 + .lvl = 41, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 605 + .species = SPECIES_CROBAT, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 607 + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), +#line 606 + .lvl = 41, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 609 + .species = SPECIES_SHARPEDO, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 611 + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), +#line 610 + .lvl = 43, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 613 + [TRAINER_LEAH] = + { +#line 614 + .trainerName = _("LEAH"), +#line 615 + .trainerClass = TRAINER_CLASS_HEX_MANIAC, +#line 616 + .trainerPic = TRAINER_PIC_HEX_MANIAC, + .encounterMusic_gender = +#line 617 +F_TRAINER_FEMALE | +#line 618 + TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, +#line 619 + .doubleBattle = FALSE, +#line 620 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 622 + .species = SPECIES_SPOINK, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 624 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 623 + .lvl = 31, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 626 [TRAINER_DAISY] = { -#line 562 +#line 627 .trainerName = _("DAISY"), -#line 563 +#line 628 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 564 +#line 629 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 565 +#line 630 F_TRAINER_FEMALE | -#line 566 +#line 631 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 567 +#line 632 .doubleBattle = FALSE, -#line 568 +#line 633 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 570 +#line 635 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 572 +#line 637 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 571 +#line 636 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 574 +#line 639 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 576 +#line 641 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 575 +#line 640 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 578 +#line 643 [TRAINER_ROSE_1] = { -#line 579 +#line 644 .trainerName = _("ROSE"), -#line 580 +#line 645 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 581 +#line 646 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 582 +#line 647 F_TRAINER_FEMALE | -#line 583 +#line 648 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 584 +#line 649 .doubleBattle = FALSE, -#line 585 +#line 650 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 587 +#line 652 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 589 +#line 654 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 588 +#line 653 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 591 +#line 656 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 593 +#line 658 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 592 +#line 657 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 595 +#line 660 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 597 +#line 662 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 596 +#line 661 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 599 +#line 664 [TRAINER_FELIX] = { -#line 600 +#line 665 .trainerName = _("FELIX"), -#line 601 +#line 666 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 602 +#line 667 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 604 +#line 669 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 605 +#line 670 .items = { ITEM_FULL_RESTORE }, -#line 606 +#line 671 .doubleBattle = FALSE, -#line 607 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 672 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 609 +#line 674 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 611 +#line 676 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 610 +#line 675 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 612 +#line 677 MOVE_PSYCHIC, }, }, { -#line 614 +#line 679 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 616 +#line 681 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 615 +#line 680 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 617 +#line 682 MOVE_SKILL_SWAP, MOVE_EARTHQUAKE, }, }, }, }, -#line 620 +#line 685 [TRAINER_VIOLET] = { -#line 621 +#line 686 .trainerName = _("VIOLET"), -#line 622 +#line 687 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 623 +#line 688 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 624 +#line 689 F_TRAINER_FEMALE | -#line 625 +#line 690 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 626 +#line 691 .doubleBattle = FALSE, -#line 627 +#line 692 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 629 +#line 694 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 631 +#line 696 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 630 +#line 695 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 633 +#line 698 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 635 +#line 700 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 634 +#line 699 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 637 +#line 702 [TRAINER_ROSE_2] = { -#line 638 +#line 703 .trainerName = _("ROSE"), -#line 639 +#line 704 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 640 +#line 705 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 641 +#line 706 F_TRAINER_FEMALE | -#line 642 +#line 707 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 643 +#line 708 .doubleBattle = FALSE, -#line 644 +#line 709 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 646 +#line 711 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 648 +#line 713 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 647 +#line 712 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 650 +#line 715 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 652 +#line 717 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 651 +#line 716 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 654 +#line 719 [TRAINER_ROSE_3] = { -#line 655 +#line 720 .trainerName = _("ROSE"), -#line 656 +#line 721 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 657 +#line 722 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 658 +#line 723 F_TRAINER_FEMALE | -#line 659 +#line 724 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 660 +#line 725 .doubleBattle = FALSE, -#line 661 +#line 726 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 663 +#line 728 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 665 +#line 730 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 664 +#line 729 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 667 +#line 732 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 669 +#line 734 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 668 +#line 733 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 671 +#line 736 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 673 +#line 738 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 672 +#line 737 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 675 +#line 740 [TRAINER_ROSE_4] = { -#line 676 +#line 741 .trainerName = _("ROSE"), -#line 677 +#line 742 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 678 +#line 743 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 679 +#line 744 F_TRAINER_FEMALE | -#line 680 +#line 745 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 681 +#line 746 .doubleBattle = FALSE, -#line 682 +#line 747 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 684 +#line 749 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 686 +#line 751 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 685 +#line 750 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 688 +#line 753 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 690 +#line 755 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 689 +#line 754 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 692 +#line 757 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 694 +#line 759 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 693 +#line 758 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 696 +#line 761 [TRAINER_ROSE_5] = { -#line 697 +#line 762 .trainerName = _("ROSE"), -#line 698 +#line 763 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 699 +#line 764 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 700 +#line 765 F_TRAINER_FEMALE | -#line 701 +#line 766 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 702 +#line 767 .doubleBattle = FALSE, -#line 703 +#line 768 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 705 +#line 770 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 707 +#line 772 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 706 +#line 771 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 709 +#line 774 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 711 +#line 776 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 710 +#line 775 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 713 +#line 778 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 715 +#line 780 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 714 +#line 779 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 717 +#line 782 [TRAINER_DUSTY_1] = { -#line 718 +#line 783 .trainerName = _("DUSTY"), -#line 719 +#line 784 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 720 +#line 785 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 722 +#line 787 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 723 +#line 788 .doubleBattle = FALSE, -#line 724 +#line 789 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 726 +#line 791 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 728 +#line 793 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 727 +#line 792 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 729 +#line 794 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -1850,37 +1850,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 734 +#line 799 [TRAINER_CHIP] = { -#line 735 +#line 800 .trainerName = _("CHIP"), -#line 736 +#line 801 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 737 +#line 802 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 739 +#line 804 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 740 +#line 805 .doubleBattle = FALSE, -#line 741 +#line 806 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 743 +#line 808 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 745 +#line 810 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 744 +#line 809 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 746 +#line 811 MOVE_PSYBEAM, MOVE_SELF_DESTRUCT, MOVE_SANDSTORM, @@ -1888,17 +1888,17 @@ F_TRAINER_FEMALE | }, }, { -#line 751 +#line 816 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 753 +#line 818 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 752 +#line 817 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 754 +#line 819 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -1906,17 +1906,17 @@ F_TRAINER_FEMALE | }, }, { -#line 759 +#line 824 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 761 +#line 826 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 760 +#line 825 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 762 +#line 827 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -1925,37 +1925,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 767 +#line 832 [TRAINER_FOSTER] = { -#line 768 +#line 833 .trainerName = _("FOSTER"), -#line 769 +#line 834 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 770 +#line 835 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 772 +#line 837 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 773 +#line 838 .doubleBattle = FALSE, -#line 774 +#line 839 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 776 +#line 841 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 778 +#line 843 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 777 +#line 842 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 779 +#line 844 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -1963,17 +1963,17 @@ F_TRAINER_FEMALE | }, }, { -#line 784 +#line 849 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 786 +#line 851 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 785 +#line 850 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 787 +#line 852 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -1982,37 +1982,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 792 +#line 857 [TRAINER_DUSTY_2] = { -#line 793 +#line 858 .trainerName = _("DUSTY"), -#line 794 +#line 859 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 795 +#line 860 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 797 +#line 862 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 798 +#line 863 .doubleBattle = FALSE, -#line 799 +#line 864 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 801 +#line 866 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 803 +#line 868 .iv = TRAINER_PARTY_IVS(7, 7, 7, 7, 7, 7), -#line 802 +#line 867 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 804 +#line 869 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -2021,37 +2021,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 809 +#line 874 [TRAINER_DUSTY_3] = { -#line 810 +#line 875 .trainerName = _("DUSTY"), -#line 811 +#line 876 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 812 +#line 877 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 814 +#line 879 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 815 +#line 880 .doubleBattle = FALSE, -#line 816 +#line 881 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 818 +#line 883 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 820 +#line 885 .iv = TRAINER_PARTY_IVS(8, 8, 8, 8, 8, 8), -#line 819 +#line 884 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 821 +#line 886 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -2060,37 +2060,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 826 +#line 891 [TRAINER_DUSTY_4] = { -#line 827 +#line 892 .trainerName = _("DUSTY"), -#line 828 +#line 893 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 829 +#line 894 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 831 +#line 896 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 832 +#line 897 .doubleBattle = FALSE, -#line 833 +#line 898 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 835 +#line 900 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 837 +#line 902 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 836 +#line 901 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 838 +#line 903 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -2099,37 +2099,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 843 +#line 908 [TRAINER_DUSTY_5] = { -#line 844 +#line 909 .trainerName = _("DUSTY"), -#line 845 +#line 910 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 846 +#line 911 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 848 +#line 913 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 849 +#line 914 .doubleBattle = FALSE, -#line 850 +#line 915 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 852 +#line 917 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 854 +#line 919 .iv = TRAINER_PARTY_IVS(10, 10, 10, 10, 10, 10), -#line 853 +#line 918 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 855 +#line 920 MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, @@ -2138,252 +2138,252 @@ F_TRAINER_FEMALE | }, }, }, -#line 860 +#line 925 [TRAINER_GABBY_AND_TY_1] = { -#line 861 +#line 926 .trainerName = _("GABBY & TY"), -#line 862 +#line 927 .trainerClass = TRAINER_CLASS_INTERVIEWER, -#line 863 +#line 928 .trainerPic = TRAINER_PIC_INTERVIEWER, .encounterMusic_gender = -#line 865 +#line 930 TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, -#line 866 +#line 931 .doubleBattle = TRUE, -#line 867 +#line 932 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 869 +#line 934 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 871 +#line 936 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 870 +#line 935 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 873 +#line 938 .species = SPECIES_WHISMUR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 875 +#line 940 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 874 +#line 939 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 877 +#line 942 [TRAINER_GABBY_AND_TY_2] = { -#line 878 +#line 943 .trainerName = _("GABBY & TY"), -#line 879 +#line 944 .trainerClass = TRAINER_CLASS_INTERVIEWER, -#line 880 +#line 945 .trainerPic = TRAINER_PIC_INTERVIEWER, .encounterMusic_gender = -#line 882 +#line 947 TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, -#line 883 +#line 948 .doubleBattle = TRUE, -#line 884 +#line 949 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 886 +#line 951 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 888 +#line 953 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 887 +#line 952 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 890 +#line 955 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 892 +#line 957 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 891 +#line 956 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 894 +#line 959 [TRAINER_GABBY_AND_TY_3] = { -#line 895 +#line 960 .trainerName = _("GABBY & TY"), -#line 896 +#line 961 .trainerClass = TRAINER_CLASS_INTERVIEWER, -#line 897 +#line 962 .trainerPic = TRAINER_PIC_INTERVIEWER, .encounterMusic_gender = -#line 899 +#line 964 TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, -#line 900 +#line 965 .doubleBattle = TRUE, -#line 901 +#line 966 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 903 +#line 968 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 905 +#line 970 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 904 +#line 969 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 907 +#line 972 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 909 +#line 974 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 908 +#line 973 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 911 +#line 976 [TRAINER_GABBY_AND_TY_4] = { -#line 912 +#line 977 .trainerName = _("GABBY & TY"), -#line 913 +#line 978 .trainerClass = TRAINER_CLASS_INTERVIEWER, -#line 914 +#line 979 .trainerPic = TRAINER_PIC_INTERVIEWER, .encounterMusic_gender = -#line 916 +#line 981 TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, -#line 917 +#line 982 .doubleBattle = TRUE, -#line 918 +#line 983 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 920 +#line 985 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 922 +#line 987 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 921 +#line 986 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 924 +#line 989 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 926 +#line 991 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 925 +#line 990 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 928 +#line 993 [TRAINER_GABBY_AND_TY_5] = { -#line 929 +#line 994 .trainerName = _("GABBY & TY"), -#line 930 +#line 995 .trainerClass = TRAINER_CLASS_INTERVIEWER, -#line 931 +#line 996 .trainerPic = TRAINER_PIC_INTERVIEWER, .encounterMusic_gender = -#line 933 +#line 998 TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, -#line 934 +#line 999 .doubleBattle = TRUE, -#line 935 +#line 1000 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 937 +#line 1002 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 939 +#line 1004 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 938 +#line 1003 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 941 +#line 1006 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 943 +#line 1008 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 942 +#line 1007 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 945 +#line 1010 [TRAINER_GABBY_AND_TY_6] = { -#line 946 +#line 1011 .trainerName = _("GABBY & TY"), -#line 947 +#line 1012 .trainerClass = TRAINER_CLASS_INTERVIEWER, -#line 948 +#line 1013 .trainerPic = TRAINER_PIC_INTERVIEWER, .encounterMusic_gender = -#line 950 +#line 1015 TRAINER_ENCOUNTER_MUSIC_INTERVIEWER, -#line 951 +#line 1016 .doubleBattle = TRUE, -#line 952 +#line 1017 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 954 +#line 1019 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 956 +#line 1021 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 955 +#line 1020 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 957 +#line 1022 MOVE_SONIC_BOOM, MOVE_THUNDER_WAVE, MOVE_METAL_SOUND, @@ -2391,17 +2391,17 @@ F_TRAINER_FEMALE | }, }, { -#line 962 +#line 1027 .species = SPECIES_EXPLOUD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 964 +#line 1029 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 963 +#line 1028 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 965 +#line 1030 MOVE_ASTONISH, MOVE_STOMP, MOVE_SUPERSONIC, @@ -2410,330 +2410,330 @@ F_TRAINER_FEMALE | }, }, }, -#line 970 +#line 1035 [TRAINER_LOLA_1] = { -#line 971 +#line 1036 .trainerName = _("LOLA"), -#line 972 +#line 1037 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 973 +#line 1038 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 974 +#line 1039 F_TRAINER_FEMALE | -#line 975 +#line 1040 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 976 +#line 1041 .doubleBattle = FALSE, -#line 977 +#line 1042 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 979 +#line 1044 .species = SPECIES_AZURILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 981 +#line 1046 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 980 +#line 1045 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 983 +#line 1048 .species = SPECIES_AZURILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 985 +#line 1050 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 984 +#line 1049 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 987 +#line 1052 [TRAINER_AUSTINA] = { -#line 988 +#line 1053 .trainerName = _("AUSTINA"), -#line 989 +#line 1054 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 990 +#line 1055 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 991 +#line 1056 F_TRAINER_FEMALE | -#line 992 +#line 1057 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 993 +#line 1058 .doubleBattle = FALSE, -#line 994 +#line 1059 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 996 +#line 1061 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 998 +#line 1063 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 997 +#line 1062 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1000 +#line 1065 [TRAINER_GWEN] = { -#line 1001 +#line 1066 .trainerName = _("GWEN"), -#line 1002 +#line 1067 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 1003 +#line 1068 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 1004 +#line 1069 F_TRAINER_FEMALE | -#line 1005 +#line 1070 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1006 +#line 1071 .doubleBattle = FALSE, -#line 1007 +#line 1072 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1009 +#line 1074 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1011 +#line 1076 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1010 +#line 1075 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1013 +#line 1078 [TRAINER_LOLA_2] = { -#line 1014 +#line 1079 .trainerName = _("LOLA"), -#line 1015 +#line 1080 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 1016 +#line 1081 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 1017 +#line 1082 F_TRAINER_FEMALE | -#line 1018 +#line 1083 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1019 +#line 1084 .doubleBattle = FALSE, -#line 1020 +#line 1085 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1022 +#line 1087 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1024 +#line 1089 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 1023 +#line 1088 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1026 +#line 1091 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1028 +#line 1093 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 1027 +#line 1092 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1030 +#line 1095 [TRAINER_LOLA_3] = { -#line 1031 +#line 1096 .trainerName = _("LOLA"), -#line 1032 +#line 1097 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 1033 +#line 1098 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 1034 +#line 1099 F_TRAINER_FEMALE | -#line 1035 +#line 1100 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1036 +#line 1101 .doubleBattle = FALSE, -#line 1037 +#line 1102 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1039 +#line 1104 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1041 +#line 1106 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 1040 +#line 1105 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1043 +#line 1108 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1045 +#line 1110 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 1044 +#line 1109 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1047 +#line 1112 [TRAINER_LOLA_4] = { -#line 1048 +#line 1113 .trainerName = _("LOLA"), -#line 1049 +#line 1114 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 1050 +#line 1115 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 1051 +#line 1116 F_TRAINER_FEMALE | -#line 1052 +#line 1117 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1053 +#line 1118 .doubleBattle = FALSE, -#line 1054 +#line 1119 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1056 +#line 1121 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1058 +#line 1123 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 1057 +#line 1122 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1060 +#line 1125 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1062 +#line 1127 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 1061 +#line 1126 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1064 +#line 1129 [TRAINER_LOLA_5] = { -#line 1065 +#line 1130 .trainerName = _("LOLA"), -#line 1066 +#line 1131 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 1067 +#line 1132 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 1068 +#line 1133 F_TRAINER_FEMALE | -#line 1069 +#line 1134 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1070 +#line 1135 .doubleBattle = FALSE, -#line 1071 +#line 1136 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1073 +#line 1138 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1075 +#line 1140 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 1074 +#line 1139 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1077 +#line 1142 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1079 +#line 1144 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 1078 +#line 1143 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1081 +#line 1146 [TRAINER_RICKY_1] = { -#line 1082 +#line 1147 .trainerName = _("RICKY"), -#line 1083 +#line 1148 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 1084 +#line 1149 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 1086 +#line 1151 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1087 +#line 1152 .doubleBattle = FALSE, -#line 1088 +#line 1153 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1090 +#line 1155 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1092 +#line 1157 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 1091 +#line 1156 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1093 +#line 1158 MOVE_SAND_ATTACK, MOVE_HEADBUTT, MOVE_TAIL_WHIP, @@ -2742,112 +2742,112 @@ F_TRAINER_FEMALE | }, }, }, -#line 1098 +#line 1163 [TRAINER_SIMON] = { -#line 1099 +#line 1164 .trainerName = _("SIMON"), -#line 1100 +#line 1165 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 1101 +#line 1166 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 1103 +#line 1168 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1104 +#line 1169 .doubleBattle = FALSE, -#line 1105 +#line 1170 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1107 +#line 1172 .species = SPECIES_AZURILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1109 +#line 1174 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1108 +#line 1173 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1111 +#line 1176 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1113 +#line 1178 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1112 +#line 1177 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1115 +#line 1180 [TRAINER_CHARLIE] = { -#line 1116 +#line 1181 .trainerName = _("CHARLIE"), -#line 1117 +#line 1182 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 1118 +#line 1183 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 1120 +#line 1185 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1121 +#line 1186 .doubleBattle = FALSE, -#line 1122 +#line 1187 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1124 +#line 1189 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1126 +#line 1191 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1125 +#line 1190 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1128 +#line 1193 [TRAINER_RICKY_2] = { -#line 1129 +#line 1194 .trainerName = _("RICKY"), -#line 1130 +#line 1195 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 1131 +#line 1196 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 1133 +#line 1198 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1134 +#line 1199 .doubleBattle = FALSE, -#line 1135 +#line 1200 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1137 +#line 1202 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1139 +#line 1204 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 1138 +#line 1203 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1140 +#line 1205 MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, @@ -2856,37 +2856,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 1145 +#line 1210 [TRAINER_RICKY_3] = { -#line 1146 +#line 1211 .trainerName = _("RICKY"), -#line 1147 +#line 1212 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 1148 +#line 1213 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 1150 +#line 1215 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1151 +#line 1216 .doubleBattle = FALSE, -#line 1152 +#line 1217 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1154 +#line 1219 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1156 +#line 1221 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 1155 +#line 1220 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1157 +#line 1222 MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, @@ -2895,37 +2895,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 1162 +#line 1227 [TRAINER_RICKY_4] = { -#line 1163 +#line 1228 .trainerName = _("RICKY"), -#line 1164 +#line 1229 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 1165 +#line 1230 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 1167 +#line 1232 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1168 +#line 1233 .doubleBattle = FALSE, -#line 1169 +#line 1234 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1171 +#line 1236 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1173 +#line 1238 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 1172 +#line 1237 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1174 +#line 1239 MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, @@ -2934,37 +2934,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 1179 +#line 1244 [TRAINER_RICKY_5] = { -#line 1180 +#line 1245 .trainerName = _("RICKY"), -#line 1181 +#line 1246 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 1182 +#line 1247 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 1184 +#line 1249 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 1185 +#line 1250 .doubleBattle = FALSE, -#line 1186 +#line 1251 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1188 +#line 1253 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1190 +#line 1255 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 1189 +#line 1254 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1191 +#line 1256 MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, @@ -2973,39 +2973,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 1196 +#line 1261 [TRAINER_RANDALL] = { -#line 1197 +#line 1262 .trainerName = _("RANDALL"), -#line 1198 +#line 1263 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1199 +#line 1264 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1201 +#line 1266 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1202 +#line 1267 .items = { ITEM_HYPER_POTION }, -#line 1203 +#line 1268 .doubleBattle = FALSE, -#line 1204 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1269 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1206 +#line 1271 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1208 +#line 1273 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 1207 +#line 1272 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1209 +#line 1274 MOVE_QUICK_ATTACK, MOVE_AGILITY, MOVE_WING_ATTACK, @@ -3013,39 +3013,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 1213 +#line 1278 [TRAINER_PARKER] = { -#line 1214 +#line 1279 .trainerName = _("PARKER"), -#line 1215 +#line 1280 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1216 +#line 1281 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1218 +#line 1283 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1219 +#line 1284 .items = { ITEM_HYPER_POTION }, -#line 1220 +#line 1285 .doubleBattle = FALSE, -#line 1221 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1286 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1223 +#line 1288 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1225 +#line 1290 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 1224 +#line 1289 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1226 +#line 1291 MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_FOCUS_PUNCH, @@ -3053,41 +3053,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 1230 +#line 1295 [TRAINER_GEORGE] = { -#line 1231 +#line 1296 .trainerName = _("GEORGE"), -#line 1232 +#line 1297 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1233 +#line 1298 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1235 +#line 1300 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1236 +#line 1301 .items = { ITEM_HYPER_POTION }, -#line 1237 +#line 1302 .doubleBattle = FALSE, -#line 1238 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1303 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1240 +#line 1305 .species = SPECIES_SLAKOTH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1240 +#line 1305 .heldItem = ITEM_SITRUS_BERRY, -#line 1242 +#line 1307 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 1241 +#line 1306 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1243 +#line 1308 MOVE_SLACK_OFF, MOVE_COUNTER, MOVE_SHADOW_BALL, @@ -3095,78 +3095,78 @@ F_TRAINER_FEMALE | }, }, }, -#line 1247 +#line 1312 [TRAINER_BERKE] = { -#line 1248 +#line 1313 .trainerName = _("BERKE"), -#line 1249 +#line 1314 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1250 +#line 1315 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1252 +#line 1317 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1253 +#line 1318 .items = { ITEM_HYPER_POTION }, -#line 1254 +#line 1319 .doubleBattle = FALSE, -#line 1255 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1320 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1257 +#line 1322 .species = SPECIES_VIGOROTH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1259 +#line 1324 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 1258 +#line 1323 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1260 +#line 1325 MOVE_FOCUS_ENERGY, MOVE_SLASH, }, }, }, }, -#line 1263 +#line 1328 [TRAINER_BRAXTON] = { -#line 1264 +#line 1329 .trainerName = _("BRAXTON"), -#line 1265 +#line 1330 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1266 +#line 1331 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1268 +#line 1333 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1269 +#line 1334 .items = { ITEM_HYPER_POTION }, -#line 1270 +#line 1335 .doubleBattle = FALSE, -#line 1271 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1336 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 1273 +#line 1338 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1275 +#line 1340 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1274 +#line 1339 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1276 +#line 1341 MOVE_FOCUS_ENERGY, MOVE_QUICK_ATTACK, MOVE_WING_ATTACK, @@ -3174,17 +3174,17 @@ F_TRAINER_FEMALE | }, }, { -#line 1281 +#line 1346 .species = SPECIES_TRAPINCH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1283 +#line 1348 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1282 +#line 1347 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1284 +#line 1349 MOVE_BITE, MOVE_DIG, MOVE_FEINT_ATTACK, @@ -3192,17 +3192,17 @@ F_TRAINER_FEMALE | }, }, { -#line 1289 +#line 1354 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1291 +#line 1356 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1290 +#line 1355 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1292 +#line 1357 MOVE_ROLLOUT, MOVE_WHIRLPOOL, MOVE_ASTONISH, @@ -3210,17 +3210,17 @@ F_TRAINER_FEMALE | }, }, { -#line 1297 +#line 1362 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1299 +#line 1364 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1298 +#line 1363 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1300 +#line 1365 MOVE_THUNDERBOLT, MOVE_SUPERSONIC, MOVE_THUNDER_WAVE, @@ -3228,17 +3228,17 @@ F_TRAINER_FEMALE | }, }, { -#line 1305 +#line 1370 .species = SPECIES_SHIFTRY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1307 +#line 1372 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1306 +#line 1371 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1308 +#line 1373 MOVE_GIGA_DRAIN, MOVE_FEINT_ATTACK, MOVE_DOUBLE_TEAM, @@ -3247,777 +3247,777 @@ F_TRAINER_FEMALE | }, }, }, -#line 1313 +#line 1378 [TRAINER_VINCENT] = { -#line 1314 +#line 1379 .trainerName = _("VINCENT"), -#line 1315 +#line 1380 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1316 +#line 1381 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1318 +#line 1383 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1319 +#line 1384 .items = { ITEM_FULL_RESTORE }, -#line 1320 +#line 1385 .doubleBattle = FALSE, -#line 1321 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1386 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1323 +#line 1388 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1325 +#line 1390 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1324 +#line 1389 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1327 +#line 1392 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1329 +#line 1394 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1328 +#line 1393 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1331 +#line 1396 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1333 +#line 1398 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1332 +#line 1397 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1335 +#line 1400 [TRAINER_LEROY] = { -#line 1336 +#line 1401 .trainerName = _("LEROY"), -#line 1337 +#line 1402 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1338 +#line 1403 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1340 +#line 1405 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1341 +#line 1406 .items = { ITEM_FULL_RESTORE }, -#line 1342 +#line 1407 .doubleBattle = FALSE, -#line 1343 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1408 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1345 +#line 1410 .species = SPECIES_MAWILE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1347 +#line 1412 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1346 +#line 1411 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1349 +#line 1414 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1351 +#line 1416 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1350 +#line 1415 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1353 +#line 1418 [TRAINER_WILTON_1] = { -#line 1354 +#line 1419 .trainerName = _("WILTON"), -#line 1355 +#line 1420 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1356 +#line 1421 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1358 +#line 1423 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1359 +#line 1424 .items = { ITEM_SUPER_POTION }, -#line 1360 +#line 1425 .doubleBattle = FALSE, -#line 1361 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1426 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1363 +#line 1428 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1365 +#line 1430 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1364 +#line 1429 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1367 +#line 1432 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1369 +#line 1434 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1368 +#line 1433 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1371 +#line 1436 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1373 +#line 1438 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1372 +#line 1437 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1375 +#line 1440 [TRAINER_EDGAR] = { -#line 1376 +#line 1441 .trainerName = _("EDGAR"), -#line 1377 +#line 1442 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1378 +#line 1443 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1380 +#line 1445 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1381 +#line 1446 .items = { ITEM_FULL_RESTORE }, -#line 1382 +#line 1447 .doubleBattle = FALSE, -#line 1383 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1448 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1385 +#line 1450 .species = SPECIES_CACTURNE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1387 +#line 1452 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1386 +#line 1451 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1389 +#line 1454 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1391 +#line 1456 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1390 +#line 1455 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1393 +#line 1458 [TRAINER_ALBERT] = { -#line 1394 +#line 1459 .trainerName = _("ALBERT"), -#line 1395 +#line 1460 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1396 +#line 1461 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1398 +#line 1463 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1399 +#line 1464 .items = { ITEM_FULL_RESTORE }, -#line 1400 +#line 1465 .doubleBattle = FALSE, -#line 1401 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1466 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1403 +#line 1468 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1405 +#line 1470 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1404 +#line 1469 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1407 +#line 1472 .species = SPECIES_MUK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1409 +#line 1474 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1408 +#line 1473 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1411 +#line 1476 [TRAINER_SAMUEL] = { -#line 1412 +#line 1477 .trainerName = _("SAMUEL"), -#line 1413 +#line 1478 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1414 +#line 1479 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1416 +#line 1481 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1417 +#line 1482 .items = { ITEM_FULL_RESTORE }, -#line 1418 +#line 1483 .doubleBattle = FALSE, -#line 1419 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1484 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1421 +#line 1486 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1423 +#line 1488 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1422 +#line 1487 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1425 +#line 1490 .species = SPECIES_MAWILE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1427 +#line 1492 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1426 +#line 1491 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1429 +#line 1494 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1431 +#line 1496 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1430 +#line 1495 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1433 +#line 1498 [TRAINER_VITO] = { -#line 1434 +#line 1499 .trainerName = _("VITO"), -#line 1435 +#line 1500 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1436 +#line 1501 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1438 +#line 1503 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1439 +#line 1504 .items = { ITEM_FULL_RESTORE }, -#line 1440 +#line 1505 .doubleBattle = FALSE, -#line 1441 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1506 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 1443 +#line 1508 .species = SPECIES_DODRIO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1445 +#line 1510 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1444 +#line 1509 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1447 +#line 1512 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1449 +#line 1514 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1448 +#line 1513 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1451 +#line 1516 .species = SPECIES_ELECTRODE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1453 +#line 1518 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1452 +#line 1517 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1455 +#line 1520 .species = SPECIES_SHIFTRY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1457 +#line 1522 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1456 +#line 1521 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1459 +#line 1524 [TRAINER_OWEN] = { -#line 1460 +#line 1525 .trainerName = _("OWEN"), -#line 1461 +#line 1526 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1462 +#line 1527 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1464 +#line 1529 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1465 +#line 1530 .items = { ITEM_FULL_RESTORE }, -#line 1466 +#line 1531 .doubleBattle = FALSE, -#line 1467 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1532 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1469 +#line 1534 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1471 +#line 1536 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1470 +#line 1535 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1473 +#line 1538 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1475 +#line 1540 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1474 +#line 1539 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1477 +#line 1542 .species = SPECIES_WAILORD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1479 +#line 1544 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1478 +#line 1543 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1481 +#line 1546 [TRAINER_WILTON_2] = { -#line 1482 +#line 1547 .trainerName = _("WILTON"), -#line 1483 +#line 1548 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1484 +#line 1549 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1486 +#line 1551 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1487 +#line 1552 .items = { ITEM_HYPER_POTION }, -#line 1488 +#line 1553 .doubleBattle = FALSE, -#line 1489 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1554 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1491 +#line 1556 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1493 +#line 1558 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 1492 +#line 1557 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1495 +#line 1560 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1497 +#line 1562 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 1496 +#line 1561 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1499 +#line 1564 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1501 +#line 1566 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 1500 +#line 1565 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1503 +#line 1568 [TRAINER_WILTON_3] = { -#line 1504 +#line 1569 .trainerName = _("WILTON"), -#line 1505 +#line 1570 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1506 +#line 1571 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1508 +#line 1573 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1509 +#line 1574 .items = { ITEM_HYPER_POTION }, -#line 1510 +#line 1575 .doubleBattle = FALSE, -#line 1511 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1576 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1513 +#line 1578 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1515 +#line 1580 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 1514 +#line 1579 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1517 +#line 1582 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1519 +#line 1584 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 1518 +#line 1583 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1521 +#line 1586 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1523 +#line 1588 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 1522 +#line 1587 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1525 +#line 1590 [TRAINER_WILTON_4] = { -#line 1526 +#line 1591 .trainerName = _("WILTON"), -#line 1527 +#line 1592 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1528 +#line 1593 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1530 +#line 1595 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1531 +#line 1596 .items = { ITEM_FULL_RESTORE }, -#line 1532 +#line 1597 .doubleBattle = FALSE, -#line 1533 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1598 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1535 +#line 1600 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1537 +#line 1602 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 1536 +#line 1601 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1539 +#line 1604 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1541 +#line 1606 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 1540 +#line 1605 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1543 +#line 1608 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1545 +#line 1610 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 1544 +#line 1609 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1547 +#line 1612 [TRAINER_WILTON_5] = { -#line 1548 +#line 1613 .trainerName = _("WILTON"), -#line 1549 +#line 1614 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1550 +#line 1615 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1552 +#line 1617 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1553 +#line 1618 .items = { ITEM_FULL_RESTORE }, -#line 1554 +#line 1619 .doubleBattle = FALSE, -#line 1555 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1620 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1557 +#line 1622 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1559 +#line 1624 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 1558 +#line 1623 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1561 +#line 1626 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1563 +#line 1628 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 1562 +#line 1627 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1565 +#line 1630 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1567 +#line 1632 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 1566 +#line 1631 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1569 +#line 1634 [TRAINER_WARREN] = { -#line 1570 +#line 1635 .trainerName = _("WARREN"), -#line 1571 +#line 1636 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1572 +#line 1637 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 1574 +#line 1639 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1575 +#line 1640 .items = { ITEM_FULL_RESTORE }, -#line 1576 +#line 1641 .doubleBattle = FALSE, -#line 1577 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1642 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1579 +#line 1644 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1581 +#line 1646 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1580 +#line 1645 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1583 +#line 1648 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1585 +#line 1650 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1584 +#line 1649 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1587 +#line 1652 [TRAINER_MARY] = { -#line 1588 +#line 1653 .trainerName = _("MARY"), -#line 1589 +#line 1654 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1590 +#line 1655 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1591 +#line 1656 F_TRAINER_FEMALE | -#line 1592 +#line 1657 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1593 +#line 1658 .items = { ITEM_HYPER_POTION }, -#line 1594 +#line 1659 .doubleBattle = FALSE, -#line 1595 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1660 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1597 +#line 1662 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1599 +#line 1664 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 1598 +#line 1663 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1600 +#line 1665 MOVE_FEINT_ATTACK, MOVE_SHOCK_WAVE, }, }, }, }, -#line 1603 +#line 1668 [TRAINER_ALEXIA] = { -#line 1604 +#line 1669 .trainerName = _("ALEXIA"), -#line 1605 +#line 1670 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1606 +#line 1671 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1607 +#line 1672 F_TRAINER_FEMALE | -#line 1608 +#line 1673 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1609 +#line 1674 .items = { ITEM_HYPER_POTION }, -#line 1610 +#line 1675 .doubleBattle = FALSE, -#line 1611 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1676 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1613 +#line 1678 .species = SPECIES_WIGGLYTUFF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1615 +#line 1680 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 1614 +#line 1679 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1616 +#line 1681 MOVE_DEFENSE_CURL, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, @@ -4025,82 +4025,82 @@ F_TRAINER_FEMALE | }, }, }, -#line 1620 +#line 1685 [TRAINER_JODY] = { -#line 1621 +#line 1686 .trainerName = _("JODY"), -#line 1622 +#line 1687 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1623 +#line 1688 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1624 +#line 1689 F_TRAINER_FEMALE | -#line 1625 +#line 1690 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1626 +#line 1691 .items = { ITEM_HYPER_POTION }, -#line 1627 +#line 1692 .doubleBattle = FALSE, -#line 1628 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, +#line 1693 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1630 +#line 1695 .species = SPECIES_ZANGOOSE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1632 +#line 1697 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 1631 +#line 1696 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1633 +#line 1698 MOVE_SWORDS_DANCE, MOVE_SLASH, }, }, }, }, -#line 1636 +#line 1701 [TRAINER_WENDY] = { -#line 1637 +#line 1702 .trainerName = _("WENDY"), -#line 1638 +#line 1703 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1639 +#line 1704 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1640 +#line 1705 F_TRAINER_FEMALE | -#line 1641 +#line 1706 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1642 +#line 1707 .items = { ITEM_FULL_RESTORE }, -#line 1643 +#line 1708 .doubleBattle = FALSE, -#line 1644 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, +#line 1709 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1646 +#line 1711 .species = SPECIES_MAWILE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1648 +#line 1713 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1647 +#line 1712 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1649 +#line 1714 MOVE_BATON_PASS, MOVE_FEINT_ATTACK, MOVE_FAKE_TEARS, @@ -4108,17 +4108,17 @@ F_TRAINER_FEMALE | }, }, { -#line 1654 +#line 1719 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1656 +#line 1721 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1655 +#line 1720 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1657 +#line 1722 MOVE_MEGA_DRAIN, MOVE_MAGICAL_LEAF, MOVE_GRASS_WHISTLE, @@ -4126,17 +4126,17 @@ F_TRAINER_FEMALE | }, }, { -#line 1662 +#line 1727 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1664 +#line 1729 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1663 +#line 1728 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 1665 +#line 1730 MOVE_FLY, MOVE_WATER_GUN, MOVE_MIST, @@ -4145,1083 +4145,1083 @@ F_TRAINER_FEMALE | }, }, }, -#line 1670 +#line 1735 [TRAINER_KEIRA] = { -#line 1671 +#line 1736 .trainerName = _("KEIRA"), -#line 1672 +#line 1737 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1673 +#line 1738 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1674 +#line 1739 F_TRAINER_FEMALE | -#line 1675 +#line 1740 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1676 +#line 1741 .items = { ITEM_FULL_RESTORE }, -#line 1677 +#line 1742 .doubleBattle = FALSE, -#line 1678 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, +#line 1743 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1680 +#line 1745 .species = SPECIES_LAIRON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1682 +#line 1747 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1681 +#line 1746 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1684 +#line 1749 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1686 +#line 1751 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1685 +#line 1750 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1688 +#line 1753 [TRAINER_BROOKE_1] = { -#line 1689 +#line 1754 .trainerName = _("BROOKE"), -#line 1690 +#line 1755 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1691 +#line 1756 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1692 +#line 1757 F_TRAINER_FEMALE | -#line 1693 +#line 1758 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1694 +#line 1759 .items = { ITEM_SUPER_POTION }, -#line 1695 +#line 1760 .doubleBattle = FALSE, -#line 1696 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1761 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1698 +#line 1763 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1700 +#line 1765 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1699 +#line 1764 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1702 +#line 1767 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1704 +#line 1769 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1703 +#line 1768 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1706 +#line 1771 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1708 +#line 1773 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1707 +#line 1772 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1710 +#line 1775 [TRAINER_JENNIFER] = { -#line 1711 +#line 1776 .trainerName = _("JENNIFER"), -#line 1712 +#line 1777 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1713 +#line 1778 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1714 +#line 1779 F_TRAINER_FEMALE | -#line 1715 +#line 1780 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1716 +#line 1781 .items = { ITEM_FULL_RESTORE }, -#line 1717 +#line 1782 .doubleBattle = FALSE, -#line 1718 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1783 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1720 +#line 1785 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1722 +#line 1787 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 1721 +#line 1786 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1724 +#line 1789 [TRAINER_HOPE] = { -#line 1725 +#line 1790 .trainerName = _("HOPE"), -#line 1726 +#line 1791 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1727 +#line 1792 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1728 +#line 1793 F_TRAINER_FEMALE | -#line 1729 +#line 1794 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1730 +#line 1795 .items = { ITEM_FULL_RESTORE }, -#line 1731 +#line 1796 .doubleBattle = FALSE, -#line 1732 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1797 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1734 +#line 1799 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1736 +#line 1801 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1735 +#line 1800 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1738 +#line 1803 [TRAINER_SHANNON] = { -#line 1739 +#line 1804 .trainerName = _("SHANNON"), -#line 1740 +#line 1805 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1741 +#line 1806 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1742 +#line 1807 F_TRAINER_FEMALE | -#line 1743 +#line 1808 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1744 +#line 1809 .items = { ITEM_FULL_RESTORE }, -#line 1745 +#line 1810 .doubleBattle = FALSE, -#line 1746 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1811 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1748 +#line 1813 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1750 +#line 1815 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1749 +#line 1814 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1752 +#line 1817 [TRAINER_MICHELLE] = { -#line 1753 +#line 1818 .trainerName = _("MICHELLE"), -#line 1754 +#line 1819 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1755 +#line 1820 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1756 +#line 1821 F_TRAINER_FEMALE | -#line 1757 +#line 1822 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1758 +#line 1823 .items = { ITEM_FULL_RESTORE }, -#line 1759 +#line 1824 .doubleBattle = FALSE, -#line 1760 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1825 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1762 +#line 1827 .species = SPECIES_TORKOAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1764 +#line 1829 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1763 +#line 1828 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1766 +#line 1831 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1768 +#line 1833 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1767 +#line 1832 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1770 +#line 1835 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1772 +#line 1837 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1771 +#line 1836 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1774 +#line 1839 [TRAINER_CAROLINE] = { -#line 1775 +#line 1840 .trainerName = _("CAROLINE"), -#line 1776 +#line 1841 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1777 +#line 1842 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1778 +#line 1843 F_TRAINER_FEMALE | -#line 1779 +#line 1844 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1780 +#line 1845 .items = { ITEM_FULL_RESTORE }, -#line 1781 +#line 1846 .doubleBattle = FALSE, -#line 1782 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1847 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1784 +#line 1849 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1786 +#line 1851 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1785 +#line 1850 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1788 +#line 1853 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1790 +#line 1855 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1789 +#line 1854 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1792 +#line 1857 [TRAINER_JULIE] = { -#line 1793 +#line 1858 .trainerName = _("JULIE"), -#line 1794 +#line 1859 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1795 +#line 1860 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1796 +#line 1861 F_TRAINER_FEMALE | -#line 1797 +#line 1862 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1798 +#line 1863 .items = { ITEM_FULL_RESTORE }, -#line 1799 +#line 1864 .doubleBattle = FALSE, -#line 1800 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1865 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1802 +#line 1867 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1804 +#line 1869 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1803 +#line 1868 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1806 +#line 1871 .species = SPECIES_NINETALES, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1808 +#line 1873 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1807 +#line 1872 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1810 +#line 1875 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1812 +#line 1877 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 1811 +#line 1876 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1814 +#line 1879 [TRAINER_BROOKE_2] = { -#line 1815 +#line 1880 .trainerName = _("BROOKE"), -#line 1816 +#line 1881 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1817 +#line 1882 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1818 +#line 1883 F_TRAINER_FEMALE | -#line 1819 +#line 1884 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1820 +#line 1885 .items = { ITEM_HYPER_POTION }, -#line 1821 +#line 1886 .doubleBattle = FALSE, -#line 1822 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 1887 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 1824 +#line 1889 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1826 +#line 1891 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 1825 +#line 1890 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1828 +#line 1893 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1830 +#line 1895 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 1829 +#line 1894 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1832 +#line 1897 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1834 +#line 1899 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 1833 +#line 1898 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1836 +#line 1901 [TRAINER_BROOKE_3] = { -#line 1837 - .trainerName = _("BROOKE"), -#line 1838 - .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1839 - .trainerPic = TRAINER_PIC_COOLTRAINER_F, - .encounterMusic_gender = -#line 1840 -F_TRAINER_FEMALE | -#line 1841 - TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1842 - .items = { ITEM_HYPER_POTION }, -#line 1843 - .doubleBattle = FALSE, -#line 1844 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 3, - .party = (const struct TrainerMon[]) - { - { -#line 1846 - .species = SPECIES_PELIPPER, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 1848 - .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 1847 - .lvl = 29, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 1850 - .species = SPECIES_NUMEL, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 1852 - .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 1851 - .lvl = 29, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 1854 - .species = SPECIES_ROSELIA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 1856 - .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 1855 - .lvl = 29, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 1858 - [TRAINER_BROOKE_4] = - { -#line 1859 - .trainerName = _("BROOKE"), -#line 1860 - .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1861 - .trainerPic = TRAINER_PIC_COOLTRAINER_F, - .encounterMusic_gender = -#line 1862 -F_TRAINER_FEMALE | -#line 1863 - TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1864 - .items = { ITEM_FULL_RESTORE }, -#line 1865 - .doubleBattle = FALSE, -#line 1866 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 3, - .party = (const struct TrainerMon[]) - { - { -#line 1868 - .species = SPECIES_PELIPPER, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 1870 - .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 1869 - .lvl = 32, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 1872 - .species = SPECIES_NUMEL, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 1874 - .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 1873 - .lvl = 32, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 1876 - .species = SPECIES_ROSELIA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 1878 - .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 1877 - .lvl = 32, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 1880 - [TRAINER_BROOKE_5] = - { -#line 1881 - .trainerName = _("BROOKE"), -#line 1882 - .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 1883 - .trainerPic = TRAINER_PIC_COOLTRAINER_F, - .encounterMusic_gender = -#line 1884 -F_TRAINER_FEMALE | -#line 1885 - TRAINER_ENCOUNTER_MUSIC_COOL, -#line 1886 - .items = { ITEM_FULL_RESTORE }, -#line 1887 - .doubleBattle = FALSE, -#line 1888 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 3, - .party = (const struct TrainerMon[]) - { - { -#line 1890 - .species = SPECIES_PELIPPER, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 1892 - .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 1891 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 1894 - .species = SPECIES_CAMERUPT, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 1896 - .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 1895 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 1898 - .species = SPECIES_ROSELIA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 1900 - .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 1899 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, #line 1902 - [TRAINER_PATRICIA] = - { + .trainerName = _("BROOKE"), #line 1903 - .trainerName = _("PATRICIA"), + .trainerClass = TRAINER_CLASS_COOLTRAINER, #line 1904 - .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 1905 - .trainerPic = TRAINER_PIC_HEX_MANIAC, + .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 1906 +#line 1905 F_TRAINER_FEMALE | +#line 1906 + TRAINER_ENCOUNTER_MUSIC_COOL, #line 1907 - TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, + .items = { ITEM_HYPER_POTION }, #line 1908 .doubleBattle = FALSE, #line 1909 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, + .aiFlags = AI_FLAG_BASIC_TRAINER, + .partySize = 3, .party = (const struct TrainerMon[]) { { #line 1911 - .species = SPECIES_BANETTE, + .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, #line 1913 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), #line 1912 - .lvl = 41, + .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { #line 1915 - .species = SPECIES_LUNATONE, + .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, #line 1917 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), #line 1916 + .lvl = 29, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 1919 + .species = SPECIES_ROSELIA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 1921 + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), +#line 1920 + .lvl = 29, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 1923 + [TRAINER_BROOKE_4] = + { +#line 1924 + .trainerName = _("BROOKE"), +#line 1925 + .trainerClass = TRAINER_CLASS_COOLTRAINER, +#line 1926 + .trainerPic = TRAINER_PIC_COOLTRAINER_F, + .encounterMusic_gender = +#line 1927 +F_TRAINER_FEMALE | +#line 1928 + TRAINER_ENCOUNTER_MUSIC_COOL, +#line 1929 + .items = { ITEM_FULL_RESTORE }, +#line 1930 + .doubleBattle = FALSE, +#line 1931 + .aiFlags = AI_FLAG_BASIC_TRAINER, + .partySize = 3, + .party = (const struct TrainerMon[]) + { + { +#line 1933 + .species = SPECIES_PELIPPER, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 1935 + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), +#line 1934 + .lvl = 32, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 1937 + .species = SPECIES_NUMEL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 1939 + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), +#line 1938 + .lvl = 32, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 1941 + .species = SPECIES_ROSELIA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 1943 + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), +#line 1942 + .lvl = 32, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 1945 + [TRAINER_BROOKE_5] = + { +#line 1946 + .trainerName = _("BROOKE"), +#line 1947 + .trainerClass = TRAINER_CLASS_COOLTRAINER, +#line 1948 + .trainerPic = TRAINER_PIC_COOLTRAINER_F, + .encounterMusic_gender = +#line 1949 +F_TRAINER_FEMALE | +#line 1950 + TRAINER_ENCOUNTER_MUSIC_COOL, +#line 1951 + .items = { ITEM_FULL_RESTORE }, +#line 1952 + .doubleBattle = FALSE, +#line 1953 + .aiFlags = AI_FLAG_BASIC_TRAINER, + .partySize = 3, + .party = (const struct TrainerMon[]) + { + { +#line 1955 + .species = SPECIES_PELIPPER, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 1957 + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), +#line 1956 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 1959 + .species = SPECIES_CAMERUPT, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 1961 + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), +#line 1960 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 1963 + .species = SPECIES_ROSELIA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 1965 + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), +#line 1964 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 1967 + [TRAINER_PATRICIA] = + { +#line 1968 + .trainerName = _("PATRICIA"), +#line 1969 + .trainerClass = TRAINER_CLASS_HEX_MANIAC, +#line 1970 + .trainerPic = TRAINER_PIC_HEX_MANIAC, + .encounterMusic_gender = +#line 1971 +F_TRAINER_FEMALE | +#line 1972 + TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, +#line 1973 + .doubleBattle = FALSE, +#line 1974 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 1976 + .species = SPECIES_BANETTE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 1978 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 1977 + .lvl = 41, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 1980 + .species = SPECIES_LUNATONE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 1982 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 1981 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1919 +#line 1984 [TRAINER_KINDRA] = { -#line 1920 +#line 1985 .trainerName = _("KINDRA"), -#line 1921 +#line 1986 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 1922 +#line 1987 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 1923 +#line 1988 F_TRAINER_FEMALE | -#line 1924 +#line 1989 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 1925 +#line 1990 .doubleBattle = FALSE, -#line 1926 +#line 1991 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1928 +#line 1993 .species = SPECIES_DUSKULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1930 +#line 1995 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1929 +#line 1994 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1932 +#line 1997 .species = SPECIES_SHUPPET, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1934 +#line 1999 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1933 +#line 1998 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1936 +#line 2001 [TRAINER_TAMMY] = { -#line 1937 +#line 2002 .trainerName = _("TAMMY"), -#line 1938 +#line 2003 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 1939 +#line 2004 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 1940 +#line 2005 F_TRAINER_FEMALE | -#line 1941 +#line 2006 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 1942 +#line 2007 .doubleBattle = FALSE, -#line 1943 +#line 2008 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1945 +#line 2010 .species = SPECIES_DUSKULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1947 +#line 2012 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1946 +#line 2011 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1949 +#line 2014 .species = SPECIES_SHUPPET, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1951 +#line 2016 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1950 +#line 2015 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1953 +#line 2018 [TRAINER_VALERIE_1] = { -#line 1954 +#line 2019 .trainerName = _("VALERIE"), -#line 1955 +#line 2020 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 1956 +#line 2021 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 1957 +#line 2022 F_TRAINER_FEMALE | -#line 1958 +#line 2023 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 1959 +#line 2024 .doubleBattle = FALSE, -#line 1960 +#line 2025 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1962 +#line 2027 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1964 +#line 2029 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 1963 +#line 2028 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1966 +#line 2031 [TRAINER_TASHA] = { -#line 1967 +#line 2032 .trainerName = _("TASHA"), -#line 1968 +#line 2033 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 1969 +#line 2034 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 1970 +#line 2035 F_TRAINER_FEMALE | -#line 1971 +#line 2036 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 1972 +#line 2037 .doubleBattle = FALSE, -#line 1973 +#line 2038 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 1975 +#line 2040 .species = SPECIES_SHUPPET, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1977 +#line 2042 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 1976 +#line 2041 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1979 +#line 2044 [TRAINER_VALERIE_2] = { -#line 1980 +#line 2045 .trainerName = _("VALERIE"), -#line 1981 +#line 2046 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 1982 +#line 2047 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 1983 +#line 2048 F_TRAINER_FEMALE | -#line 1984 +#line 2049 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 1985 +#line 2050 .doubleBattle = FALSE, -#line 1986 +#line 2051 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 1988 +#line 2053 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1990 +#line 2055 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 1989 +#line 2054 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 1992 +#line 2057 .species = SPECIES_SPOINK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 1994 +#line 2059 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 1993 +#line 2058 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 1996 +#line 2061 [TRAINER_VALERIE_3] = { -#line 1997 +#line 2062 .trainerName = _("VALERIE"), -#line 1998 +#line 2063 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 1999 +#line 2064 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 2000 +#line 2065 F_TRAINER_FEMALE | -#line 2001 +#line 2066 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2002 +#line 2067 .doubleBattle = FALSE, -#line 2003 +#line 2068 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2005 +#line 2070 .species = SPECIES_SPOINK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2007 +#line 2072 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 2006 +#line 2071 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2009 +#line 2074 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2011 +#line 2076 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 2010 +#line 2075 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2013 +#line 2078 [TRAINER_VALERIE_4] = { -#line 2014 +#line 2079 .trainerName = _("VALERIE"), -#line 2015 +#line 2080 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 2016 +#line 2081 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 2017 +#line 2082 F_TRAINER_FEMALE | -#line 2018 +#line 2083 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2019 +#line 2084 .doubleBattle = FALSE, -#line 2020 +#line 2085 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2022 +#line 2087 .species = SPECIES_SPOINK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2024 +#line 2089 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 2023 +#line 2088 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2026 +#line 2091 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2028 +#line 2093 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 2027 +#line 2092 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2030 +#line 2095 [TRAINER_VALERIE_5] = { -#line 2031 +#line 2096 .trainerName = _("VALERIE"), -#line 2032 +#line 2097 .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 2033 +#line 2098 .trainerPic = TRAINER_PIC_HEX_MANIAC, .encounterMusic_gender = -#line 2034 +#line 2099 F_TRAINER_FEMALE | -#line 2035 +#line 2100 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2036 +#line 2101 .doubleBattle = FALSE, -#line 2037 +#line 2102 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 2039 +#line 2104 .species = SPECIES_DUSKULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2041 +#line 2106 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2040 +#line 2105 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2043 +#line 2108 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2045 +#line 2110 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2044 +#line 2109 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2047 +#line 2112 .species = SPECIES_GRUMPIG, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2049 +#line 2114 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2048 +#line 2113 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2051 +#line 2116 [TRAINER_CINDY_1] = { -#line 2052 +#line 2117 .trainerName = _("CINDY"), -#line 2053 +#line 2118 .trainerClass = TRAINER_CLASS_LADY, -#line 2054 +#line 2119 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2055 +#line 2120 F_TRAINER_FEMALE | -#line 2056 +#line 2121 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2057 +#line 2122 .items = { ITEM_FULL_RESTORE }, -#line 2058 +#line 2123 .doubleBattle = FALSE, -#line 2059 +#line 2124 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2061 +#line 2126 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2061 +#line 2126 .heldItem = ITEM_NUGGET, -#line 2063 +#line 2128 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2062 +#line 2127 .lvl = 7, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2065 +#line 2130 [TRAINER_DAPHNE] = { -#line 2066 +#line 2131 .trainerName = _("DAPHNE"), -#line 2067 +#line 2132 .trainerClass = TRAINER_CLASS_LADY, -#line 2068 +#line 2133 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2069 +#line 2134 F_TRAINER_FEMALE | -#line 2070 +#line 2135 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2071 +#line 2136 .items = { ITEM_FULL_RESTORE }, -#line 2072 +#line 2137 .doubleBattle = FALSE, -#line 2073 +#line 2138 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2075 +#line 2140 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2075 +#line 2140 .heldItem = ITEM_NUGGET, -#line 2077 +#line 2142 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2076 +#line 2141 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2078 +#line 2143 MOVE_ATTRACT, MOVE_SWEET_KISS, MOVE_FLAIL, @@ -5229,19 +5229,19 @@ F_TRAINER_FEMALE | }, }, { -#line 2083 +#line 2148 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2083 +#line 2148 .heldItem = ITEM_NUGGET, -#line 2085 +#line 2150 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2084 +#line 2149 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2086 +#line 2151 MOVE_ATTRACT, MOVE_SAFEGUARD, MOVE_TAKE_DOWN, @@ -5250,330 +5250,330 @@ F_TRAINER_FEMALE | }, }, }, -#line 2091 +#line 2156 [TRAINER_GRUNT_SPACE_CENTER_2] = { -#line 2092 +#line 2157 .trainerName = _("GRUNT"), -#line 2093 +#line 2158 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 2094 +#line 2159 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 2096 +#line 2161 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 2097 +#line 2162 .doubleBattle = FALSE, -#line 2098 +#line 2163 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 2100 +#line 2165 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2102 +#line 2167 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2101 +#line 2166 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2104 +#line 2169 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2106 +#line 2171 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2105 +#line 2170 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2108 +#line 2173 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2110 +#line 2175 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2109 +#line 2174 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2112 +#line 2177 [TRAINER_CINDY_2] = { -#line 2113 +#line 2178 .trainerName = _("CINDY"), -#line 2114 +#line 2179 .trainerClass = TRAINER_CLASS_LADY, -#line 2115 +#line 2180 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2116 +#line 2181 F_TRAINER_FEMALE | -#line 2117 +#line 2182 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2118 +#line 2183 .items = { ITEM_FULL_RESTORE }, -#line 2119 +#line 2184 .doubleBattle = FALSE, -#line 2120 +#line 2185 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2122 +#line 2187 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2122 +#line 2187 .heldItem = ITEM_NUGGET, -#line 2124 +#line 2189 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2123 +#line 2188 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2125 +#line 2190 MOVE_TACKLE, MOVE_TAIL_WHIP, }, }, }, }, -#line 2128 +#line 2193 [TRAINER_BRIANNA] = { -#line 2129 +#line 2194 .trainerName = _("BRIANNA"), -#line 2130 +#line 2195 .trainerClass = TRAINER_CLASS_LADY, -#line 2131 +#line 2196 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2132 +#line 2197 F_TRAINER_FEMALE | -#line 2133 +#line 2198 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2134 +#line 2199 .items = { ITEM_FULL_RESTORE }, -#line 2135 +#line 2200 .doubleBattle = FALSE, -#line 2136 +#line 2201 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2138 +#line 2203 .species = SPECIES_SEAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2138 +#line 2203 .heldItem = ITEM_NUGGET, -#line 2140 +#line 2205 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 2139 +#line 2204 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2142 +#line 2207 [TRAINER_NAOMI] = { -#line 2143 +#line 2208 .trainerName = _("NAOMI"), -#line 2144 +#line 2209 .trainerClass = TRAINER_CLASS_LADY, -#line 2145 +#line 2210 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2146 +#line 2211 F_TRAINER_FEMALE | -#line 2147 +#line 2212 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2148 +#line 2213 .items = { ITEM_FULL_RESTORE }, -#line 2149 +#line 2214 .doubleBattle = FALSE, -#line 2150 +#line 2215 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2152 +#line 2217 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2152 +#line 2217 .heldItem = ITEM_NUGGET, -#line 2154 +#line 2219 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2153 +#line 2218 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2156 +#line 2221 [TRAINER_CINDY_3] = { -#line 2157 +#line 2222 .trainerName = _("CINDY"), -#line 2158 +#line 2223 .trainerClass = TRAINER_CLASS_LADY, -#line 2159 +#line 2224 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2160 +#line 2225 F_TRAINER_FEMALE | -#line 2161 +#line 2226 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2162 +#line 2227 .items = { ITEM_FULL_RESTORE }, -#line 2163 +#line 2228 .doubleBattle = FALSE, -#line 2164 +#line 2229 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2166 +#line 2231 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2166 +#line 2231 .heldItem = ITEM_NUGGET, -#line 2168 +#line 2233 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2167 +#line 2232 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2170 +#line 2235 [TRAINER_CINDY_4] = { -#line 2171 +#line 2236 .trainerName = _("CINDY"), -#line 2172 +#line 2237 .trainerClass = TRAINER_CLASS_LADY, -#line 2173 +#line 2238 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2174 +#line 2239 F_TRAINER_FEMALE | -#line 2175 +#line 2240 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2176 +#line 2241 .items = { ITEM_FULL_RESTORE }, -#line 2177 +#line 2242 .doubleBattle = FALSE, -#line 2178 +#line 2243 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2180 +#line 2245 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2180 +#line 2245 .heldItem = ITEM_NUGGET, -#line 2182 +#line 2247 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 2181 +#line 2246 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2184 +#line 2249 [TRAINER_CINDY_5] = { -#line 2185 +#line 2250 .trainerName = _("CINDY"), -#line 2186 +#line 2251 .trainerClass = TRAINER_CLASS_LADY, -#line 2187 +#line 2252 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2188 +#line 2253 F_TRAINER_FEMALE | -#line 2189 +#line 2254 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2190 +#line 2255 .items = { ITEM_FULL_RESTORE }, -#line 2191 +#line 2256 .doubleBattle = FALSE, -#line 2192 +#line 2257 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2194 +#line 2259 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2194 +#line 2259 .heldItem = ITEM_NUGGET, -#line 2196 +#line 2261 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 2195 +#line 2260 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2198 +#line 2263 [TRAINER_CINDY_6] = { -#line 2199 +#line 2264 .trainerName = _("CINDY"), -#line 2200 +#line 2265 .trainerClass = TRAINER_CLASS_LADY, -#line 2201 +#line 2266 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 2202 +#line 2267 F_TRAINER_FEMALE | -#line 2203 +#line 2268 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2204 +#line 2269 .items = { ITEM_FULL_RESTORE }, -#line 2205 +#line 2270 .doubleBattle = FALSE, -#line 2206 +#line 2271 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2208 +#line 2273 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2208 +#line 2273 .heldItem = ITEM_NUGGET, -#line 2210 +#line 2275 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2209 +#line 2274 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2211 +#line 2276 MOVE_FURY_SWIPES, MOVE_MUD_SPORT, MOVE_ODOR_SLEUTH, @@ -5582,141 +5582,141 @@ F_TRAINER_FEMALE | }, }, }, -#line 2216 +#line 2281 [TRAINER_MELISSA] = { -#line 2217 +#line 2282 .trainerName = _("MELISSA"), -#line 2218 +#line 2283 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2219 +#line 2284 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2220 +#line 2285 F_TRAINER_FEMALE | -#line 2221 +#line 2286 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2222 +#line 2287 .doubleBattle = FALSE, -#line 2223 +#line 2288 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2225 +#line 2290 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2227 +#line 2292 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2226 +#line 2291 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2229 +#line 2294 [TRAINER_SHEILA] = { -#line 2230 +#line 2295 .trainerName = _("SHEILA"), -#line 2231 +#line 2296 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2232 +#line 2297 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2233 +#line 2298 F_TRAINER_FEMALE | -#line 2234 +#line 2299 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2235 +#line 2300 .doubleBattle = FALSE, -#line 2236 +#line 2301 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2238 +#line 2303 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2240 +#line 2305 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2239 +#line 2304 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2242 +#line 2307 [TRAINER_SHIRLEY] = { -#line 2243 +#line 2308 .trainerName = _("SHIRLEY"), -#line 2244 +#line 2309 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2245 +#line 2310 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2246 +#line 2311 F_TRAINER_FEMALE | -#line 2247 +#line 2312 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2248 +#line 2313 .doubleBattle = FALSE, -#line 2249 +#line 2314 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2251 +#line 2316 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2253 +#line 2318 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2252 +#line 2317 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2255 +#line 2320 [TRAINER_JESSICA_1] = { -#line 2256 +#line 2321 .trainerName = _("JESSICA"), -#line 2257 +#line 2322 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2258 +#line 2323 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2259 +#line 2324 F_TRAINER_FEMALE | -#line 2260 +#line 2325 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2261 +#line 2326 .doubleBattle = FALSE, -#line 2262 +#line 2327 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2264 +#line 2329 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2266 +#line 2331 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2265 +#line 2330 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2267 +#line 2332 MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, @@ -5724,17 +5724,17 @@ F_TRAINER_FEMALE | }, }, { -#line 2272 +#line 2337 .species = SPECIES_SEVIPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2274 +#line 2339 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2273 +#line 2338 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2275 +#line 2340 MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, @@ -5743,107 +5743,107 @@ F_TRAINER_FEMALE | }, }, }, -#line 2280 +#line 2345 [TRAINER_CONNIE] = { -#line 2281 +#line 2346 .trainerName = _("CONNIE"), -#line 2282 +#line 2347 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2283 +#line 2348 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2284 +#line 2349 F_TRAINER_FEMALE | -#line 2285 +#line 2350 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2286 +#line 2351 .doubleBattle = FALSE, -#line 2287 +#line 2352 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2289 +#line 2354 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2291 +#line 2356 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2290 +#line 2355 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2293 +#line 2358 [TRAINER_BRIDGET] = { -#line 2294 +#line 2359 .trainerName = _("BRIDGET"), -#line 2295 +#line 2360 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2296 +#line 2361 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2297 +#line 2362 F_TRAINER_FEMALE | -#line 2298 +#line 2363 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2299 +#line 2364 .doubleBattle = FALSE, -#line 2300 +#line 2365 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2302 +#line 2367 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2304 +#line 2369 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 2303 +#line 2368 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2306 +#line 2371 [TRAINER_OLIVIA] = { -#line 2307 +#line 2372 .trainerName = _("OLIVIA"), -#line 2308 +#line 2373 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2309 +#line 2374 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2310 +#line 2375 F_TRAINER_FEMALE | -#line 2311 +#line 2376 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2312 +#line 2377 .doubleBattle = FALSE, -#line 2313 +#line 2378 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 2315 +#line 2380 .species = SPECIES_CLAMPERL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2317 +#line 2382 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2316 +#line 2381 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2318 +#line 2383 MOVE_IRON_DEFENSE, MOVE_WHIRLPOOL, MOVE_RAIN_DANCE, @@ -5851,34 +5851,34 @@ F_TRAINER_FEMALE | }, }, { -#line 2323 +#line 2388 .species = SPECIES_CORPHISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2325 +#line 2390 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2324 +#line 2389 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2326 +#line 2391 MOVE_TAUNT, MOVE_CRABHAMMER, MOVE_WATER_PULSE, }, }, { -#line 2330 +#line 2395 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2332 +#line 2397 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2331 +#line 2396 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2333 +#line 2398 MOVE_UPROAR, MOVE_FURY_SWIPES, MOVE_FAKE_OUT, @@ -5887,84 +5887,84 @@ F_TRAINER_FEMALE | }, }, }, -#line 2338 +#line 2403 [TRAINER_TIFFANY] = { -#line 2339 +#line 2404 .trainerName = _("TIFFANY"), -#line 2340 +#line 2405 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2341 +#line 2406 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2342 +#line 2407 F_TRAINER_FEMALE | -#line 2343 +#line 2408 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2344 +#line 2409 .doubleBattle = FALSE, -#line 2345 +#line 2410 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2347 +#line 2412 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2349 +#line 2414 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2348 +#line 2413 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2351 +#line 2416 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2353 +#line 2418 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 2352 +#line 2417 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2355 +#line 2420 [TRAINER_JESSICA_2] = { -#line 2356 +#line 2421 .trainerName = _("JESSICA"), -#line 2357 +#line 2422 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2358 +#line 2423 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2359 +#line 2424 F_TRAINER_FEMALE | -#line 2360 +#line 2425 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2361 +#line 2426 .doubleBattle = FALSE, -#line 2362 +#line 2427 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2364 +#line 2429 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2366 +#line 2431 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2365 +#line 2430 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2367 +#line 2432 MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, @@ -5972,17 +5972,17 @@ F_TRAINER_FEMALE | }, }, { -#line 2372 +#line 2437 .species = SPECIES_SEVIPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2374 +#line 2439 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2373 +#line 2438 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2375 +#line 2440 MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, @@ -5991,39 +5991,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 2380 +#line 2445 [TRAINER_JESSICA_3] = { -#line 2381 +#line 2446 .trainerName = _("JESSICA"), -#line 2382 +#line 2447 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2383 +#line 2448 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2384 +#line 2449 F_TRAINER_FEMALE | -#line 2385 +#line 2450 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2386 +#line 2451 .doubleBattle = FALSE, -#line 2387 +#line 2452 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2389 +#line 2454 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2391 +#line 2456 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 2390 +#line 2455 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2392 +#line 2457 MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, @@ -6031,17 +6031,17 @@ F_TRAINER_FEMALE | }, }, { -#line 2397 +#line 2462 .species = SPECIES_SEVIPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2399 +#line 2464 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 2398 +#line 2463 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2400 +#line 2465 MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, @@ -6050,39 +6050,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 2405 +#line 2470 [TRAINER_JESSICA_4] = { -#line 2406 +#line 2471 .trainerName = _("JESSICA"), -#line 2407 +#line 2472 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2408 +#line 2473 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2409 +#line 2474 F_TRAINER_FEMALE | -#line 2410 +#line 2475 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2411 +#line 2476 .doubleBattle = FALSE, -#line 2412 +#line 2477 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2414 +#line 2479 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2416 +#line 2481 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 2415 +#line 2480 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2417 +#line 2482 MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, @@ -6090,17 +6090,17 @@ F_TRAINER_FEMALE | }, }, { -#line 2422 +#line 2487 .species = SPECIES_SEVIPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2424 +#line 2489 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 2423 +#line 2488 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2425 +#line 2490 MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, @@ -6109,39 +6109,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 2430 +#line 2495 [TRAINER_JESSICA_5] = { -#line 2431 +#line 2496 .trainerName = _("JESSICA"), -#line 2432 +#line 2497 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2433 +#line 2498 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2434 +#line 2499 F_TRAINER_FEMALE | -#line 2435 +#line 2500 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2436 +#line 2501 .doubleBattle = FALSE, -#line 2437 +#line 2502 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2439 +#line 2504 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2441 +#line 2506 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2440 +#line 2505 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2442 +#line 2507 MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, @@ -6149,17 +6149,17 @@ F_TRAINER_FEMALE | }, }, { -#line 2447 +#line 2512 .species = SPECIES_SEVIPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2449 +#line 2514 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2448 +#line 2513 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2450 +#line 2515 MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, @@ -6168,266 +6168,266 @@ F_TRAINER_FEMALE | }, }, }, -#line 2455 +#line 2520 [TRAINER_WINSTON_1] = { -#line 2456 +#line 2521 .trainerName = _("WINSTON"), -#line 2457 +#line 2522 .trainerClass = TRAINER_CLASS_RICH_BOY, -#line 2458 +#line 2523 .trainerPic = TRAINER_PIC_RICH_BOY, .encounterMusic_gender = -#line 2460 +#line 2525 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 2461 +#line 2526 .items = { ITEM_FULL_RESTORE }, -#line 2462 +#line 2527 .doubleBattle = FALSE, -#line 2463 +#line 2528 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2465 +#line 2530 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2465 +#line 2530 .heldItem = ITEM_NUGGET, -#line 2467 +#line 2532 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2466 +#line 2531 .lvl = 7, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2469 +#line 2534 [TRAINER_MOLLIE] = { -#line 2470 +#line 2535 .trainerName = _("MOLLIE"), -#line 2471 +#line 2536 .trainerClass = TRAINER_CLASS_EXPERT, -#line 2472 +#line 2537 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 2473 +#line 2538 F_TRAINER_FEMALE | -#line 2474 +#line 2539 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 2475 +#line 2540 .doubleBattle = FALSE, -#line 2476 +#line 2541 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2478 +#line 2543 .species = SPECIES_WHISCASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2480 +#line 2545 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2479 +#line 2544 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2482 +#line 2547 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2484 +#line 2549 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 2483 +#line 2548 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2486 +#line 2551 [TRAINER_GARRET] = { -#line 2487 +#line 2552 .trainerName = _("GARRET"), -#line 2488 +#line 2553 .trainerClass = TRAINER_CLASS_RICH_BOY, -#line 2489 +#line 2554 .trainerPic = TRAINER_PIC_RICH_BOY, .encounterMusic_gender = -#line 2491 +#line 2556 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 2492 +#line 2557 .items = { ITEM_FULL_RESTORE }, -#line 2493 +#line 2558 .doubleBattle = FALSE, -#line 2494 +#line 2559 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2496 +#line 2561 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2496 +#line 2561 .heldItem = ITEM_NUGGET, -#line 2498 +#line 2563 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2497 +#line 2562 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2500 +#line 2565 [TRAINER_WINSTON_2] = { -#line 2501 +#line 2566 .trainerName = _("WINSTON"), -#line 2502 +#line 2567 .trainerClass = TRAINER_CLASS_RICH_BOY, -#line 2503 +#line 2568 .trainerPic = TRAINER_PIC_RICH_BOY, .encounterMusic_gender = -#line 2505 +#line 2570 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 2506 +#line 2571 .items = { ITEM_FULL_RESTORE }, -#line 2507 +#line 2572 .doubleBattle = FALSE, -#line 2508 +#line 2573 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2510 +#line 2575 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2510 +#line 2575 .heldItem = ITEM_NUGGET, -#line 2512 +#line 2577 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2511 +#line 2576 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2514 +#line 2579 [TRAINER_WINSTON_3] = { -#line 2515 +#line 2580 .trainerName = _("WINSTON"), -#line 2516 +#line 2581 .trainerClass = TRAINER_CLASS_RICH_BOY, -#line 2517 +#line 2582 .trainerPic = TRAINER_PIC_RICH_BOY, .encounterMusic_gender = -#line 2519 +#line 2584 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 2520 +#line 2585 .items = { ITEM_FULL_RESTORE }, -#line 2521 +#line 2586 .doubleBattle = FALSE, -#line 2522 +#line 2587 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2524 +#line 2589 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2524 +#line 2589 .heldItem = ITEM_NUGGET, -#line 2526 +#line 2591 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2525 +#line 2590 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2528 +#line 2593 [TRAINER_WINSTON_4] = { -#line 2529 +#line 2594 .trainerName = _("WINSTON"), -#line 2530 +#line 2595 .trainerClass = TRAINER_CLASS_RICH_BOY, -#line 2531 +#line 2596 .trainerPic = TRAINER_PIC_RICH_BOY, .encounterMusic_gender = -#line 2533 +#line 2598 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 2534 +#line 2599 .items = { ITEM_FULL_RESTORE }, -#line 2535 +#line 2600 .doubleBattle = FALSE, -#line 2536 +#line 2601 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2538 +#line 2603 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2538 +#line 2603 .heldItem = ITEM_NUGGET, -#line 2540 +#line 2605 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2539 +#line 2604 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2542 +#line 2607 [TRAINER_WINSTON_5] = { -#line 2543 +#line 2608 .trainerName = _("WINSTON"), -#line 2544 +#line 2609 .trainerClass = TRAINER_CLASS_RICH_BOY, -#line 2545 +#line 2610 .trainerPic = TRAINER_PIC_RICH_BOY, .encounterMusic_gender = -#line 2547 +#line 2612 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 2548 +#line 2613 .items = { ITEM_FULL_RESTORE }, -#line 2549 +#line 2614 .doubleBattle = FALSE, -#line 2550 +#line 2615 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2552 +#line 2617 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2552 +#line 2617 .heldItem = ITEM_NUGGET, -#line 2554 +#line 2619 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2553 +#line 2618 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 2555 +#line 2620 MOVE_FURY_SWIPES, MOVE_MUD_SPORT, MOVE_ODOR_SLEUTH, @@ -6436,1135 +6436,975 @@ F_TRAINER_FEMALE | }, }, }, -#line 2560 +#line 2625 [TRAINER_STEVE_1] = { -#line 2561 +#line 2626 .trainerName = _("STEVE"), -#line 2562 +#line 2627 .trainerClass = TRAINER_CLASS_POKEMANIAC, -#line 2563 +#line 2628 .trainerPic = TRAINER_PIC_POKEMANIAC, .encounterMusic_gender = -#line 2565 +#line 2630 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2566 +#line 2631 .doubleBattle = FALSE, -#line 2567 +#line 2632 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2569 +#line 2634 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2571 +#line 2636 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2570 +#line 2635 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2573 +#line 2638 [TRAINER_THALIA_1] = { -#line 2574 +#line 2639 .trainerName = _("THALIA"), -#line 2575 +#line 2640 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 2576 +#line 2641 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 2577 +#line 2642 F_TRAINER_FEMALE | -#line 2578 +#line 2643 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 2579 +#line 2644 .doubleBattle = FALSE, -#line 2580 +#line 2645 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2582 +#line 2647 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2584 +#line 2649 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2583 +#line 2648 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2586 +#line 2651 .species = SPECIES_HORSEA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2588 +#line 2653 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2587 +#line 2652 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2590 +#line 2655 [TRAINER_MARK] = { -#line 2591 +#line 2656 .trainerName = _("MARK"), -#line 2592 +#line 2657 .trainerClass = TRAINER_CLASS_POKEMANIAC, -#line 2593 +#line 2658 .trainerPic = TRAINER_PIC_POKEMANIAC, .encounterMusic_gender = -#line 2595 +#line 2660 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2596 +#line 2661 .doubleBattle = FALSE, -#line 2597 +#line 2662 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2599 +#line 2664 .species = SPECIES_RHYHORN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2601 +#line 2666 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2600 +#line 2665 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2603 +#line 2668 [TRAINER_GRUNT_MT_CHIMNEY_1] = { -#line 2604 +#line 2669 .trainerName = _("GRUNT"), -#line 2605 +#line 2670 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 2606 +#line 2671 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, .encounterMusic_gender = -#line 2607 +#line 2672 F_TRAINER_FEMALE | -#line 2608 +#line 2673 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 2609 +#line 2674 .doubleBattle = FALSE, -#line 2610 +#line 2675 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2612 +#line 2677 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2614 +#line 2679 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2613 +#line 2678 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2616 +#line 2681 [TRAINER_STEVE_2] = { -#line 2617 +#line 2682 .trainerName = _("STEVE"), -#line 2618 +#line 2683 .trainerClass = TRAINER_CLASS_POKEMANIAC, -#line 2619 +#line 2684 .trainerPic = TRAINER_PIC_POKEMANIAC, .encounterMusic_gender = -#line 2621 +#line 2686 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2622 +#line 2687 .doubleBattle = FALSE, -#line 2623 +#line 2688 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2625 +#line 2690 .species = SPECIES_LAIRON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2627 +#line 2692 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2626 +#line 2691 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2629 +#line 2694 [TRAINER_STEVE_3] = { -#line 2630 +#line 2695 .trainerName = _("STEVE"), -#line 2631 +#line 2696 .trainerClass = TRAINER_CLASS_POKEMANIAC, -#line 2632 +#line 2697 .trainerPic = TRAINER_PIC_POKEMANIAC, .encounterMusic_gender = -#line 2634 +#line 2699 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2635 +#line 2700 .doubleBattle = FALSE, -#line 2636 +#line 2701 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2638 +#line 2703 .species = SPECIES_LAIRON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2640 +#line 2705 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 2639 +#line 2704 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2642 +#line 2707 .species = SPECIES_RHYHORN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2644 +#line 2709 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 2643 +#line 2708 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2646 +#line 2711 [TRAINER_STEVE_4] = { -#line 2647 +#line 2712 .trainerName = _("STEVE"), -#line 2648 +#line 2713 .trainerClass = TRAINER_CLASS_POKEMANIAC, -#line 2649 +#line 2714 .trainerPic = TRAINER_PIC_POKEMANIAC, .encounterMusic_gender = -#line 2651 +#line 2716 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2652 +#line 2717 .doubleBattle = FALSE, -#line 2653 +#line 2718 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2655 +#line 2720 .species = SPECIES_LAIRON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2657 +#line 2722 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 2656 +#line 2721 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2659 +#line 2724 .species = SPECIES_RHYHORN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2661 +#line 2726 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 2660 +#line 2725 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2663 +#line 2728 [TRAINER_STEVE_5] = { -#line 2664 +#line 2729 .trainerName = _("STEVE"), -#line 2665 +#line 2730 .trainerClass = TRAINER_CLASS_POKEMANIAC, -#line 2666 +#line 2731 .trainerPic = TRAINER_PIC_POKEMANIAC, .encounterMusic_gender = -#line 2668 +#line 2733 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 2669 +#line 2734 .doubleBattle = FALSE, -#line 2670 +#line 2735 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2672 +#line 2737 .species = SPECIES_AGGRON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2674 +#line 2739 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2673 +#line 2738 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2676 +#line 2741 .species = SPECIES_RHYDON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2678 +#line 2743 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 2677 +#line 2742 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2680 +#line 2745 [TRAINER_LUIS] = { -#line 2681 +#line 2746 .trainerName = _("LUIS"), -#line 2682 +#line 2747 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2683 +#line 2748 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2685 +#line 2750 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2686 +#line 2751 .doubleBattle = FALSE, -#line 2687 +#line 2752 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2689 +#line 2754 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2691 +#line 2756 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2690 +#line 2755 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2693 +#line 2758 [TRAINER_DOMINIK] = { -#line 2694 +#line 2759 .trainerName = _("DOMINIK"), -#line 2695 +#line 2760 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2696 +#line 2761 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2698 +#line 2763 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2699 +#line 2764 .doubleBattle = FALSE, -#line 2700 +#line 2765 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2702 +#line 2767 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2704 +#line 2769 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2703 +#line 2768 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2706 +#line 2771 [TRAINER_DOUGLAS] = { -#line 2707 +#line 2772 .trainerName = _("DOUGLAS"), -#line 2708 +#line 2773 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2709 +#line 2774 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2711 +#line 2776 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2712 +#line 2777 .doubleBattle = FALSE, -#line 2713 +#line 2778 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2715 +#line 2780 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2717 +#line 2782 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2716 +#line 2781 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2719 +#line 2784 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2721 +#line 2786 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2720 +#line 2785 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2723 +#line 2788 [TRAINER_DARRIN] = { -#line 2724 +#line 2789 .trainerName = _("DARRIN"), -#line 2725 +#line 2790 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2726 +#line 2791 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2728 +#line 2793 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2729 +#line 2794 .doubleBattle = FALSE, -#line 2730 +#line 2795 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 2732 +#line 2797 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2734 +#line 2799 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2733 +#line 2798 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2736 +#line 2801 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2738 +#line 2803 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2737 +#line 2802 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2740 +#line 2805 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2742 +#line 2807 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 2741 +#line 2806 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2744 +#line 2809 [TRAINER_TONY_1] = { -#line 2745 +#line 2810 .trainerName = _("TONY"), -#line 2746 +#line 2811 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2747 +#line 2812 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2749 +#line 2814 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2750 +#line 2815 .doubleBattle = FALSE, -#line 2751 +#line 2816 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2753 +#line 2818 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2755 +#line 2820 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2754 +#line 2819 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2757 +#line 2822 [TRAINER_JEROME] = { -#line 2758 +#line 2823 .trainerName = _("JEROME"), -#line 2759 +#line 2824 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2760 +#line 2825 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2762 +#line 2827 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2763 +#line 2828 .doubleBattle = FALSE, -#line 2764 +#line 2829 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2766 +#line 2831 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2768 +#line 2833 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2767 +#line 2832 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2770 +#line 2835 [TRAINER_MATTHEW] = { -#line 2771 +#line 2836 .trainerName = _("MATTHEW"), -#line 2772 +#line 2837 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2773 +#line 2838 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2775 +#line 2840 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2776 +#line 2841 .doubleBattle = FALSE, -#line 2777 +#line 2842 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 2779 +#line 2844 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2781 +#line 2846 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2780 +#line 2845 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2783 +#line 2848 [TRAINER_DAVID] = { -#line 2784 +#line 2849 .trainerName = _("DAVID"), -#line 2785 +#line 2850 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2786 +#line 2851 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2788 +#line 2853 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2789 +#line 2854 .doubleBattle = FALSE, -#line 2790 +#line 2855 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2792 +#line 2857 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2794 +#line 2859 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2793 +#line 2858 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 2796 +#line 2861 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2798 +#line 2863 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2797 +#line 2862 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 2800 +#line 2865 [TRAINER_SPENCER] = { -#line 2801 +#line 2866 .trainerName = _("SPENCER"), -#line 2802 +#line 2867 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2803 +#line 2868 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 2805 +#line 2870 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2806 +#line 2871 .doubleBattle = FALSE, -#line 2807 +#line 2872 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 2809 +#line 2874 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2811 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2810 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 2813 - .species = SPECIES_WINGULL, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 2815 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2814 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 2817 - [TRAINER_ROLAND] = - { -#line 2818 - .trainerName = _("ROLAND"), -#line 2819 - .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2820 - .trainerPic = TRAINER_PIC_SWIMMER_M, - .encounterMusic_gender = -#line 2822 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2823 - .doubleBattle = FALSE, -#line 2824 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 2826 - .species = SPECIES_CARVANHA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 2828 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2827 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 2830 - [TRAINER_NOLEN] = - { -#line 2831 - .trainerName = _("NOLEN"), -#line 2832 - .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2833 - .trainerPic = TRAINER_PIC_SWIMMER_M, - .encounterMusic_gender = -#line 2835 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2836 - .doubleBattle = FALSE, -#line 2837 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 2839 - .species = SPECIES_TENTACRUEL, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 2841 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2840 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 2843 - [TRAINER_STAN] = - { -#line 2844 - .trainerName = _("STAN"), -#line 2845 - .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2846 - .trainerPic = TRAINER_PIC_SWIMMER_M, - .encounterMusic_gender = -#line 2848 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2849 - .doubleBattle = FALSE, -#line 2850 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 2852 - .species = SPECIES_HORSEA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 2854 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2853 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 2856 - [TRAINER_BARRY] = - { -#line 2857 - .trainerName = _("BARRY"), -#line 2858 - .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2859 - .trainerPic = TRAINER_PIC_SWIMMER_M, - .encounterMusic_gender = -#line 2861 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2862 - .doubleBattle = FALSE, -#line 2863 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 2865 - .species = SPECIES_GYARADOS, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 2867 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2866 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 2869 - [TRAINER_DEAN] = - { -#line 2870 - .trainerName = _("DEAN"), -#line 2871 - .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2872 - .trainerPic = TRAINER_PIC_SWIMMER_M, - .encounterMusic_gender = -#line 2874 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2875 - .doubleBattle = FALSE, #line 2876 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 3, - .party = (const struct TrainerMon[]) - { + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 2875 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, { #line 2878 - .species = SPECIES_CARVANHA, + .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, #line 2880 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 2879 - .lvl = 31, + .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, - { + }, + }, #line 2882 - .species = SPECIES_WINGULL, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 2884 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), + [TRAINER_ROLAND] = + { #line 2883 - .lvl = 31, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, + .trainerName = _("ROLAND"), +#line 2884 + .trainerClass = TRAINER_CLASS_SWIMMER_M, +#line 2885 + .trainerPic = TRAINER_PIC_SWIMMER_M, + .encounterMusic_gender = +#line 2887 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 2888 + .doubleBattle = FALSE, +#line 2889 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { { -#line 2886 +#line 2891 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 2888 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2887 - .lvl = 31, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 2890 - [TRAINER_RODNEY] = - { -#line 2891 - .trainerName = _("RODNEY"), -#line 2892 - .trainerClass = TRAINER_CLASS_SWIMMER_M, #line 2893 - .trainerPic = TRAINER_PIC_SWIMMER_M, - .encounterMusic_gender = + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 2892 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, #line 2895 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, + [TRAINER_NOLEN] = + { #line 2896 - .doubleBattle = FALSE, + .trainerName = _("NOLEN"), #line 2897 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 2899 - .species = SPECIES_GYARADOS, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 2901 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), + .trainerClass = TRAINER_CLASS_SWIMMER_M, +#line 2898 + .trainerPic = TRAINER_PIC_SWIMMER_M, + .encounterMusic_gender = #line 2900 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 2903 - [TRAINER_RICHARD] = - { + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 2901 + .doubleBattle = FALSE, +#line 2902 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { #line 2904 - .trainerName = _("RICHARD"), -#line 2905 - .trainerClass = TRAINER_CLASS_SWIMMER_M, + .species = SPECIES_TENTACRUEL, + .gender = TRAINER_MON_RANDOM_GENDER, #line 2906 - .trainerPic = TRAINER_PIC_SWIMMER_M, - .encounterMusic_gender = + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 2905 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, #line 2908 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, + [TRAINER_STAN] = + { #line 2909 - .doubleBattle = FALSE, + .trainerName = _("STAN"), #line 2910 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 2912 - .species = SPECIES_PELIPPER, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 2914 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), + .trainerClass = TRAINER_CLASS_SWIMMER_M, +#line 2911 + .trainerPic = TRAINER_PIC_SWIMMER_M, + .encounterMusic_gender = #line 2913 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 2916 - [TRAINER_HERMAN] = - { + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 2914 + .doubleBattle = FALSE, +#line 2915 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { #line 2917 - .trainerName = _("HERMAN"), -#line 2918 - .trainerClass = TRAINER_CLASS_SWIMMER_M, + .species = SPECIES_HORSEA, + .gender = TRAINER_MON_RANDOM_GENDER, #line 2919 - .trainerPic = TRAINER_PIC_SWIMMER_M, - .encounterMusic_gender = + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 2918 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, #line 2921 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, + [TRAINER_BARRY] = + { #line 2922 - .doubleBattle = FALSE, + .trainerName = _("BARRY"), #line 2923 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 2925 - .species = SPECIES_WINGULL, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 2927 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), + .trainerClass = TRAINER_CLASS_SWIMMER_M, +#line 2924 + .trainerPic = TRAINER_PIC_SWIMMER_M, + .encounterMusic_gender = #line 2926 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 2927 + .doubleBattle = FALSE, +#line 2928 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { { -#line 2929 - .species = SPECIES_TENTACRUEL, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 2931 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 2930 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 2933 - [TRAINER_SANTIAGO] = - { -#line 2934 - .trainerName = _("SANTIAGO"), -#line 2935 - .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2936 - .trainerPic = TRAINER_PIC_SWIMMER_M, - .encounterMusic_gender = -#line 2938 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2939 - .doubleBattle = FALSE, -#line 2940 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 2942 - .species = SPECIES_TENTACRUEL, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 2944 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2943 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 2946 - .species = SPECIES_WAILMER, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 2948 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2947 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 2950 - [TRAINER_GILBERT] = - { -#line 2951 - .trainerName = _("GILBERT"), -#line 2952 - .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2953 - .trainerPic = TRAINER_PIC_SWIMMER_M, - .encounterMusic_gender = -#line 2955 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2956 - .doubleBattle = FALSE, -#line 2957 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 2959 - .species = SPECIES_SHARPEDO, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 2961 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2960 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 2963 - [TRAINER_FRANKLIN] = - { -#line 2964 - .trainerName = _("FRANKLIN"), -#line 2965 - .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2966 - .trainerPic = TRAINER_PIC_SWIMMER_M, - .encounterMusic_gender = -#line 2968 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2969 - .doubleBattle = FALSE, -#line 2970 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 2972 - .species = SPECIES_SEALEO, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 2974 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2973 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 2976 - [TRAINER_KEVIN] = - { -#line 2977 - .trainerName = _("KEVIN"), -#line 2978 - .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2979 - .trainerPic = TRAINER_PIC_SWIMMER_M, - .encounterMusic_gender = -#line 2981 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2982 - .doubleBattle = FALSE, -#line 2983 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 2985 - .species = SPECIES_SPHEAL, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 2987 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2986 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 2989 - [TRAINER_JACK] = - { -#line 2990 - .trainerName = _("JACK"), -#line 2991 - .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 2992 - .trainerPic = TRAINER_PIC_SWIMMER_M, - .encounterMusic_gender = -#line 2994 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 2995 - .doubleBattle = FALSE, -#line 2996 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 2998 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3000 +#line 2932 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 2999 +#line 2931 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3002 - [TRAINER_DUDLEY] = +#line 2934 + [TRAINER_DEAN] = { -#line 3003 - .trainerName = _("DUDLEY"), -#line 3004 +#line 2935 + .trainerName = _("DEAN"), +#line 2936 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 3005 +#line 2937 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 3007 +#line 2939 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 3008 +#line 2940 .doubleBattle = FALSE, -#line 3009 +#line 2941 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { +#line 2943 + .species = SPECIES_CARVANHA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 2945 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 2944 + .lvl = 31, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 2947 + .species = SPECIES_WINGULL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 2949 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 2948 + .lvl = 31, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 2951 + .species = SPECIES_CARVANHA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 2953 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 2952 + .lvl = 31, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 2955 + [TRAINER_RODNEY] = + { +#line 2956 + .trainerName = _("RODNEY"), +#line 2957 + .trainerClass = TRAINER_CLASS_SWIMMER_M, +#line 2958 + .trainerPic = TRAINER_PIC_SWIMMER_M, + .encounterMusic_gender = +#line 2960 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 2961 + .doubleBattle = FALSE, +#line 2962 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 2964 + .species = SPECIES_GYARADOS, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 2966 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 2965 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 2968 + [TRAINER_RICHARD] = + { +#line 2969 + .trainerName = _("RICHARD"), +#line 2970 + .trainerClass = TRAINER_CLASS_SWIMMER_M, +#line 2971 + .trainerPic = TRAINER_PIC_SWIMMER_M, + .encounterMusic_gender = +#line 2973 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 2974 + .doubleBattle = FALSE, +#line 2975 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 2977 + .species = SPECIES_PELIPPER, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 2979 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 2978 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 2981 + [TRAINER_HERMAN] = + { +#line 2982 + .trainerName = _("HERMAN"), +#line 2983 + .trainerClass = TRAINER_CLASS_SWIMMER_M, +#line 2984 + .trainerPic = TRAINER_PIC_SWIMMER_M, + .encounterMusic_gender = +#line 2986 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 2987 + .doubleBattle = FALSE, +#line 2988 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 2990 + .species = SPECIES_WINGULL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 2992 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 2991 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 2994 + .species = SPECIES_TENTACRUEL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 2996 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 2995 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 2998 + [TRAINER_SANTIAGO] = + { +#line 2999 + .trainerName = _("SANTIAGO"), +#line 3000 + .trainerClass = TRAINER_CLASS_SWIMMER_M, +#line 3001 + .trainerPic = TRAINER_PIC_SWIMMER_M, + .encounterMusic_gender = +#line 3003 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 3004 + .doubleBattle = FALSE, +#line 3005 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 3007 + .species = SPECIES_TENTACRUEL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 3009 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 3008 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { #line 3011 - .species = SPECIES_TENTACOOL, + .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, #line 3013 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), @@ -7573,739 +7413,899 @@ F_TRAINER_FEMALE | .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, - { + }, + }, #line 3015 - .species = SPECIES_WINGULL, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 3017 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), + [TRAINER_GILBERT] = + { #line 3016 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 3019 - .species = SPECIES_TENTACRUEL, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 3021 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), + .trainerName = _("GILBERT"), +#line 3017 + .trainerClass = TRAINER_CLASS_SWIMMER_M, +#line 3018 + .trainerPic = TRAINER_PIC_SWIMMER_M, + .encounterMusic_gender = #line 3020 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 3023 - [TRAINER_CHAD] = - { -#line 3024 - .trainerName = _("CHAD"), -#line 3025 - .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 3026 - .trainerPic = TRAINER_PIC_SWIMMER_M, - .encounterMusic_gender = -#line 3028 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 3029 +#line 3021 .doubleBattle = FALSE, -#line 3030 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 3032 - .species = SPECIES_TENTACOOL, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 3034 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3033 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 3036 - .species = SPECIES_WAILMER, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 3038 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3037 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 3040 - [TRAINER_TONY_2] = - { -#line 3041 - .trainerName = _("TONY"), -#line 3042 - .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 3043 - .trainerPic = TRAINER_PIC_SWIMMER_M, - .encounterMusic_gender = -#line 3045 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 3046 - .doubleBattle = FALSE, -#line 3047 +#line 3022 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3049 +#line 3024 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3051 - .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), +#line 3026 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 3025 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 3028 + [TRAINER_FRANKLIN] = + { +#line 3029 + .trainerName = _("FRANKLIN"), +#line 3030 + .trainerClass = TRAINER_CLASS_SWIMMER_M, +#line 3031 + .trainerPic = TRAINER_PIC_SWIMMER_M, + .encounterMusic_gender = +#line 3033 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 3034 + .doubleBattle = FALSE, +#line 3035 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 3037 + .species = SPECIES_SEALEO, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 3039 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 3038 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 3041 + [TRAINER_KEVIN] = + { +#line 3042 + .trainerName = _("KEVIN"), +#line 3043 + .trainerClass = TRAINER_CLASS_SWIMMER_M, +#line 3044 + .trainerPic = TRAINER_PIC_SWIMMER_M, + .encounterMusic_gender = +#line 3046 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 3047 + .doubleBattle = FALSE, +#line 3048 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { #line 3050 + .species = SPECIES_SPHEAL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 3052 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 3051 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 3054 + [TRAINER_JACK] = + { +#line 3055 + .trainerName = _("JACK"), +#line 3056 + .trainerClass = TRAINER_CLASS_SWIMMER_M, +#line 3057 + .trainerPic = TRAINER_PIC_SWIMMER_M, + .encounterMusic_gender = +#line 3059 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 3060 + .doubleBattle = FALSE, +#line 3061 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 3063 + .species = SPECIES_GYARADOS, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 3065 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 3064 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 3067 + [TRAINER_DUDLEY] = + { +#line 3068 + .trainerName = _("DUDLEY"), +#line 3069 + .trainerClass = TRAINER_CLASS_SWIMMER_M, +#line 3070 + .trainerPic = TRAINER_PIC_SWIMMER_M, + .encounterMusic_gender = +#line 3072 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 3073 + .doubleBattle = FALSE, +#line 3074 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 3, + .party = (const struct TrainerMon[]) + { + { +#line 3076 + .species = SPECIES_TENTACOOL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 3078 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 3077 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 3080 + .species = SPECIES_WINGULL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 3082 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 3081 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 3084 + .species = SPECIES_TENTACRUEL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 3086 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 3085 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 3088 + [TRAINER_CHAD] = + { +#line 3089 + .trainerName = _("CHAD"), +#line 3090 + .trainerClass = TRAINER_CLASS_SWIMMER_M, +#line 3091 + .trainerPic = TRAINER_PIC_SWIMMER_M, + .encounterMusic_gender = +#line 3093 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 3094 + .doubleBattle = FALSE, +#line 3095 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 3097 + .species = SPECIES_TENTACOOL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 3099 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 3098 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 3101 + .species = SPECIES_WAILMER, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 3103 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 3102 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 3105 + [TRAINER_TONY_2] = + { +#line 3106 + .trainerName = _("TONY"), +#line 3107 + .trainerClass = TRAINER_CLASS_SWIMMER_M, +#line 3108 + .trainerPic = TRAINER_PIC_SWIMMER_M, + .encounterMusic_gender = +#line 3110 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 3111 + .doubleBattle = FALSE, +#line 3112 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 3114 + .species = SPECIES_SHARPEDO, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 3116 + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), +#line 3115 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3053 +#line 3118 [TRAINER_TONY_3] = { -#line 3054 +#line 3119 .trainerName = _("TONY"), -#line 3055 +#line 3120 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 3056 +#line 3121 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 3058 +#line 3123 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 3059 +#line 3124 .doubleBattle = FALSE, -#line 3060 +#line 3125 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3062 +#line 3127 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3064 +#line 3129 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3063 +#line 3128 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3066 +#line 3131 [TRAINER_TONY_4] = { -#line 3067 +#line 3132 .trainerName = _("TONY"), -#line 3068 +#line 3133 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 3069 +#line 3134 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 3071 +#line 3136 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 3072 +#line 3137 .doubleBattle = FALSE, -#line 3073 +#line 3138 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3075 +#line 3140 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3077 +#line 3142 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3076 +#line 3141 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3079 +#line 3144 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3081 +#line 3146 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3080 +#line 3145 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3083 +#line 3148 [TRAINER_TONY_5] = { -#line 3084 +#line 3149 .trainerName = _("TONY"), -#line 3085 +#line 3150 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 3086 +#line 3151 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 3088 +#line 3153 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 3089 +#line 3154 .doubleBattle = FALSE, -#line 3090 +#line 3155 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3092 +#line 3157 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3094 +#line 3159 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3093 +#line 3158 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3096 +#line 3161 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3098 +#line 3163 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3097 +#line 3162 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3100 +#line 3165 [TRAINER_TAKAO] = { -#line 3101 +#line 3166 .trainerName = _("TAKAO"), -#line 3102 +#line 3167 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3103 +#line 3168 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3105 +#line 3170 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3106 +#line 3171 .doubleBattle = FALSE, -#line 3107 +#line 3172 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3109 +#line 3174 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3111 +#line 3176 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 3110 +#line 3175 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3113 +#line 3178 [TRAINER_HITOSHI] = { -#line 3114 +#line 3179 .trainerName = _("HITOSHI"), -#line 3115 +#line 3180 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3116 +#line 3181 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3118 +#line 3183 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3119 +#line 3184 .doubleBattle = FALSE, -#line 3120 +#line 3185 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3122 +#line 3187 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3124 +#line 3189 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 3123 +#line 3188 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3126 +#line 3191 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3128 +#line 3193 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 3127 +#line 3192 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3130 +#line 3195 [TRAINER_KIYO] = { -#line 3131 +#line 3196 .trainerName = _("KIYO"), -#line 3132 +#line 3197 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3133 +#line 3198 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3135 +#line 3200 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3136 +#line 3201 .doubleBattle = FALSE, -#line 3137 +#line 3202 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3139 +#line 3204 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3141 +#line 3206 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3140 +#line 3205 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3143 +#line 3208 [TRAINER_KOICHI] = { -#line 3144 +#line 3209 .trainerName = _("KOICHI"), -#line 3145 +#line 3210 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3146 +#line 3211 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3148 +#line 3213 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3149 +#line 3214 .doubleBattle = FALSE, -#line 3150 +#line 3215 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3152 +#line 3217 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3154 +#line 3219 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3153 +#line 3218 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3156 +#line 3221 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3158 +#line 3223 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 3157 +#line 3222 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3160 +#line 3225 [TRAINER_NOB_1] = { -#line 3161 +#line 3226 .trainerName = _("NOB"), -#line 3162 +#line 3227 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3163 +#line 3228 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3165 +#line 3230 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3166 +#line 3231 .doubleBattle = FALSE, -#line 3167 +#line 3232 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3169 +#line 3234 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3171 +#line 3236 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3170 +#line 3235 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3173 +#line 3238 [TRAINER_NOB_2] = { -#line 3174 +#line 3239 .trainerName = _("NOB"), -#line 3175 +#line 3240 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3176 +#line 3241 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3178 +#line 3243 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3179 +#line 3244 .doubleBattle = FALSE, -#line 3180 +#line 3245 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3182 +#line 3247 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3184 +#line 3249 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 3183 +#line 3248 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3186 +#line 3251 [TRAINER_NOB_3] = { -#line 3187 +#line 3252 .trainerName = _("NOB"), -#line 3188 +#line 3253 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3189 +#line 3254 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3191 +#line 3256 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3192 +#line 3257 .doubleBattle = FALSE, -#line 3193 +#line 3258 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3195 +#line 3260 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3197 +#line 3262 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 3196 +#line 3261 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3199 +#line 3264 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3201 +#line 3266 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 3200 +#line 3265 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3203 +#line 3268 [TRAINER_NOB_4] = { -#line 3204 +#line 3269 .trainerName = _("NOB"), -#line 3205 +#line 3270 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3206 +#line 3271 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3208 +#line 3273 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3209 +#line 3274 .doubleBattle = FALSE, -#line 3210 +#line 3275 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3212 +#line 3277 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3214 +#line 3279 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 3213 +#line 3278 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3216 +#line 3281 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3218 +#line 3283 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 3217 +#line 3282 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3220 +#line 3285 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3222 +#line 3287 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 3221 +#line 3286 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3224 +#line 3289 [TRAINER_NOB_5] = { -#line 3225 +#line 3290 .trainerName = _("NOB"), -#line 3226 +#line 3291 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3227 +#line 3292 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3229 +#line 3294 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3230 +#line 3295 .doubleBattle = FALSE, -#line 3231 +#line 3296 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 3233 +#line 3298 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3235 +#line 3300 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 3234 +#line 3299 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3237 +#line 3302 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3239 +#line 3304 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 3238 +#line 3303 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3241 +#line 3306 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3243 +#line 3308 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 3242 +#line 3307 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3245 +#line 3310 .species = SPECIES_MACHAMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3245 +#line 3310 .heldItem = ITEM_BLACK_BELT, -#line 3247 +#line 3312 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 3246 +#line 3311 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3249 +#line 3314 [TRAINER_YUJI] = { -#line 3250 +#line 3315 .trainerName = _("YUJI"), -#line 3251 +#line 3316 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3252 +#line 3317 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3254 +#line 3319 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3255 +#line 3320 .doubleBattle = FALSE, -#line 3256 +#line 3321 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3258 +#line 3323 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3260 +#line 3325 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3259 +#line 3324 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3262 +#line 3327 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3264 +#line 3329 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3263 +#line 3328 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3266 +#line 3331 [TRAINER_DAISUKE] = { -#line 3267 +#line 3332 .trainerName = _("DAISUKE"), -#line 3268 +#line 3333 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3269 +#line 3334 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3271 +#line 3336 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3272 +#line 3337 .doubleBattle = FALSE, -#line 3273 +#line 3338 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3275 +#line 3340 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3277 +#line 3342 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3276 +#line 3341 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3279 +#line 3344 [TRAINER_ATSUSHI] = { -#line 3280 +#line 3345 .trainerName = _("ATSUSHI"), -#line 3281 +#line 3346 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 3282 +#line 3347 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 3284 +#line 3349 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3285 +#line 3350 .doubleBattle = FALSE, -#line 3286 +#line 3351 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3288 +#line 3353 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3290 +#line 3355 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3289 +#line 3354 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3292 +#line 3357 [TRAINER_KIRK] = { -#line 3293 +#line 3358 .trainerName = _("KIRK"), -#line 3294 +#line 3359 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3295 +#line 3360 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3297 +#line 3362 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3298 +#line 3363 .doubleBattle = FALSE, -#line 3299 +#line 3364 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3301 +#line 3366 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3303 +#line 3368 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3302 +#line 3367 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 3304 +#line 3369 MOVE_QUICK_ATTACK, MOVE_THUNDER_WAVE, MOVE_SPARK, @@ -8313,17 +8313,17 @@ F_TRAINER_FEMALE | }, }, { -#line 3309 +#line 3374 .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3311 +#line 3376 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3310 +#line 3375 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 3312 +#line 3377 MOVE_CHARGE, MOVE_SHOCK_WAVE, MOVE_SCREECH, @@ -8331,845 +8331,845 @@ F_TRAINER_FEMALE | }, }, }, -#line 3316 +#line 3381 [TRAINER_GRUNT_AQUA_HIDEOUT_7] = { -#line 3317 +#line 3382 .trainerName = _("GRUNT"), -#line 3318 +#line 3383 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 3319 +#line 3384 .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = -#line 3320 +#line 3385 F_TRAINER_FEMALE | -#line 3321 +#line 3386 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 3322 +#line 3387 .doubleBattle = FALSE, -#line 3323 +#line 3388 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3325 +#line 3390 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3327 +#line 3392 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3326 +#line 3391 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3329 +#line 3394 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3331 +#line 3396 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3330 +#line 3395 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3333 +#line 3398 [TRAINER_GRUNT_AQUA_HIDEOUT_8] = { -#line 3334 +#line 3399 .trainerName = _("GRUNT"), -#line 3335 +#line 3400 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 3336 +#line 3401 .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, .encounterMusic_gender = -#line 3338 +#line 3403 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 3339 +#line 3404 .doubleBattle = FALSE, -#line 3340 +#line 3405 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3342 +#line 3407 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3344 +#line 3409 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3343 +#line 3408 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3346 +#line 3411 [TRAINER_SHAWN] = { -#line 3347 +#line 3412 .trainerName = _("SHAWN"), -#line 3348 +#line 3413 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3349 +#line 3414 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3351 +#line 3416 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3352 +#line 3417 .doubleBattle = FALSE, -#line 3353 +#line 3418 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3355 +#line 3420 .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3357 +#line 3422 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3356 +#line 3421 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3359 +#line 3424 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3361 +#line 3426 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3360 +#line 3425 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3363 +#line 3428 [TRAINER_FERNANDO_1] = { -#line 3364 +#line 3429 .trainerName = _("FERNANDO"), -#line 3365 +#line 3430 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3366 +#line 3431 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3368 +#line 3433 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3369 +#line 3434 .doubleBattle = FALSE, -#line 3370 +#line 3435 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3372 +#line 3437 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3374 +#line 3439 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3373 +#line 3438 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3376 +#line 3441 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3378 +#line 3443 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3377 +#line 3442 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3380 +#line 3445 [TRAINER_DALTON_1] = { -#line 3381 +#line 3446 .trainerName = _("DALTON"), -#line 3382 +#line 3447 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3383 +#line 3448 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3385 +#line 3450 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3386 +#line 3451 .doubleBattle = FALSE, -#line 3387 +#line 3452 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3389 +#line 3454 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3391 +#line 3456 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3390 +#line 3455 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3393 +#line 3458 .species = SPECIES_WHISMUR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3395 +#line 3460 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3394 +#line 3459 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3397 +#line 3462 [TRAINER_DALTON_2] = { -#line 3398 +#line 3463 .trainerName = _("DALTON"), -#line 3399 +#line 3464 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3400 +#line 3465 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3402 +#line 3467 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3403 +#line 3468 .doubleBattle = FALSE, -#line 3404 +#line 3469 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3406 +#line 3471 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3408 +#line 3473 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3407 +#line 3472 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3410 +#line 3475 .species = SPECIES_WHISMUR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3412 +#line 3477 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3411 +#line 3476 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3414 +#line 3479 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3416 +#line 3481 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3415 +#line 3480 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3418 +#line 3483 [TRAINER_DALTON_3] = { -#line 3419 +#line 3484 .trainerName = _("DALTON"), -#line 3420 +#line 3485 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3421 +#line 3486 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3423 +#line 3488 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3424 +#line 3489 .doubleBattle = FALSE, -#line 3425 +#line 3490 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3427 +#line 3492 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3429 +#line 3494 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3428 +#line 3493 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3431 +#line 3496 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3433 +#line 3498 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3432 +#line 3497 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3435 +#line 3500 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3437 +#line 3502 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3436 +#line 3501 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3439 +#line 3504 [TRAINER_DALTON_4] = { -#line 3440 +#line 3505 .trainerName = _("DALTON"), -#line 3441 +#line 3506 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3442 +#line 3507 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3444 +#line 3509 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3445 +#line 3510 .doubleBattle = FALSE, -#line 3446 +#line 3511 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3448 +#line 3513 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3450 +#line 3515 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3449 +#line 3514 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3452 +#line 3517 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3454 +#line 3519 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3453 +#line 3518 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3456 +#line 3521 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3458 +#line 3523 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3457 +#line 3522 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3460 +#line 3525 [TRAINER_DALTON_5] = { -#line 3461 +#line 3526 .trainerName = _("DALTON"), -#line 3462 +#line 3527 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 3463 +#line 3528 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 3465 +#line 3530 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 3466 +#line 3531 .doubleBattle = FALSE, -#line 3467 +#line 3532 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3469 +#line 3534 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3471 +#line 3536 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3470 +#line 3535 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3473 +#line 3538 .species = SPECIES_EXPLOUD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3475 +#line 3540 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3474 +#line 3539 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3477 +#line 3542 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3479 +#line 3544 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3478 +#line 3543 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3481 +#line 3546 [TRAINER_COLE] = { -#line 3482 +#line 3547 .trainerName = _("COLE"), -#line 3483 +#line 3548 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3484 +#line 3549 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3486 +#line 3551 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3487 +#line 3552 .doubleBattle = FALSE, -#line 3488 +#line 3553 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3490 +#line 3555 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3492 +#line 3557 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3491 +#line 3556 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3494 +#line 3559 [TRAINER_JEFF] = { -#line 3495 +#line 3560 .trainerName = _("JEFF"), -#line 3496 +#line 3561 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3497 +#line 3562 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3499 +#line 3564 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3500 +#line 3565 .doubleBattle = FALSE, -#line 3501 +#line 3566 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3503 +#line 3568 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3505 +#line 3570 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3504 +#line 3569 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3507 +#line 3572 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3509 +#line 3574 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3508 +#line 3573 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3511 +#line 3576 [TRAINER_AXLE] = { -#line 3512 +#line 3577 .trainerName = _("AXLE"), -#line 3513 +#line 3578 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3514 +#line 3579 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3516 +#line 3581 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3517 +#line 3582 .doubleBattle = FALSE, -#line 3518 +#line 3583 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3520 +#line 3585 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3522 +#line 3587 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3521 +#line 3586 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3524 +#line 3589 [TRAINER_JACE] = { -#line 3525 +#line 3590 .trainerName = _("JACE"), -#line 3526 +#line 3591 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3527 +#line 3592 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3529 +#line 3594 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3530 +#line 3595 .doubleBattle = FALSE, -#line 3531 +#line 3596 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3533 +#line 3598 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3535 +#line 3600 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3534 +#line 3599 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3537 +#line 3602 [TRAINER_KEEGAN] = { -#line 3538 +#line 3603 .trainerName = _("KEEGAN"), -#line 3539 +#line 3604 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3540 +#line 3605 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3542 +#line 3607 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3543 +#line 3608 .doubleBattle = FALSE, -#line 3544 +#line 3609 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3546 +#line 3611 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3548 +#line 3613 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 3547 +#line 3612 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3550 +#line 3615 [TRAINER_BERNIE_1] = { -#line 3551 +#line 3616 .trainerName = _("BERNIE"), -#line 3552 +#line 3617 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3553 +#line 3618 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3555 +#line 3620 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3556 +#line 3621 .doubleBattle = FALSE, -#line 3557 +#line 3622 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3559 +#line 3624 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3561 +#line 3626 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3560 +#line 3625 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3563 +#line 3628 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3565 +#line 3630 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3564 +#line 3629 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3567 +#line 3632 [TRAINER_BERNIE_2] = { -#line 3568 +#line 3633 .trainerName = _("BERNIE"), -#line 3569 +#line 3634 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3570 +#line 3635 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3572 +#line 3637 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3573 +#line 3638 .doubleBattle = FALSE, -#line 3574 +#line 3639 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3576 +#line 3641 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3578 +#line 3643 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3577 +#line 3642 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3580 +#line 3645 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3582 +#line 3647 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3581 +#line 3646 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3584 +#line 3649 [TRAINER_BERNIE_3] = { -#line 3585 +#line 3650 .trainerName = _("BERNIE"), -#line 3586 +#line 3651 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3587 +#line 3652 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3589 +#line 3654 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3590 +#line 3655 .doubleBattle = FALSE, -#line 3591 +#line 3656 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3593 +#line 3658 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3595 +#line 3660 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3594 +#line 3659 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3597 +#line 3662 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3599 +#line 3664 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3598 +#line 3663 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3601 +#line 3666 [TRAINER_BERNIE_4] = { -#line 3602 +#line 3667 .trainerName = _("BERNIE"), -#line 3603 +#line 3668 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3604 +#line 3669 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3606 +#line 3671 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3607 +#line 3672 .doubleBattle = FALSE, -#line 3608 +#line 3673 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3610 +#line 3675 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3612 +#line 3677 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3611 +#line 3676 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3614 +#line 3679 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3616 +#line 3681 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3615 +#line 3680 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3618 +#line 3683 [TRAINER_BERNIE_5] = { -#line 3619 +#line 3684 .trainerName = _("BERNIE"), -#line 3620 +#line 3685 .trainerClass = TRAINER_CLASS_KINDLER, -#line 3621 +#line 3686 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 3623 +#line 3688 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 3624 +#line 3689 .doubleBattle = FALSE, -#line 3625 +#line 3690 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3627 +#line 3692 .species = SPECIES_MAGCARGO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3629 +#line 3694 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3628 +#line 3693 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3631 +#line 3696 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3633 +#line 3698 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3632 +#line 3697 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3635 +#line 3700 [TRAINER_DREW] = { -#line 3636 +#line 3701 .trainerName = _("DREW"), -#line 3637 +#line 3702 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3638 +#line 3703 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3640 +#line 3705 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3641 +#line 3706 .doubleBattle = FALSE, -#line 3642 +#line 3707 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3644 +#line 3709 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3646 +#line 3711 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3645 +#line 3710 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 3647 +#line 3712 MOVE_DIG, MOVE_SAND_ATTACK, MOVE_POISON_STING, @@ -9178,37 +9178,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 3652 +#line 3717 [TRAINER_BEAU] = { -#line 3653 +#line 3718 .trainerName = _("BEAU"), -#line 3654 +#line 3719 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3655 +#line 3720 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3657 +#line 3722 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3658 +#line 3723 .doubleBattle = FALSE, -#line 3659 +#line 3724 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3661 +#line 3726 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3663 +#line 3728 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3662 +#line 3727 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 3664 +#line 3729 MOVE_RAPID_SPIN, MOVE_MUD_SLAP, MOVE_PSYBEAM, @@ -9216,17 +9216,17 @@ F_TRAINER_FEMALE | }, }, { -#line 3669 +#line 3734 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3671 +#line 3736 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3670 +#line 3735 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 3672 +#line 3737 MOVE_POISON_STING, MOVE_SAND_ATTACK, MOVE_SCRATCH, @@ -9234,17 +9234,17 @@ F_TRAINER_FEMALE | }, }, { -#line 3677 +#line 3742 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3679 +#line 3744 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3678 +#line 3743 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 3680 +#line 3745 MOVE_RAPID_SPIN, MOVE_MUD_SLAP, MOVE_PSYBEAM, @@ -9253,1973 +9253,1973 @@ F_TRAINER_FEMALE | }, }, }, -#line 3685 +#line 3750 [TRAINER_LARRY] = { -#line 3686 +#line 3751 .trainerName = _("LARRY"), -#line 3687 +#line 3752 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3688 +#line 3753 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3690 +#line 3755 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3691 +#line 3756 .doubleBattle = FALSE, -#line 3692 +#line 3757 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3694 +#line 3759 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3696 +#line 3761 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3695 +#line 3760 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3698 +#line 3763 [TRAINER_SHANE] = { -#line 3699 +#line 3764 .trainerName = _("SHANE"), -#line 3700 +#line 3765 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3701 +#line 3766 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3703 +#line 3768 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3704 +#line 3769 .doubleBattle = FALSE, -#line 3705 +#line 3770 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3707 +#line 3772 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3709 +#line 3774 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3708 +#line 3773 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3711 +#line 3776 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3713 +#line 3778 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3712 +#line 3777 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3715 +#line 3780 [TRAINER_JUSTIN] = { -#line 3716 +#line 3781 .trainerName = _("JUSTIN"), -#line 3717 +#line 3782 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3718 +#line 3783 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3720 +#line 3785 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3721 +#line 3786 .doubleBattle = FALSE, -#line 3722 +#line 3787 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3724 +#line 3789 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3726 +#line 3791 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3725 +#line 3790 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3728 +#line 3793 [TRAINER_ETHAN_1] = { -#line 3729 +#line 3794 .trainerName = _("ETHAN"), -#line 3730 +#line 3795 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3731 +#line 3796 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3733 +#line 3798 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3734 +#line 3799 .doubleBattle = FALSE, -#line 3735 +#line 3800 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3737 +#line 3802 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3739 +#line 3804 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3738 +#line 3803 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3741 +#line 3806 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3743 +#line 3808 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3742 +#line 3807 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3745 +#line 3810 [TRAINER_AUTUMN] = { -#line 3746 +#line 3811 .trainerName = _("AUTUMN"), -#line 3747 +#line 3812 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 3748 +#line 3813 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 3749 +#line 3814 F_TRAINER_FEMALE | -#line 3750 +#line 3815 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 3751 +#line 3816 .doubleBattle = FALSE, -#line 3752 +#line 3817 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3754 +#line 3819 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3756 +#line 3821 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3755 +#line 3820 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3758 +#line 3823 [TRAINER_TRAVIS] = { -#line 3759 +#line 3824 .trainerName = _("TRAVIS"), -#line 3760 +#line 3825 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3761 +#line 3826 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3763 +#line 3828 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3764 +#line 3829 .doubleBattle = FALSE, -#line 3765 +#line 3830 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3767 +#line 3832 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3769 +#line 3834 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3768 +#line 3833 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3771 +#line 3836 [TRAINER_ETHAN_2] = { -#line 3772 +#line 3837 .trainerName = _("ETHAN"), -#line 3773 +#line 3838 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3774 +#line 3839 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3776 +#line 3841 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3777 +#line 3842 .doubleBattle = FALSE, -#line 3778 +#line 3843 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3780 +#line 3845 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3782 +#line 3847 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3781 +#line 3846 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3784 +#line 3849 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3786 +#line 3851 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3785 +#line 3850 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3788 +#line 3853 [TRAINER_ETHAN_3] = { -#line 3789 +#line 3854 .trainerName = _("ETHAN"), -#line 3790 +#line 3855 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3791 +#line 3856 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3793 +#line 3858 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3794 +#line 3859 .doubleBattle = FALSE, -#line 3795 +#line 3860 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3797 +#line 3862 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3799 +#line 3864 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3798 +#line 3863 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3801 +#line 3866 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3803 +#line 3868 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3802 +#line 3867 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3805 +#line 3870 [TRAINER_ETHAN_4] = { -#line 3806 +#line 3871 .trainerName = _("ETHAN"), -#line 3807 +#line 3872 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3808 +#line 3873 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3810 +#line 3875 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3811 +#line 3876 .doubleBattle = FALSE, -#line 3812 +#line 3877 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3814 +#line 3879 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3816 +#line 3881 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3815 +#line 3880 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3818 +#line 3883 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3820 +#line 3885 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3819 +#line 3884 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3822 +#line 3887 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3824 +#line 3889 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3823 +#line 3888 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3826 +#line 3891 [TRAINER_ETHAN_5] = { -#line 3827 +#line 3892 .trainerName = _("ETHAN"), -#line 3828 +#line 3893 .trainerClass = TRAINER_CLASS_CAMPER, -#line 3829 +#line 3894 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 3831 +#line 3896 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 3832 +#line 3897 .doubleBattle = FALSE, -#line 3833 +#line 3898 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3835 +#line 3900 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3837 +#line 3902 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3836 +#line 3901 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3839 +#line 3904 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3841 +#line 3906 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3840 +#line 3905 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3843 +#line 3908 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3845 +#line 3910 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 3844 +#line 3909 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3847 +#line 3912 [TRAINER_BRENT] = { -#line 3848 +#line 3913 .trainerName = _("BRENT"), -#line 3849 +#line 3914 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3850 +#line 3915 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3852 +#line 3917 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3853 +#line 3918 .doubleBattle = FALSE, -#line 3854 +#line 3919 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 3856 +#line 3921 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3858 +#line 3923 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3857 +#line 3922 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3860 +#line 3925 [TRAINER_DONALD] = { -#line 3861 +#line 3926 .trainerName = _("DONALD"), -#line 3862 +#line 3927 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3863 +#line 3928 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3865 +#line 3930 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3866 +#line 3931 .doubleBattle = FALSE, -#line 3867 +#line 3932 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3869 +#line 3934 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3871 +#line 3936 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3870 +#line 3935 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3873 +#line 3938 .species = SPECIES_SILCOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3875 +#line 3940 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3874 +#line 3939 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3877 +#line 3942 .species = SPECIES_BEAUTIFLY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3879 +#line 3944 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3878 +#line 3943 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3881 +#line 3946 [TRAINER_TAYLOR] = { -#line 3882 +#line 3947 .trainerName = _("TAYLOR"), -#line 3883 +#line 3948 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3884 +#line 3949 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3886 +#line 3951 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3887 +#line 3952 .doubleBattle = FALSE, -#line 3888 +#line 3953 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3890 +#line 3955 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3892 +#line 3957 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3891 +#line 3956 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3894 +#line 3959 .species = SPECIES_CASCOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3896 +#line 3961 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3895 +#line 3960 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3898 +#line 3963 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3900 +#line 3965 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 3899 +#line 3964 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3902 +#line 3967 [TRAINER_JEFFREY_1] = { -#line 3903 +#line 3968 .trainerName = _("JEFFREY"), -#line 3904 +#line 3969 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3905 +#line 3970 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3907 +#line 3972 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3908 +#line 3973 .doubleBattle = FALSE, -#line 3909 +#line 3974 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3911 +#line 3976 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3913 +#line 3978 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3912 +#line 3977 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3915 +#line 3980 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3917 +#line 3982 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3916 +#line 3981 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3919 +#line 3984 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3921 +#line 3986 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 3920 +#line 3985 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3923 +#line 3988 [TRAINER_DEREK] = { -#line 3924 +#line 3989 .trainerName = _("DEREK"), -#line 3925 +#line 3990 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3926 +#line 3991 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3928 +#line 3993 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3929 +#line 3994 .doubleBattle = FALSE, -#line 3930 +#line 3995 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 3932 +#line 3997 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3934 +#line 3999 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 3933 +#line 3998 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3936 +#line 4001 .species = SPECIES_BEAUTIFLY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3938 +#line 4003 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 3937 +#line 4002 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3940 +#line 4005 [TRAINER_JEFFREY_2] = { -#line 3941 +#line 4006 .trainerName = _("JEFFREY"), -#line 3942 +#line 4007 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3943 +#line 4008 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3945 +#line 4010 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3946 +#line 4011 .doubleBattle = FALSE, -#line 3947 +#line 4012 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3949 +#line 4014 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3951 +#line 4016 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3950 +#line 4015 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3953 +#line 4018 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3955 +#line 4020 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3954 +#line 4019 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3957 +#line 4022 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3959 +#line 4024 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 3958 +#line 4023 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3961 +#line 4026 [TRAINER_JEFFREY_3] = { -#line 3962 +#line 4027 .trainerName = _("JEFFREY"), -#line 3963 +#line 4028 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3964 +#line 4029 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3966 +#line 4031 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3967 +#line 4032 .doubleBattle = FALSE, -#line 3968 +#line 4033 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 3970 +#line 4035 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3972 +#line 4037 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3971 +#line 4036 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3974 +#line 4039 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3976 +#line 4041 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3975 +#line 4040 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3978 +#line 4043 .species = SPECIES_MASQUERAIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3980 +#line 4045 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 3979 +#line 4044 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 3982 +#line 4047 [TRAINER_JEFFREY_4] = { -#line 3983 +#line 4048 .trainerName = _("JEFFREY"), -#line 3984 +#line 4049 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 3985 +#line 4050 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 3987 +#line 4052 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 3988 +#line 4053 .doubleBattle = FALSE, -#line 3989 +#line 4054 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 3991 +#line 4056 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3993 +#line 4058 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3992 +#line 4057 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3995 +#line 4060 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 3997 +#line 4062 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 3996 +#line 4061 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 3999 +#line 4064 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4001 +#line 4066 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 4000 +#line 4065 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4003 +#line 4068 .species = SPECIES_MASQUERAIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4005 +#line 4070 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 4004 +#line 4069 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4007 +#line 4072 [TRAINER_JEFFREY_5] = { -#line 4008 +#line 4073 .trainerName = _("JEFFREY"), -#line 4009 +#line 4074 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 4010 +#line 4075 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 4012 +#line 4077 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 4013 +#line 4078 .doubleBattle = FALSE, -#line 4014 +#line 4079 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 4016 +#line 4081 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4018 +#line 4083 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4017 +#line 4082 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4020 +#line 4085 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4022 +#line 4087 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4021 +#line 4086 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4024 +#line 4089 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4026 +#line 4091 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4025 +#line 4090 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4028 +#line 4093 .species = SPECIES_MASQUERAIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4028 +#line 4093 .heldItem = ITEM_SILVER_POWDER, -#line 4030 +#line 4095 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4029 +#line 4094 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4032 +#line 4097 .species = SPECIES_BEAUTIFLY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4034 +#line 4099 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4033 +#line 4098 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4036 +#line 4101 [TRAINER_EDWARD] = { -#line 4037 +#line 4102 .trainerName = _("EDWARD"), -#line 4038 +#line 4103 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4039 +#line 4104 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4041 +#line 4106 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4042 +#line 4107 .doubleBattle = FALSE, -#line 4043 +#line 4108 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4045 +#line 4110 .species = SPECIES_ABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4047 +#line 4112 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4046 +#line 4111 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4048 +#line 4113 MOVE_HIDDEN_POWER, }, }, }, }, -#line 4050 +#line 4115 [TRAINER_PRESTON] = { -#line 4051 +#line 4116 .trainerName = _("PRESTON"), -#line 4052 +#line 4117 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4053 +#line 4118 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4055 +#line 4120 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4056 +#line 4121 .doubleBattle = FALSE, -#line 4057 +#line 4122 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4059 +#line 4124 .species = SPECIES_KIRLIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4061 +#line 4126 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4060 +#line 4125 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4063 +#line 4128 [TRAINER_VIRGIL] = { -#line 4064 +#line 4129 .trainerName = _("VIRGIL"), -#line 4065 +#line 4130 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4066 +#line 4131 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4068 +#line 4133 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4069 +#line 4134 .doubleBattle = FALSE, -#line 4070 +#line 4135 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4072 +#line 4137 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4074 +#line 4139 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4073 +#line 4138 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4076 +#line 4141 [TRAINER_BLAKE] = { -#line 4077 +#line 4142 .trainerName = _("BLAKE"), -#line 4078 +#line 4143 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4079 +#line 4144 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4081 +#line 4146 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4082 +#line 4147 .doubleBattle = FALSE, -#line 4083 +#line 4148 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4085 +#line 4150 .species = SPECIES_GIRAFARIG, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4087 +#line 4152 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4086 +#line 4151 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4089 +#line 4154 [TRAINER_WILLIAM] = { -#line 4090 +#line 4155 .trainerName = _("WILLIAM"), -#line 4091 +#line 4156 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4092 +#line 4157 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4094 +#line 4159 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4095 +#line 4160 .doubleBattle = FALSE, -#line 4096 +#line 4161 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 4098 +#line 4163 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4100 +#line 4165 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4099 +#line 4164 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4102 +#line 4167 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4104 +#line 4169 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4103 +#line 4168 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4106 +#line 4171 .species = SPECIES_KIRLIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4108 +#line 4173 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4107 +#line 4172 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4110 +#line 4175 [TRAINER_JOSHUA] = { -#line 4111 +#line 4176 .trainerName = _("JOSHUA"), -#line 4112 +#line 4177 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4113 +#line 4178 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4115 +#line 4180 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4116 +#line 4181 .doubleBattle = FALSE, -#line 4117 +#line 4182 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4119 +#line 4184 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4121 +#line 4186 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4120 +#line 4185 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4123 +#line 4188 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4125 +#line 4190 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4124 +#line 4189 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4127 +#line 4192 [TRAINER_CAMERON_1] = { -#line 4128 +#line 4193 .trainerName = _("CAMERON"), -#line 4129 +#line 4194 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4130 +#line 4195 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4132 +#line 4197 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4133 +#line 4198 .doubleBattle = FALSE, -#line 4134 +#line 4199 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4136 +#line 4201 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4138 +#line 4203 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4137 +#line 4202 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4140 +#line 4205 [TRAINER_CAMERON_2] = { -#line 4141 - .trainerName = _("CAMERON"), -#line 4142 - .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4143 - .trainerPic = TRAINER_PIC_PSYCHIC_M, - .encounterMusic_gender = -#line 4145 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4146 - .doubleBattle = FALSE, -#line 4147 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 4149 - .species = SPECIES_KADABRA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4151 - .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 4150 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 4153 - .species = SPECIES_SOLROCK, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4155 - .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 4154 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 4157 - [TRAINER_CAMERON_3] = - { -#line 4158 - .trainerName = _("CAMERON"), -#line 4159 - .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4160 - .trainerPic = TRAINER_PIC_PSYCHIC_M, - .encounterMusic_gender = -#line 4162 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4163 - .doubleBattle = FALSE, -#line 4164 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 4166 - .species = SPECIES_KADABRA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4168 - .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 4167 - .lvl = 38, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 4170 - .species = SPECIES_SOLROCK, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4172 - .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 4171 - .lvl = 38, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 4174 - [TRAINER_CAMERON_4] = - { -#line 4175 - .trainerName = _("CAMERON"), -#line 4176 - .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4177 - .trainerPic = TRAINER_PIC_PSYCHIC_M, - .encounterMusic_gender = -#line 4179 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4180 - .doubleBattle = FALSE, -#line 4181 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 4183 - .species = SPECIES_KADABRA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4185 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 4184 - .lvl = 41, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 4187 - .species = SPECIES_SOLROCK, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4189 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 4188 - .lvl = 41, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 4191 - [TRAINER_CAMERON_5] = - { -#line 4192 - .trainerName = _("CAMERON"), -#line 4193 - .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4194 - .trainerPic = TRAINER_PIC_PSYCHIC_M, - .encounterMusic_gender = -#line 4196 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4197 - .doubleBattle = FALSE, -#line 4198 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 4200 - .species = SPECIES_SOLROCK, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4202 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4201 - .lvl = 45, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 4204 - .species = SPECIES_ALAKAZAM, - .gender = TRAINER_MON_RANDOM_GENDER, #line 4206 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4205 - .lvl = 45, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 4208 - [TRAINER_JACLYN] = - { -#line 4209 - .trainerName = _("JACLYN"), -#line 4210 + .trainerName = _("CAMERON"), +#line 4207 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4211 - .trainerPic = TRAINER_PIC_PSYCHIC_F, +#line 4208 + .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4212 -F_TRAINER_FEMALE | -#line 4213 +#line 4210 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4214 +#line 4211 .doubleBattle = FALSE, -#line 4215 +#line 4212 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, + .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4217 - .species = SPECIES_ABRA, +#line 4214 + .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4219 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4218 - .lvl = 16, +#line 4216 + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), +#line 4215 + .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 4220 - MOVE_HIDDEN_POWER, }, + { +#line 4218 + .species = SPECIES_SOLROCK, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4220 + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), +#line 4219 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, #line 4222 - [TRAINER_HANNAH] = + [TRAINER_CAMERON_3] = { #line 4223 - .trainerName = _("HANNAH"), + .trainerName = _("CAMERON"), #line 4224 .trainerClass = TRAINER_CLASS_PSYCHIC, #line 4225 - .trainerPic = TRAINER_PIC_PSYCHIC_F, + .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 4226 -F_TRAINER_FEMALE | #line 4227 TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 4228 .doubleBattle = FALSE, #line 4229 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, + .partySize = 2, .party = (const struct TrainerMon[]) { { #line 4231 - .species = SPECIES_KIRLIA, + .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, #line 4233 - .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), #line 4232 - .lvl = 36, + .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, - }, - }, + { #line 4235 - [TRAINER_SAMANTHA] = - { -#line 4236 - .trainerName = _("SAMANTHA"), + .species = SPECIES_SOLROCK, + .gender = TRAINER_MON_RANDOM_GENDER, #line 4237 - .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4238 - .trainerPic = TRAINER_PIC_PSYCHIC_F, - .encounterMusic_gender = + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), +#line 4236 + .lvl = 38, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, #line 4239 -F_TRAINER_FEMALE | + [TRAINER_CAMERON_4] = + { #line 4240 - TRAINER_ENCOUNTER_MUSIC_INTENSE, + .trainerName = _("CAMERON"), #line 4241 - .doubleBattle = FALSE, + .trainerClass = TRAINER_CLASS_PSYCHIC, #line 4242 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { + .trainerPic = TRAINER_PIC_PSYCHIC_M, + .encounterMusic_gender = #line 4244 - .species = SPECIES_XATU, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4246 - .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), + TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 4245 - .lvl = 36, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, + .doubleBattle = FALSE, +#line 4246 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { #line 4248 - [TRAINER_MAURA] = - { -#line 4249 - .trainerName = _("MAURA"), + .species = SPECIES_KADABRA, + .gender = TRAINER_MON_RANDOM_GENDER, #line 4250 - .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4251 - .trainerPic = TRAINER_PIC_PSYCHIC_F, - .encounterMusic_gender = + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 4249 + .lvl = 41, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { #line 4252 -F_TRAINER_FEMALE | -#line 4253 - TRAINER_ENCOUNTER_MUSIC_INTENSE, + .species = SPECIES_SOLROCK, + .gender = TRAINER_MON_RANDOM_GENDER, #line 4254 - .doubleBattle = FALSE, -#line 4255 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 4253 + .lvl = 41, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 4256 + [TRAINER_CAMERON_5] = + { #line 4257 - .species = SPECIES_KADABRA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4259 - .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), + .trainerName = _("CAMERON"), #line 4258 - .lvl = 36, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, + .trainerClass = TRAINER_CLASS_PSYCHIC, +#line 4259 + .trainerPic = TRAINER_PIC_PSYCHIC_M, + .encounterMusic_gender = #line 4261 - [TRAINER_KAYLA] = - { + TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 4262 - .trainerName = _("KAYLA"), + .doubleBattle = FALSE, #line 4263 - .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4264 - .trainerPic = TRAINER_PIC_PSYCHIC_F, - .encounterMusic_gender = + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { #line 4265 -F_TRAINER_FEMALE | -#line 4266 - TRAINER_ENCOUNTER_MUSIC_INTENSE, + .species = SPECIES_SOLROCK, + .gender = TRAINER_MON_RANDOM_GENDER, #line 4267 - .doubleBattle = FALSE, -#line 4268 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 3, - .party = (const struct TrainerMon[]) - { - { -#line 4270 - .species = SPECIES_WOBBUFFET, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4272 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4271 - .lvl = 26, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 4274 - .species = SPECIES_NATU, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4276 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4275 - .lvl = 26, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 4278 - .species = SPECIES_KADABRA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4280 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4279 - .lvl = 26, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 4282 - [TRAINER_ALEXIS] = - { -#line 4283 - .trainerName = _("ALEXIS"), -#line 4284 - .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4285 - .trainerPic = TRAINER_PIC_PSYCHIC_F, - .encounterMusic_gender = -#line 4286 -F_TRAINER_FEMALE | -#line 4287 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4288 - .doubleBattle = FALSE, -#line 4289 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 4291 - .species = SPECIES_KIRLIA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4293 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4292 - .lvl = 41, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 4295 - .species = SPECIES_XATU, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4297 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4296 - .lvl = 41, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 4299 - [TRAINER_JACKI_1] = - { -#line 4300 - .trainerName = _("JACKI"), -#line 4301 - .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4302 - .trainerPic = TRAINER_PIC_PSYCHIC_F, - .encounterMusic_gender = -#line 4303 -F_TRAINER_FEMALE | -#line 4304 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4305 - .doubleBattle = FALSE, -#line 4306 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 4308 - .species = SPECIES_KADABRA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4310 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4309 - .lvl = 30, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 4312 - .species = SPECIES_LUNATONE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4314 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4313 - .lvl = 30, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 4316 - [TRAINER_JACKI_2] = - { -#line 4317 - .trainerName = _("JACKI"), -#line 4318 - .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4319 - .trainerPic = TRAINER_PIC_PSYCHIC_F, - .encounterMusic_gender = -#line 4320 -F_TRAINER_FEMALE | -#line 4321 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4322 - .doubleBattle = FALSE, -#line 4323 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 4325 - .species = SPECIES_KADABRA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4327 - .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 4326 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 4329 - .species = SPECIES_LUNATONE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4331 - .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 4330 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 4333 - [TRAINER_JACKI_3] = - { -#line 4334 - .trainerName = _("JACKI"), -#line 4335 - .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4336 - .trainerPic = TRAINER_PIC_PSYCHIC_F, - .encounterMusic_gender = -#line 4337 -F_TRAINER_FEMALE | -#line 4338 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4339 - .doubleBattle = FALSE, -#line 4340 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 4342 - .species = SPECIES_KADABRA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4344 - .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 4343 - .lvl = 37, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 4346 - .species = SPECIES_LUNATONE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4348 - .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 4347 - .lvl = 37, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 4350 - [TRAINER_JACKI_4] = - { -#line 4351 - .trainerName = _("JACKI"), -#line 4352 - .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4353 - .trainerPic = TRAINER_PIC_PSYCHIC_F, - .encounterMusic_gender = -#line 4354 -F_TRAINER_FEMALE | -#line 4355 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4356 - .doubleBattle = FALSE, -#line 4357 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 4359 - .species = SPECIES_KADABRA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4361 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 4360 - .lvl = 40, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 4363 - .species = SPECIES_LUNATONE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4365 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 4364 - .lvl = 40, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 4367 - [TRAINER_JACKI_5] = - { -#line 4368 - .trainerName = _("JACKI"), -#line 4369 - .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 4370 - .trainerPic = TRAINER_PIC_PSYCHIC_F, - .encounterMusic_gender = -#line 4371 -F_TRAINER_FEMALE | -#line 4372 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 4373 - .doubleBattle = FALSE, -#line 4374 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 4376 - .species = SPECIES_LUNATONE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4378 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4377 - .lvl = 43, +#line 4266 + .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 4380 +#line 4269 .species = SPECIES_ALAKAZAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4382 +#line 4271 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4381 - .lvl = 43, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 4384 - [TRAINER_WALTER_1] = - { -#line 4385 - .trainerName = _("WALTER"), -#line 4386 - .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 4387 - .trainerPic = TRAINER_PIC_GENTLEMAN, - .encounterMusic_gender = -#line 4389 - TRAINER_ENCOUNTER_MUSIC_RICH, -#line 4390 - .doubleBattle = FALSE, -#line 4391 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 4393 - .species = SPECIES_MANECTRIC, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4395 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4394 - .lvl = 29, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 4397 - [TRAINER_MICAH] = - { -#line 4398 - .trainerName = _("MICAH"), -#line 4399 - .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 4400 - .trainerPic = TRAINER_PIC_GENTLEMAN, - .encounterMusic_gender = -#line 4402 - TRAINER_ENCOUNTER_MUSIC_RICH, -#line 4403 - .doubleBattle = FALSE, -#line 4404 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 4406 - .species = SPECIES_MANECTRIC, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4408 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4407 - .lvl = 44, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 4410 - .species = SPECIES_MANECTRIC, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4412 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4411 - .lvl = 44, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 4414 - [TRAINER_THOMAS] = - { -#line 4415 - .trainerName = _("THOMAS"), -#line 4416 - .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 4417 - .trainerPic = TRAINER_PIC_GENTLEMAN, - .encounterMusic_gender = -#line 4419 - TRAINER_ENCOUNTER_MUSIC_RICH, -#line 4420 - .doubleBattle = FALSE, -#line 4421 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 4423 - .species = SPECIES_ZANGOOSE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 4425 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 4424 +#line 4270 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4427 - [TRAINER_WALTER_2] = +#line 4273 + [TRAINER_JACLYN] = { -#line 4428 - .trainerName = _("WALTER"), -#line 4429 - .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 4430 - .trainerPic = TRAINER_PIC_GENTLEMAN, +#line 4274 + .trainerName = _("JACLYN"), +#line 4275 + .trainerClass = TRAINER_CLASS_PSYCHIC, +#line 4276 + .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4432 - TRAINER_ENCOUNTER_MUSIC_RICH, -#line 4433 +#line 4277 +F_TRAINER_FEMALE | +#line 4278 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 4279 .doubleBattle = FALSE, -#line 4434 +#line 4280 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 4436 - .species = SPECIES_MANECTRIC, +#line 4282 + .species = SPECIES_ABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4438 +#line 4284 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 4283 + .lvl = 16, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 4285 + MOVE_HIDDEN_POWER, + }, + }, + }, + }, +#line 4287 + [TRAINER_HANNAH] = + { +#line 4288 + .trainerName = _("HANNAH"), +#line 4289 + .trainerClass = TRAINER_CLASS_PSYCHIC, +#line 4290 + .trainerPic = TRAINER_PIC_PSYCHIC_F, + .encounterMusic_gender = +#line 4291 +F_TRAINER_FEMALE | +#line 4292 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 4293 + .doubleBattle = FALSE, +#line 4294 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 4296 + .species = SPECIES_KIRLIA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4298 + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), +#line 4297 + .lvl = 36, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 4300 + [TRAINER_SAMANTHA] = + { +#line 4301 + .trainerName = _("SAMANTHA"), +#line 4302 + .trainerClass = TRAINER_CLASS_PSYCHIC, +#line 4303 + .trainerPic = TRAINER_PIC_PSYCHIC_F, + .encounterMusic_gender = +#line 4304 +F_TRAINER_FEMALE | +#line 4305 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 4306 + .doubleBattle = FALSE, +#line 4307 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 4309 + .species = SPECIES_XATU, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4311 + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), +#line 4310 + .lvl = 36, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 4313 + [TRAINER_MAURA] = + { +#line 4314 + .trainerName = _("MAURA"), +#line 4315 + .trainerClass = TRAINER_CLASS_PSYCHIC, +#line 4316 + .trainerPic = TRAINER_PIC_PSYCHIC_F, + .encounterMusic_gender = +#line 4317 +F_TRAINER_FEMALE | +#line 4318 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 4319 + .doubleBattle = FALSE, +#line 4320 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 4322 + .species = SPECIES_KADABRA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4324 + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), +#line 4323 + .lvl = 36, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 4326 + [TRAINER_KAYLA] = + { +#line 4327 + .trainerName = _("KAYLA"), +#line 4328 + .trainerClass = TRAINER_CLASS_PSYCHIC, +#line 4329 + .trainerPic = TRAINER_PIC_PSYCHIC_F, + .encounterMusic_gender = +#line 4330 +F_TRAINER_FEMALE | +#line 4331 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 4332 + .doubleBattle = FALSE, +#line 4333 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 3, + .party = (const struct TrainerMon[]) + { + { +#line 4335 + .species = SPECIES_WOBBUFFET, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4337 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 4336 + .lvl = 26, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 4339 + .species = SPECIES_NATU, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4341 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 4340 + .lvl = 26, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 4343 + .species = SPECIES_KADABRA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4345 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 4344 + .lvl = 26, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 4347 + [TRAINER_ALEXIS] = + { +#line 4348 + .trainerName = _("ALEXIS"), +#line 4349 + .trainerClass = TRAINER_CLASS_PSYCHIC, +#line 4350 + .trainerPic = TRAINER_PIC_PSYCHIC_F, + .encounterMusic_gender = +#line 4351 +F_TRAINER_FEMALE | +#line 4352 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 4353 + .doubleBattle = FALSE, +#line 4354 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 4356 + .species = SPECIES_KIRLIA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4358 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 4357 + .lvl = 41, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 4360 + .species = SPECIES_XATU, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4362 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 4361 + .lvl = 41, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 4364 + [TRAINER_JACKI_1] = + { +#line 4365 + .trainerName = _("JACKI"), +#line 4366 + .trainerClass = TRAINER_CLASS_PSYCHIC, +#line 4367 + .trainerPic = TRAINER_PIC_PSYCHIC_F, + .encounterMusic_gender = +#line 4368 +F_TRAINER_FEMALE | +#line 4369 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 4370 + .doubleBattle = FALSE, +#line 4371 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 4373 + .species = SPECIES_KADABRA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4375 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 4374 + .lvl = 30, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 4377 + .species = SPECIES_LUNATONE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4379 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 4378 + .lvl = 30, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 4381 + [TRAINER_JACKI_2] = + { +#line 4382 + .trainerName = _("JACKI"), +#line 4383 + .trainerClass = TRAINER_CLASS_PSYCHIC, +#line 4384 + .trainerPic = TRAINER_PIC_PSYCHIC_F, + .encounterMusic_gender = +#line 4385 +F_TRAINER_FEMALE | +#line 4386 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 4387 + .doubleBattle = FALSE, +#line 4388 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 4390 + .species = SPECIES_KADABRA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4392 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 4437 +#line 4391 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 4394 + .species = SPECIES_LUNATONE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4396 + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), +#line 4395 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 4440 - [TRAINER_WALTER_3] = +#line 4398 + [TRAINER_JACKI_3] = { -#line 4441 - .trainerName = _("WALTER"), -#line 4442 - .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 4443 - .trainerPic = TRAINER_PIC_GENTLEMAN, +#line 4399 + .trainerName = _("JACKI"), +#line 4400 + .trainerClass = TRAINER_CLASS_PSYCHIC, +#line 4401 + .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 4445 - TRAINER_ENCOUNTER_MUSIC_RICH, -#line 4446 +#line 4402 +F_TRAINER_FEMALE | +#line 4403 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 4404 .doubleBattle = FALSE, -#line 4447 +#line 4405 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { +#line 4407 + .species = SPECIES_KADABRA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4409 + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), +#line 4408 + .lvl = 37, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 4411 + .species = SPECIES_LUNATONE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4413 + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), +#line 4412 + .lvl = 37, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 4415 + [TRAINER_JACKI_4] = + { +#line 4416 + .trainerName = _("JACKI"), +#line 4417 + .trainerClass = TRAINER_CLASS_PSYCHIC, +#line 4418 + .trainerPic = TRAINER_PIC_PSYCHIC_F, + .encounterMusic_gender = +#line 4419 +F_TRAINER_FEMALE | +#line 4420 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 4421 + .doubleBattle = FALSE, +#line 4422 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 4424 + .species = SPECIES_KADABRA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4426 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 4425 + .lvl = 40, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 4428 + .species = SPECIES_LUNATONE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4430 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 4429 + .lvl = 40, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 4432 + [TRAINER_JACKI_5] = + { +#line 4433 + .trainerName = _("JACKI"), +#line 4434 + .trainerClass = TRAINER_CLASS_PSYCHIC, +#line 4435 + .trainerPic = TRAINER_PIC_PSYCHIC_F, + .encounterMusic_gender = +#line 4436 +F_TRAINER_FEMALE | +#line 4437 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 4438 + .doubleBattle = FALSE, +#line 4439 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 4441 + .species = SPECIES_LUNATONE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4443 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 4442 + .lvl = 43, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 4445 + .species = SPECIES_ALAKAZAM, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4447 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 4446 + .lvl = 43, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, #line 4449 + [TRAINER_WALTER_1] = + { +#line 4450 + .trainerName = _("WALTER"), +#line 4451 + .trainerClass = TRAINER_CLASS_GENTLEMAN, +#line 4452 + .trainerPic = TRAINER_PIC_GENTLEMAN, + .encounterMusic_gender = +#line 4454 + TRAINER_ENCOUNTER_MUSIC_RICH, +#line 4455 + .doubleBattle = FALSE, +#line 4456 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 4458 + .species = SPECIES_MANECTRIC, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4460 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 4459 + .lvl = 29, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 4462 + [TRAINER_MICAH] = + { +#line 4463 + .trainerName = _("MICAH"), +#line 4464 + .trainerClass = TRAINER_CLASS_GENTLEMAN, +#line 4465 + .trainerPic = TRAINER_PIC_GENTLEMAN, + .encounterMusic_gender = +#line 4467 + TRAINER_ENCOUNTER_MUSIC_RICH, +#line 4468 + .doubleBattle = FALSE, +#line 4469 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 4471 + .species = SPECIES_MANECTRIC, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4473 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 4472 + .lvl = 44, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 4475 + .species = SPECIES_MANECTRIC, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4477 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 4476 + .lvl = 44, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 4479 + [TRAINER_THOMAS] = + { +#line 4480 + .trainerName = _("THOMAS"), +#line 4481 + .trainerClass = TRAINER_CLASS_GENTLEMAN, +#line 4482 + .trainerPic = TRAINER_PIC_GENTLEMAN, + .encounterMusic_gender = +#line 4484 + TRAINER_ENCOUNTER_MUSIC_RICH, +#line 4485 + .doubleBattle = FALSE, +#line 4486 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 4488 + .species = SPECIES_ZANGOOSE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4490 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 4489 + .lvl = 45, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 4492 + [TRAINER_WALTER_2] = + { +#line 4493 + .trainerName = _("WALTER"), +#line 4494 + .trainerClass = TRAINER_CLASS_GENTLEMAN, +#line 4495 + .trainerPic = TRAINER_PIC_GENTLEMAN, + .encounterMusic_gender = +#line 4497 + TRAINER_ENCOUNTER_MUSIC_RICH, +#line 4498 + .doubleBattle = FALSE, +#line 4499 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 4501 + .species = SPECIES_MANECTRIC, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 4503 + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), +#line 4502 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 4505 + [TRAINER_WALTER_3] = + { +#line 4506 + .trainerName = _("WALTER"), +#line 4507 + .trainerClass = TRAINER_CLASS_GENTLEMAN, +#line 4508 + .trainerPic = TRAINER_PIC_GENTLEMAN, + .encounterMusic_gender = +#line 4510 + TRAINER_ENCOUNTER_MUSIC_RICH, +#line 4511 + .doubleBattle = FALSE, +#line 4512 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 4514 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4451 +#line 4516 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 4450 +#line 4515 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4452 +#line 4517 MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_ODOR_SLEUTH, @@ -11227,17 +11227,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4457 +#line 4522 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4459 +#line 4524 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 4458 +#line 4523 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4460 +#line 4525 MOVE_QUICK_ATTACK, MOVE_SPARK, MOVE_ODOR_SLEUTH, @@ -11246,37 +11246,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 4465 +#line 4530 [TRAINER_WALTER_4] = { -#line 4466 +#line 4531 .trainerName = _("WALTER"), -#line 4467 +#line 4532 .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 4468 +#line 4533 .trainerPic = TRAINER_PIC_GENTLEMAN, .encounterMusic_gender = -#line 4470 +#line 4535 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 4471 +#line 4536 .doubleBattle = FALSE, -#line 4472 +#line 4537 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 4474 +#line 4539 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4476 +#line 4541 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 4475 +#line 4540 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4477 +#line 4542 MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_ODOR_SLEUTH, @@ -11284,17 +11284,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4482 +#line 4547 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4484 +#line 4549 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 4483 +#line 4548 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4485 +#line 4550 MOVE_QUICK_ATTACK, MOVE_SPARK, MOVE_ODOR_SLEUTH, @@ -11302,37 +11302,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 4489 +#line 4554 [TRAINER_WALTER_5] = { -#line 4490 +#line 4555 .trainerName = _("WALTER"), -#line 4491 +#line 4556 .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 4492 +#line 4557 .trainerPic = TRAINER_PIC_GENTLEMAN, .encounterMusic_gender = -#line 4494 +#line 4559 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 4495 +#line 4560 .doubleBattle = FALSE, -#line 4496 +#line 4561 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 4498 +#line 4563 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4500 +#line 4565 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4499 +#line 4564 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4501 +#line 4566 MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_ODOR_SLEUTH, @@ -11340,17 +11340,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4506 +#line 4571 .species = SPECIES_GOLDUCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4508 +#line 4573 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4507 +#line 4572 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4509 +#line 4574 MOVE_FURY_SWIPES, MOVE_DISABLE, MOVE_CONFUSION, @@ -11358,17 +11358,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4514 +#line 4579 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4516 +#line 4581 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 4515 +#line 4580 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4517 +#line 4582 MOVE_QUICK_ATTACK, MOVE_SPARK, MOVE_ODOR_SLEUTH, @@ -11377,42 +11377,42 @@ F_TRAINER_FEMALE | }, }, }, -#line 4522 +#line 4587 [TRAINER_SIDNEY] = { -#line 4523 +#line 4588 .trainerName = _("SIDNEY"), -#line 4524 +#line 4589 .trainerClass = TRAINER_CLASS_ELITE_FOUR, -#line 4525 +#line 4590 .trainerPic = TRAINER_PIC_ELITE_FOUR_SIDNEY, .encounterMusic_gender = -#line 4527 +#line 4592 TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, -#line 4528 +#line 4593 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 4529 +#line 4594 .doubleBattle = FALSE, -#line 4530 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SETUP_FIRST_TURN, -#line 4531 +#line 4595 + .aiFlags = AI_FLAG_BASIC_TRAINER | AI_FLAG_FORCE_SETUP_FIRST_TURN, +#line 4596 .mugshotEnabled = TRUE, .mugshotColor = MUGSHOT_COLOR_PURPLE, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 4533 +#line 4598 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4535 +#line 4600 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4534 +#line 4599 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4536 +#line 4601 MOVE_ROAR, MOVE_DOUBLE_EDGE, MOVE_SAND_ATTACK, @@ -11420,17 +11420,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4541 +#line 4606 .species = SPECIES_SHIFTRY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4543 +#line 4608 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4542 +#line 4607 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4544 +#line 4609 MOVE_TORMENT, MOVE_DOUBLE_TEAM, MOVE_SWAGGER, @@ -11438,17 +11438,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4549 +#line 4614 .species = SPECIES_CACTURNE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4551 +#line 4616 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4550 +#line 4615 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4552 +#line 4617 MOVE_LEECH_SEED, MOVE_FEINT_ATTACK, MOVE_NEEDLE_ARM, @@ -11456,17 +11456,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4557 +#line 4622 .species = SPECIES_CRAWDAUNT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4559 +#line 4624 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4558 +#line 4623 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4560 +#line 4625 MOVE_SURF, MOVE_SWORDS_DANCE, MOVE_STRENGTH, @@ -11474,19 +11474,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4565 +#line 4630 .species = SPECIES_ABSOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4565 +#line 4630 .heldItem = ITEM_SITRUS_BERRY, -#line 4567 +#line 4632 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 4566 +#line 4631 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4568 +#line 4633 MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE, MOVE_SWORDS_DANCE, @@ -11495,44 +11495,44 @@ F_TRAINER_FEMALE | }, }, }, -#line 4573 +#line 4638 [TRAINER_PHOEBE] = { -#line 4574 +#line 4639 .trainerName = _("PHOEBE"), -#line 4575 +#line 4640 .trainerClass = TRAINER_CLASS_ELITE_FOUR, -#line 4576 +#line 4641 .trainerPic = TRAINER_PIC_ELITE_FOUR_PHOEBE, .encounterMusic_gender = -#line 4577 +#line 4642 F_TRAINER_FEMALE | -#line 4578 +#line 4643 TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, -#line 4579 +#line 4644 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 4580 +#line 4645 .doubleBattle = FALSE, -#line 4581 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, -#line 4582 +#line 4646 + .aiFlags = AI_FLAG_BASIC_TRAINER, +#line 4647 .mugshotEnabled = TRUE, .mugshotColor = MUGSHOT_COLOR_GREEN, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 4584 +#line 4649 .species = SPECIES_DUSCLOPS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4586 +#line 4651 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4585 +#line 4650 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4587 +#line 4652 MOVE_SHADOW_PUNCH, MOVE_CONFUSE_RAY, MOVE_CURSE, @@ -11540,17 +11540,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4592 +#line 4657 .species = SPECIES_BANETTE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4594 +#line 4659 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4593 +#line 4658 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4595 +#line 4660 MOVE_SHADOW_BALL, MOVE_GRUDGE, MOVE_WILL_O_WISP, @@ -11558,17 +11558,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4600 +#line 4665 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4602 +#line 4667 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4601 +#line 4666 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4603 +#line 4668 MOVE_SHADOW_BALL, MOVE_DOUBLE_TEAM, MOVE_NIGHT_SHADE, @@ -11576,17 +11576,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4608 +#line 4673 .species = SPECIES_BANETTE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4610 +#line 4675 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4609 +#line 4674 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4611 +#line 4676 MOVE_SHADOW_BALL, MOVE_PSYCHIC, MOVE_THUNDERBOLT, @@ -11594,19 +11594,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4616 +#line 4681 .species = SPECIES_DUSCLOPS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4616 +#line 4681 .heldItem = ITEM_SITRUS_BERRY, -#line 4618 +#line 4683 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 4617 +#line 4682 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4619 +#line 4684 MOVE_SHADOW_BALL, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, @@ -11615,44 +11615,44 @@ F_TRAINER_FEMALE | }, }, }, -#line 4624 +#line 4689 [TRAINER_GLACIA] = { -#line 4625 +#line 4690 .trainerName = _("GLACIA"), -#line 4626 +#line 4691 .trainerClass = TRAINER_CLASS_ELITE_FOUR, -#line 4627 +#line 4692 .trainerPic = TRAINER_PIC_ELITE_FOUR_GLACIA, .encounterMusic_gender = -#line 4628 +#line 4693 F_TRAINER_FEMALE | -#line 4629 +#line 4694 TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, -#line 4630 +#line 4695 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 4631 +#line 4696 .doubleBattle = FALSE, -#line 4632 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, -#line 4633 +#line 4697 + .aiFlags = AI_FLAG_BASIC_TRAINER, +#line 4698 .mugshotEnabled = TRUE, .mugshotColor = MUGSHOT_COLOR_PINK, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 4635 +#line 4700 .species = SPECIES_SEALEO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4637 +#line 4702 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4636 +#line 4701 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4638 +#line 4703 MOVE_ENCORE, MOVE_BODY_SLAM, MOVE_HAIL, @@ -11660,17 +11660,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4643 +#line 4708 .species = SPECIES_GLALIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4645 +#line 4710 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4644 +#line 4709 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4646 +#line 4711 MOVE_LIGHT_SCREEN, MOVE_CRUNCH, MOVE_ICY_WIND, @@ -11678,17 +11678,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4651 +#line 4716 .species = SPECIES_SEALEO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4653 +#line 4718 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4652 +#line 4717 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4654 +#line 4719 MOVE_ATTRACT, MOVE_DOUBLE_EDGE, MOVE_HAIL, @@ -11696,17 +11696,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4659 +#line 4724 .species = SPECIES_GLALIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4661 +#line 4726 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4660 +#line 4725 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4662 +#line 4727 MOVE_SHADOW_BALL, MOVE_EXPLOSION, MOVE_HAIL, @@ -11714,19 +11714,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4667 +#line 4732 .species = SPECIES_WALREIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4667 +#line 4732 .heldItem = ITEM_SITRUS_BERRY, -#line 4669 +#line 4734 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 4668 +#line 4733 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4670 +#line 4735 MOVE_SURF, MOVE_BODY_SLAM, MOVE_ICE_BEAM, @@ -11735,42 +11735,42 @@ F_TRAINER_FEMALE | }, }, }, -#line 4675 +#line 4740 [TRAINER_DRAKE] = { -#line 4676 +#line 4741 .trainerName = _("DRAKE"), -#line 4677 +#line 4742 .trainerClass = TRAINER_CLASS_ELITE_FOUR, -#line 4678 +#line 4743 .trainerPic = TRAINER_PIC_ELITE_FOUR_DRAKE, .encounterMusic_gender = -#line 4680 +#line 4745 TRAINER_ENCOUNTER_MUSIC_ELITE_FOUR, -#line 4681 +#line 4746 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 4682 +#line 4747 .doubleBattle = FALSE, -#line 4683 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, -#line 4684 +#line 4748 + .aiFlags = AI_FLAG_BASIC_TRAINER, +#line 4749 .mugshotEnabled = TRUE, .mugshotColor = MUGSHOT_COLOR_BLUE, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 4686 +#line 4751 .species = SPECIES_SHELGON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4688 +#line 4753 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4687 +#line 4752 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4689 +#line 4754 MOVE_ROCK_TOMB, MOVE_DRAGON_CLAW, MOVE_PROTECT, @@ -11778,17 +11778,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4694 +#line 4759 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4696 +#line 4761 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4695 +#line 4760 .lvl = 54, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4697 +#line 4762 MOVE_DOUBLE_EDGE, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE, @@ -11796,17 +11796,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4702 +#line 4767 .species = SPECIES_KINGDRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4704 +#line 4769 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4703 +#line 4768 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4705 +#line 4770 MOVE_SMOKESCREEN, MOVE_DRAGON_DANCE, MOVE_SURF, @@ -11814,17 +11814,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4710 +#line 4775 .species = SPECIES_FLYGON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4712 +#line 4777 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4711 +#line 4776 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4713 +#line 4778 MOVE_FLAMETHROWER, MOVE_CRUNCH, MOVE_DRAGON_BREATH, @@ -11832,19 +11832,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4718 +#line 4783 .species = SPECIES_SALAMENCE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4718 +#line 4783 .heldItem = ITEM_SITRUS_BERRY, -#line 4720 +#line 4785 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 4719 +#line 4784 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4721 +#line 4786 MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_ROCK_SLIDE, @@ -11853,41 +11853,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 4726 +#line 4791 [TRAINER_ROXANNE_1] = { -#line 4727 +#line 4792 .trainerName = _("ROXANNE"), -#line 4728 +#line 4793 .trainerClass = TRAINER_CLASS_LEADER, -#line 4729 +#line 4794 .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .encounterMusic_gender = -#line 4730 +#line 4795 F_TRAINER_FEMALE | -#line 4731 +#line 4796 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 4732 +#line 4797 .items = { ITEM_POTION, ITEM_POTION }, -#line 4733 +#line 4798 .doubleBattle = FALSE, -#line 4734 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 4799 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 4736 +#line 4801 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4738 +#line 4803 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4737 +#line 4802 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4739 +#line 4804 MOVE_TACKLE, MOVE_DEFENSE_CURL, MOVE_ROCK_THROW, @@ -11895,17 +11895,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4744 +#line 4809 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4746 +#line 4811 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4745 +#line 4810 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4747 +#line 4812 MOVE_TACKLE, MOVE_DEFENSE_CURL, MOVE_ROCK_THROW, @@ -11913,19 +11913,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4752 +#line 4817 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4752 +#line 4817 .heldItem = ITEM_ORAN_BERRY, -#line 4754 +#line 4819 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4753 +#line 4818 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4755 +#line 4820 MOVE_BLOCK, MOVE_HARDEN, MOVE_TACKLE, @@ -11934,39 +11934,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 4760 +#line 4825 [TRAINER_BRAWLY_1] = { -#line 4761 +#line 4826 .trainerName = _("BRAWLY"), -#line 4762 +#line 4827 .trainerClass = TRAINER_CLASS_LEADER, -#line 4763 +#line 4828 .trainerPic = TRAINER_PIC_LEADER_BRAWLY, .encounterMusic_gender = -#line 4765 +#line 4830 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 4766 +#line 4831 .items = { ITEM_SUPER_POTION, ITEM_SUPER_POTION }, -#line 4767 +#line 4832 .doubleBattle = FALSE, -#line 4768 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 4833 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 4770 +#line 4835 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4772 +#line 4837 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4771 +#line 4836 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4773 +#line 4838 MOVE_KARATE_CHOP, MOVE_LOW_KICK, MOVE_SEISMIC_TOSS, @@ -11974,17 +11974,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4778 +#line 4843 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4780 +#line 4845 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 4779 +#line 4844 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4781 +#line 4846 MOVE_FOCUS_PUNCH, MOVE_LIGHT_SCREEN, MOVE_REFLECT, @@ -11992,19 +11992,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4786 +#line 4851 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4786 +#line 4851 .heldItem = ITEM_SITRUS_BERRY, -#line 4788 +#line 4853 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4787 +#line 4852 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4789 +#line 4854 MOVE_ARM_THRUST, MOVE_VITAL_THROW, MOVE_REVERSAL, @@ -12013,39 +12013,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 4794 +#line 4859 [TRAINER_WATTSON_1] = { -#line 4795 +#line 4860 .trainerName = _("WATTSON"), -#line 4796 +#line 4861 .trainerClass = TRAINER_CLASS_LEADER, -#line 4797 +#line 4862 .trainerPic = TRAINER_PIC_LEADER_WATTSON, .encounterMusic_gender = -#line 4799 +#line 4864 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 4800 +#line 4865 .items = { ITEM_SUPER_POTION, ITEM_SUPER_POTION }, -#line 4801 +#line 4866 .doubleBattle = FALSE, -#line 4802 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 4867 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 4804 +#line 4869 .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4806 +#line 4871 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4805 +#line 4870 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4807 +#line 4872 MOVE_ROLLOUT, MOVE_SPARK, MOVE_SELF_DESTRUCT, @@ -12053,17 +12053,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4812 +#line 4877 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4814 +#line 4879 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4813 +#line 4878 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4815 +#line 4880 MOVE_SHOCK_WAVE, MOVE_LEER, MOVE_QUICK_ATTACK, @@ -12071,17 +12071,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4820 +#line 4885 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4822 +#line 4887 .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), -#line 4821 +#line 4886 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4823 +#line 4888 MOVE_SUPERSONIC, MOVE_SHOCK_WAVE, MOVE_THUNDER_WAVE, @@ -12089,19 +12089,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4828 +#line 4893 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4828 +#line 4893 .heldItem = ITEM_SITRUS_BERRY, -#line 4830 +#line 4895 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4829 +#line 4894 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4831 +#line 4896 MOVE_QUICK_ATTACK, MOVE_THUNDER_WAVE, MOVE_SHOCK_WAVE, @@ -12110,41 +12110,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 4836 +#line 4901 [TRAINER_FLANNERY_1] = { -#line 4837 +#line 4902 .trainerName = _("FLANNERY"), -#line 4838 +#line 4903 .trainerClass = TRAINER_CLASS_LEADER, -#line 4839 +#line 4904 .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .encounterMusic_gender = -#line 4840 +#line 4905 F_TRAINER_FEMALE | -#line 4841 +#line 4906 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 4842 +#line 4907 .items = { ITEM_HYPER_POTION, ITEM_HYPER_POTION }, -#line 4843 +#line 4908 .doubleBattle = FALSE, -#line 4844 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 4909 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 4846 +#line 4911 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4848 +#line 4913 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4847 +#line 4912 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4849 +#line 4914 MOVE_OVERHEAT, MOVE_TAKE_DOWN, MOVE_MAGNITUDE, @@ -12152,17 +12152,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4854 +#line 4919 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4856 +#line 4921 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4855 +#line 4920 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4857 +#line 4922 MOVE_OVERHEAT, MOVE_SMOG, MOVE_LIGHT_SCREEN, @@ -12170,17 +12170,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4862 +#line 4927 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4864 +#line 4929 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4863 +#line 4928 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4865 +#line 4930 MOVE_OVERHEAT, MOVE_TACKLE, MOVE_SUNNY_DAY, @@ -12188,19 +12188,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4870 +#line 4935 .species = SPECIES_TORKOAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4870 +#line 4935 .heldItem = ITEM_WHITE_HERB, -#line 4872 +#line 4937 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4871 +#line 4936 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4873 +#line 4938 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_BODY_SLAM, @@ -12209,39 +12209,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 4878 +#line 4943 [TRAINER_NORMAN_1] = { -#line 4879 +#line 4944 .trainerName = _("NORMAN"), -#line 4880 +#line 4945 .trainerClass = TRAINER_CLASS_LEADER, -#line 4881 +#line 4946 .trainerPic = TRAINER_PIC_LEADER_NORMAN, .encounterMusic_gender = -#line 4883 +#line 4948 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 4884 +#line 4949 .items = { ITEM_HYPER_POTION, ITEM_HYPER_POTION }, -#line 4885 +#line 4950 .doubleBattle = FALSE, -#line 4886 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 4951 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 4888 +#line 4953 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4890 +#line 4955 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4889 +#line 4954 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4891 +#line 4956 MOVE_TEETER_DANCE, MOVE_PSYBEAM, MOVE_FACADE, @@ -12249,17 +12249,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4896 +#line 4961 .species = SPECIES_VIGOROTH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4898 +#line 4963 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4897 +#line 4962 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4899 +#line 4964 MOVE_SLASH, MOVE_FACADE, MOVE_ENCORE, @@ -12267,17 +12267,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4904 +#line 4969 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4906 +#line 4971 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 4905 +#line 4970 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4907 +#line 4972 MOVE_SLASH, MOVE_BELLY_DRUM, MOVE_FACADE, @@ -12285,19 +12285,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4912 +#line 4977 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4912 +#line 4977 .heldItem = ITEM_SITRUS_BERRY, -#line 4914 +#line 4979 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4913 +#line 4978 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4915 +#line 4980 MOVE_COUNTER, MOVE_YAWN, MOVE_FACADE, @@ -12306,41 +12306,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 4920 +#line 4985 [TRAINER_WINONA_1] = { -#line 4921 +#line 4986 .trainerName = _("WINONA"), -#line 4922 +#line 4987 .trainerClass = TRAINER_CLASS_LEADER, -#line 4923 +#line 4988 .trainerPic = TRAINER_PIC_LEADER_WINONA, .encounterMusic_gender = -#line 4924 +#line 4989 F_TRAINER_FEMALE | -#line 4925 +#line 4990 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 4926 +#line 4991 .items = { ITEM_HYPER_POTION, ITEM_HYPER_POTION }, -#line 4927 +#line 4992 .doubleBattle = FALSE, -#line 4928 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, +#line 4993 + .aiFlags = AI_FLAG_BASIC_TRAINER | AI_FLAG_RISKY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 4930 +#line 4995 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4932 +#line 4997 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 4931 +#line 4996 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4933 +#line 4998 MOVE_PERISH_SONG, MOVE_MIRROR_MOVE, MOVE_SAFEGUARD, @@ -12348,17 +12348,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4938 +#line 5003 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4940 +#line 5005 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 4939 +#line 5004 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4941 +#line 5006 MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, @@ -12366,17 +12366,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4946 +#line 5011 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4948 +#line 5013 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 4947 +#line 5012 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4949 +#line 5014 MOVE_WATER_GUN, MOVE_SUPERSONIC, MOVE_PROTECT, @@ -12384,17 +12384,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4954 +#line 5019 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4956 +#line 5021 .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), -#line 4955 +#line 5020 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4957 +#line 5022 MOVE_SAND_ATTACK, MOVE_FURY_ATTACK, MOVE_STEEL_WING, @@ -12402,19 +12402,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4962 +#line 5027 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4962 +#line 5027 .heldItem = ITEM_ORAN_BERRY, -#line 4964 +#line 5029 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 4963 +#line 5028 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4965 +#line 5030 MOVE_EARTHQUAKE, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE, @@ -12423,39 +12423,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 4970 +#line 5035 [TRAINER_TATE_AND_LIZA_1] = { -#line 4971 +#line 5036 .trainerName = _("TATE&LIZA"), -#line 4972 +#line 5037 .trainerClass = TRAINER_CLASS_LEADER, -#line 4973 +#line 5038 .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA, .encounterMusic_gender = -#line 4975 +#line 5040 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 4976 +#line 5041 .items = { ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_HYPER_POTION }, -#line 4977 +#line 5042 .doubleBattle = TRUE, -#line 4978 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 5043 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 4980 +#line 5045 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4982 +#line 5047 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4981 +#line 5046 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4983 +#line 5048 MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_PSYCHIC, @@ -12463,17 +12463,17 @@ F_TRAINER_FEMALE | }, }, { -#line 4988 +#line 5053 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4990 +#line 5055 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4989 +#line 5054 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4991 +#line 5056 MOVE_PSYCHIC, MOVE_SUNNY_DAY, MOVE_CONFUSE_RAY, @@ -12481,19 +12481,19 @@ F_TRAINER_FEMALE | }, }, { -#line 4996 +#line 5061 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 4996 +#line 5061 .heldItem = ITEM_SITRUS_BERRY, -#line 4998 +#line 5063 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 4997 +#line 5062 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 4999 +#line 5064 MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_HYPNOSIS, @@ -12501,19 +12501,19 @@ F_TRAINER_FEMALE | }, }, { -#line 5004 +#line 5069 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5004 +#line 5069 .heldItem = ITEM_SITRUS_BERRY, -#line 5006 +#line 5071 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 5005 +#line 5070 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5007 +#line 5072 MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, @@ -12522,39 +12522,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 5012 +#line 5077 [TRAINER_JUAN_1] = { -#line 5013 +#line 5078 .trainerName = _("JUAN"), -#line 5014 +#line 5079 .trainerClass = TRAINER_CLASS_LEADER, -#line 5015 +#line 5080 .trainerPic = TRAINER_PIC_LEADER_JUAN, .encounterMusic_gender = -#line 5017 +#line 5082 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5018 +#line 5083 .items = { ITEM_HYPER_POTION, ITEM_HYPER_POTION }, -#line 5019 +#line 5084 .doubleBattle = FALSE, -#line 5020 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 5085 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 5022 +#line 5087 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5024 +#line 5089 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5023 +#line 5088 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5025 +#line 5090 MOVE_WATER_PULSE, MOVE_ATTRACT, MOVE_SWEET_KISS, @@ -12562,17 +12562,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5030 +#line 5095 .species = SPECIES_WHISCASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5032 +#line 5097 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5031 +#line 5096 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5033 +#line 5098 MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_AMNESIA, @@ -12580,17 +12580,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5038 +#line 5103 .species = SPECIES_SEALEO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5040 +#line 5105 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5039 +#line 5104 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5041 +#line 5106 MOVE_ENCORE, MOVE_BODY_SLAM, MOVE_AURORA_BEAM, @@ -12598,17 +12598,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5046 +#line 5111 .species = SPECIES_CRAWDAUNT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5048 +#line 5113 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5047 +#line 5112 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5049 +#line 5114 MOVE_WATER_PULSE, MOVE_CRABHAMMER, MOVE_TAUNT, @@ -12616,19 +12616,19 @@ F_TRAINER_FEMALE | }, }, { -#line 5054 +#line 5119 .species = SPECIES_KINGDRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5054 +#line 5119 .heldItem = ITEM_CHESTO_BERRY, -#line 5056 +#line 5121 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 5055 +#line 5120 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5057 +#line 5122 MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, @@ -12637,597 +12637,597 @@ F_TRAINER_FEMALE | }, }, }, -#line 5062 +#line 5127 [TRAINER_JERRY_1] = { -#line 5063 +#line 5128 .trainerName = _("JERRY"), -#line 5064 +#line 5129 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5065 +#line 5130 .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .encounterMusic_gender = -#line 5067 +#line 5132 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5068 +#line 5133 .doubleBattle = FALSE, -#line 5069 +#line 5134 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5071 +#line 5136 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5073 +#line 5138 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5072 +#line 5137 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5075 +#line 5140 [TRAINER_TED] = { -#line 5076 +#line 5141 .trainerName = _("TED"), -#line 5077 +#line 5142 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5078 +#line 5143 .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .encounterMusic_gender = -#line 5080 +#line 5145 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5081 +#line 5146 .doubleBattle = FALSE, -#line 5082 +#line 5147 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5084 +#line 5149 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5086 +#line 5151 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5085 +#line 5150 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5088 +#line 5153 [TRAINER_PAUL] = { -#line 5089 +#line 5154 .trainerName = _("PAUL"), -#line 5090 +#line 5155 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5091 +#line 5156 .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .encounterMusic_gender = -#line 5093 +#line 5158 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5094 +#line 5159 .doubleBattle = FALSE, -#line 5095 +#line 5160 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 5097 +#line 5162 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5099 +#line 5164 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5098 +#line 5163 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5101 +#line 5166 .species = SPECIES_ODDISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5103 +#line 5168 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5102 +#line 5167 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5105 +#line 5170 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5107 +#line 5172 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5106 +#line 5171 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5109 +#line 5174 [TRAINER_JERRY_2] = { -#line 5110 +#line 5175 .trainerName = _("JERRY"), -#line 5111 +#line 5176 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5112 +#line 5177 .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .encounterMusic_gender = -#line 5114 +#line 5179 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5115 +#line 5180 .doubleBattle = FALSE, -#line 5116 +#line 5181 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5118 +#line 5183 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5120 +#line 5185 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5119 +#line 5184 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5122 +#line 5187 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5124 +#line 5189 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5123 +#line 5188 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5126 +#line 5191 [TRAINER_JERRY_3] = { -#line 5127 +#line 5192 .trainerName = _("JERRY"), -#line 5128 +#line 5193 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5129 +#line 5194 .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .encounterMusic_gender = -#line 5131 +#line 5196 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5132 +#line 5197 .doubleBattle = FALSE, -#line 5133 +#line 5198 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5135 +#line 5200 .species = SPECIES_KIRLIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5137 +#line 5202 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5136 +#line 5201 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5139 +#line 5204 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5141 +#line 5206 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5140 +#line 5205 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5143 +#line 5208 [TRAINER_JERRY_4] = { -#line 5144 +#line 5209 .trainerName = _("JERRY"), -#line 5145 +#line 5210 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5146 +#line 5211 .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .encounterMusic_gender = -#line 5148 +#line 5213 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5149 +#line 5214 .doubleBattle = FALSE, -#line 5150 +#line 5215 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5152 +#line 5217 .species = SPECIES_KIRLIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5154 +#line 5219 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5153 +#line 5218 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5156 +#line 5221 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5158 +#line 5223 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5157 +#line 5222 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5160 +#line 5225 [TRAINER_JERRY_5] = { -#line 5161 +#line 5226 .trainerName = _("JERRY"), -#line 5162 +#line 5227 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5163 +#line 5228 .trainerPic = TRAINER_PIC_SCHOOL_KID_M, .encounterMusic_gender = -#line 5165 +#line 5230 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5166 +#line 5231 .doubleBattle = FALSE, -#line 5167 +#line 5232 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 5169 +#line 5234 .species = SPECIES_KIRLIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5171 +#line 5236 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 5170 +#line 5235 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5173 +#line 5238 .species = SPECIES_BANETTE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5175 +#line 5240 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 5174 +#line 5239 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5177 +#line 5242 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5179 +#line 5244 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 5178 +#line 5243 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5181 +#line 5246 [TRAINER_KAREN_1] = { -#line 5182 +#line 5247 .trainerName = _("KAREN"), -#line 5183 +#line 5248 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5184 +#line 5249 .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = -#line 5185 +#line 5250 F_TRAINER_FEMALE | -#line 5186 +#line 5251 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 5187 +#line 5252 .doubleBattle = FALSE, -#line 5188 +#line 5253 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5190 +#line 5255 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5192 +#line 5257 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5191 +#line 5256 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5194 +#line 5259 [TRAINER_GEORGIA] = { -#line 5195 +#line 5260 .trainerName = _("GEORGIA"), -#line 5196 +#line 5261 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5197 +#line 5262 .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = -#line 5198 +#line 5263 F_TRAINER_FEMALE | -#line 5199 +#line 5264 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 5200 +#line 5265 .doubleBattle = FALSE, -#line 5201 +#line 5266 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5203 +#line 5268 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5205 +#line 5270 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5204 +#line 5269 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5207 +#line 5272 .species = SPECIES_BEAUTIFLY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5209 +#line 5274 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5208 +#line 5273 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5211 +#line 5276 [TRAINER_KAREN_2] = { -#line 5212 +#line 5277 .trainerName = _("KAREN"), -#line 5213 +#line 5278 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5214 +#line 5279 .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = -#line 5215 +#line 5280 F_TRAINER_FEMALE | -#line 5216 +#line 5281 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 5217 +#line 5282 .doubleBattle = FALSE, -#line 5218 +#line 5283 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5220 +#line 5285 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5222 +#line 5287 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5221 +#line 5286 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5224 +#line 5289 .species = SPECIES_WHISMUR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5226 +#line 5291 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5225 +#line 5290 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5228 +#line 5293 [TRAINER_KAREN_3] = { -#line 5229 +#line 5294 .trainerName = _("KAREN"), -#line 5230 +#line 5295 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5231 +#line 5296 .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = -#line 5232 +#line 5297 F_TRAINER_FEMALE | -#line 5233 +#line 5298 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 5234 +#line 5299 .doubleBattle = FALSE, -#line 5235 +#line 5300 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5237 +#line 5302 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5239 +#line 5304 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5238 +#line 5303 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5241 +#line 5306 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5243 +#line 5308 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5242 +#line 5307 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5245 +#line 5310 [TRAINER_KAREN_4] = { -#line 5246 +#line 5311 .trainerName = _("KAREN"), -#line 5247 +#line 5312 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5248 +#line 5313 .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = -#line 5249 +#line 5314 F_TRAINER_FEMALE | -#line 5250 +#line 5315 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 5251 +#line 5316 .doubleBattle = FALSE, -#line 5252 +#line 5317 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5254 +#line 5319 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5256 +#line 5321 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5255 +#line 5320 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5258 +#line 5323 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5260 +#line 5325 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5259 +#line 5324 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5262 +#line 5327 [TRAINER_KAREN_5] = { -#line 5263 +#line 5328 .trainerName = _("KAREN"), -#line 5264 +#line 5329 .trainerClass = TRAINER_CLASS_SCHOOL_KID, -#line 5265 +#line 5330 .trainerPic = TRAINER_PIC_SCHOOL_KID_F, .encounterMusic_gender = -#line 5266 +#line 5331 F_TRAINER_FEMALE | -#line 5267 +#line 5332 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 5268 +#line 5333 .doubleBattle = FALSE, -#line 5269 +#line 5334 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5271 +#line 5336 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5273 +#line 5338 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 5272 +#line 5337 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5275 +#line 5340 .species = SPECIES_EXPLOUD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5277 +#line 5342 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 5276 +#line 5341 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5279 +#line 5344 [TRAINER_KATE_AND_JOY] = { -#line 5280 +#line 5345 .trainerName = _("KATE & JOY"), -#line 5281 +#line 5346 .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 5282 +#line 5347 .trainerPic = TRAINER_PIC_SR_AND_JR, .encounterMusic_gender = -#line 5284 +#line 5349 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5285 +#line 5350 .doubleBattle = TRUE, -#line 5286 +#line 5351 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5288 +#line 5353 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5290 +#line 5355 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5289 +#line 5354 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5291 +#line 5356 MOVE_HYPNOSIS, MOVE_PSYBEAM, MOVE_DIZZY_PUNCH, @@ -13235,17 +13235,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5296 +#line 5361 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5298 +#line 5363 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5297 +#line 5362 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5299 +#line 5364 MOVE_FOCUS_PUNCH, MOVE_YAWN, MOVE_SLACK_OFF, @@ -13254,37 +13254,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 5304 +#line 5369 [TRAINER_ANNA_AND_MEG_1] = { -#line 5305 +#line 5370 .trainerName = _("ANNA & MEG"), -#line 5306 +#line 5371 .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 5307 +#line 5372 .trainerPic = TRAINER_PIC_SR_AND_JR, .encounterMusic_gender = -#line 5309 +#line 5374 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5310 +#line 5375 .doubleBattle = TRUE, -#line 5311 +#line 5376 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5313 +#line 5378 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5315 +#line 5380 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5314 +#line 5379 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5316 +#line 5381 MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, @@ -13292,17 +13292,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5321 +#line 5386 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5323 +#line 5388 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5322 +#line 5387 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5324 +#line 5389 MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, @@ -13310,37 +13310,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 5328 +#line 5393 [TRAINER_ANNA_AND_MEG_2] = { -#line 5329 +#line 5394 .trainerName = _("ANNA & MEG"), -#line 5330 +#line 5395 .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 5331 +#line 5396 .trainerPic = TRAINER_PIC_SR_AND_JR, .encounterMusic_gender = -#line 5333 +#line 5398 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5334 +#line 5399 .doubleBattle = TRUE, -#line 5335 +#line 5400 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5337 +#line 5402 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5339 +#line 5404 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5338 +#line 5403 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5340 +#line 5405 MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, @@ -13348,17 +13348,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5345 +#line 5410 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5347 +#line 5412 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5346 +#line 5411 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5348 +#line 5413 MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, @@ -13366,37 +13366,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 5352 +#line 5417 [TRAINER_ANNA_AND_MEG_3] = { -#line 5353 +#line 5418 .trainerName = _("ANNA & MEG"), -#line 5354 +#line 5419 .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 5355 +#line 5420 .trainerPic = TRAINER_PIC_SR_AND_JR, .encounterMusic_gender = -#line 5357 +#line 5422 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5358 +#line 5423 .doubleBattle = TRUE, -#line 5359 +#line 5424 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5361 +#line 5426 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5363 +#line 5428 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5362 +#line 5427 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5364 +#line 5429 MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, @@ -13404,250 +13404,250 @@ F_TRAINER_FEMALE | }, }, { -#line 5369 +#line 5434 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5371 +#line 5436 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5370 +#line 5435 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5372 - MOVE_TACKLE, - MOVE_FOCUS_ENERGY, - MOVE_ARM_THRUST, - }, - }, - }, - }, -#line 5376 - [TRAINER_ANNA_AND_MEG_4] = - { -#line 5377 - .trainerName = _("ANNA & MEG"), -#line 5378 - .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 5379 - .trainerPic = TRAINER_PIC_SR_AND_JR, - .encounterMusic_gender = -#line 5381 - TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5382 - .doubleBattle = TRUE, -#line 5383 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 5385 - .species = SPECIES_LINOONE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 5387 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5386 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 5388 - MOVE_GROWL, - MOVE_TAIL_WHIP, - MOVE_HEADBUTT, - MOVE_ODOR_SLEUTH, - }, - }, - { -#line 5393 - .species = SPECIES_MAKUHITA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 5395 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5394 - .lvl = 36, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 5396 - MOVE_TACKLE, - MOVE_FOCUS_ENERGY, - MOVE_ARM_THRUST, - }, - }, - }, - }, -#line 5400 - [TRAINER_ANNA_AND_MEG_5] = - { -#line 5401 - .trainerName = _("ANNA & MEG"), -#line 5402 - .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 5403 - .trainerPic = TRAINER_PIC_SR_AND_JR, - .encounterMusic_gender = -#line 5405 - TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5406 - .doubleBattle = TRUE, -#line 5407 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 5409 - .species = SPECIES_LINOONE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 5411 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5410 - .lvl = 36, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 5412 - MOVE_GROWL, - MOVE_TAIL_WHIP, - MOVE_HEADBUTT, - MOVE_ODOR_SLEUTH, - }, - }, - { -#line 5417 - .species = SPECIES_HARIYAMA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 5419 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5418 - .lvl = 38, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 5420 - MOVE_TACKLE, - MOVE_FOCUS_ENERGY, - MOVE_ARM_THRUST, - }, - }, - }, - }, -#line 5424 - [TRAINER_VICTOR] = - { -#line 5425 - .trainerName = _("VICTOR"), -#line 5426 - .trainerClass = TRAINER_CLASS_WINSTRATE, -#line 5427 - .trainerPic = TRAINER_PIC_POKEFAN_M, - .encounterMusic_gender = -#line 5429 - TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5430 - .doubleBattle = FALSE, -#line 5431 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 5433 - .species = SPECIES_TAILLOW, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 5433 - .heldItem = ITEM_ORAN_BERRY, -#line 5435 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5434 - .lvl = 16, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { #line 5437 - .species = SPECIES_ZIGZAGOON, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 5437 - .heldItem = ITEM_ORAN_BERRY, -#line 5439 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5438 - .lvl = 16, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, + MOVE_TACKLE, + MOVE_FOCUS_ENERGY, + MOVE_ARM_THRUST, + }, }, }, }, #line 5441 - [TRAINER_MIGUEL_1] = + [TRAINER_ANNA_AND_MEG_4] = { #line 5442 - .trainerName = _("MIGUEL"), + .trainerName = _("ANNA & MEG"), #line 5443 - .trainerClass = TRAINER_CLASS_POKEFAN, + .trainerClass = TRAINER_CLASS_SR_AND_JR, #line 5444 - .trainerPic = TRAINER_PIC_POKEFAN_M, + .trainerPic = TRAINER_PIC_SR_AND_JR, .encounterMusic_gender = #line 5446 TRAINER_ENCOUNTER_MUSIC_TWINS, #line 5447 - .doubleBattle = FALSE, + .doubleBattle = TRUE, #line 5448 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 5450 + .species = SPECIES_LINOONE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 5452 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 5451 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 5453 + MOVE_GROWL, + MOVE_TAIL_WHIP, + MOVE_HEADBUTT, + MOVE_ODOR_SLEUTH, + }, + }, + { +#line 5458 + .species = SPECIES_MAKUHITA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 5460 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 5459 + .lvl = 36, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 5461 + MOVE_TACKLE, + MOVE_FOCUS_ENERGY, + MOVE_ARM_THRUST, + }, + }, + }, + }, +#line 5465 + [TRAINER_ANNA_AND_MEG_5] = + { +#line 5466 + .trainerName = _("ANNA & MEG"), +#line 5467 + .trainerClass = TRAINER_CLASS_SR_AND_JR, +#line 5468 + .trainerPic = TRAINER_PIC_SR_AND_JR, + .encounterMusic_gender = +#line 5470 + TRAINER_ENCOUNTER_MUSIC_TWINS, +#line 5471 + .doubleBattle = TRUE, +#line 5472 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 5474 + .species = SPECIES_LINOONE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 5476 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 5475 + .lvl = 36, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 5477 + MOVE_GROWL, + MOVE_TAIL_WHIP, + MOVE_HEADBUTT, + MOVE_ODOR_SLEUTH, + }, + }, + { +#line 5482 + .species = SPECIES_HARIYAMA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 5484 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 5483 + .lvl = 38, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 5485 + MOVE_TACKLE, + MOVE_FOCUS_ENERGY, + MOVE_ARM_THRUST, + }, + }, + }, + }, +#line 5489 + [TRAINER_VICTOR] = + { +#line 5490 + .trainerName = _("VICTOR"), +#line 5491 + .trainerClass = TRAINER_CLASS_WINSTRATE, +#line 5492 + .trainerPic = TRAINER_PIC_POKEFAN_M, + .encounterMusic_gender = +#line 5494 + TRAINER_ENCOUNTER_MUSIC_TWINS, +#line 5495 + .doubleBattle = FALSE, +#line 5496 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 5498 + .species = SPECIES_TAILLOW, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 5498 + .heldItem = ITEM_ORAN_BERRY, +#line 5500 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 5499 + .lvl = 16, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 5502 + .species = SPECIES_ZIGZAGOON, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 5502 + .heldItem = ITEM_ORAN_BERRY, +#line 5504 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 5503 + .lvl = 16, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 5506 + [TRAINER_MIGUEL_1] = + { +#line 5507 + .trainerName = _("MIGUEL"), +#line 5508 + .trainerClass = TRAINER_CLASS_POKEFAN, +#line 5509 + .trainerPic = TRAINER_PIC_POKEFAN_M, + .encounterMusic_gender = +#line 5511 + TRAINER_ENCOUNTER_MUSIC_TWINS, +#line 5512 + .doubleBattle = FALSE, +#line 5513 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5450 +#line 5515 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5450 +#line 5515 .heldItem = ITEM_ORAN_BERRY, -#line 5452 +#line 5517 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5451 +#line 5516 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5454 +#line 5519 [TRAINER_COLTON] = { -#line 5455 +#line 5520 .trainerName = _("COLTON"), -#line 5456 +#line 5521 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5457 +#line 5522 .trainerPic = TRAINER_PIC_POKEFAN_M, .encounterMusic_gender = -#line 5459 +#line 5524 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5460 +#line 5525 .doubleBattle = FALSE, -#line 5461 +#line 5526 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 5463 +#line 5528 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5463 +#line 5528 .heldItem = ITEM_ORAN_BERRY, -#line 5465 +#line 5530 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5464 +#line 5529 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5466 +#line 5531 MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK, @@ -13655,19 +13655,19 @@ F_TRAINER_FEMALE | }, }, { -#line 5471 +#line 5536 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5471 +#line 5536 .heldItem = ITEM_ORAN_BERRY, -#line 5473 +#line 5538 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5472 +#line 5537 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5474 +#line 5539 MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK, @@ -13675,19 +13675,19 @@ F_TRAINER_FEMALE | }, }, { -#line 5479 +#line 5544 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5479 +#line 5544 .heldItem = ITEM_ORAN_BERRY, -#line 5481 +#line 5546 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5480 +#line 5545 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5482 +#line 5547 MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK, @@ -13695,19 +13695,19 @@ F_TRAINER_FEMALE | }, }, { -#line 5487 +#line 5552 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5487 +#line 5552 .heldItem = ITEM_ORAN_BERRY, -#line 5489 +#line 5554 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5488 +#line 5553 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5490 +#line 5555 MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK, @@ -13715,19 +13715,19 @@ F_TRAINER_FEMALE | }, }, { -#line 5495 +#line 5560 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5495 +#line 5560 .heldItem = ITEM_ORAN_BERRY, -#line 5497 +#line 5562 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5496 +#line 5561 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5498 +#line 5563 MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK, @@ -13735,19 +13735,19 @@ F_TRAINER_FEMALE | }, }, { -#line 5503 +#line 5568 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5503 +#line 5568 .heldItem = ITEM_ORAN_BERRY, -#line 5505 +#line 5570 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5504 +#line 5569 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5506 +#line 5571 MOVE_ASSIST, MOVE_CHARM, MOVE_FEINT_ATTACK, @@ -13756,190 +13756,16 @@ F_TRAINER_FEMALE | }, }, }, -#line 5511 +#line 5576 [TRAINER_MIGUEL_2] = { -#line 5512 - .trainerName = _("MIGUEL"), -#line 5513 - .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5514 - .trainerPic = TRAINER_PIC_POKEFAN_M, - .encounterMusic_gender = -#line 5516 - TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5517 - .doubleBattle = FALSE, -#line 5518 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 5520 - .species = SPECIES_SKITTY, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 5520 - .heldItem = ITEM_ORAN_BERRY, -#line 5522 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5521 - .lvl = 29, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 5524 - [TRAINER_MIGUEL_3] = - { -#line 5525 - .trainerName = _("MIGUEL"), -#line 5526 - .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5527 - .trainerPic = TRAINER_PIC_POKEFAN_M, - .encounterMusic_gender = -#line 5529 - TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5530 - .doubleBattle = FALSE, -#line 5531 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 5533 - .species = SPECIES_SKITTY, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 5533 - .heldItem = ITEM_ORAN_BERRY, -#line 5535 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5534 - .lvl = 32, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 5537 - [TRAINER_MIGUEL_4] = - { -#line 5538 - .trainerName = _("MIGUEL"), -#line 5539 - .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5540 - .trainerPic = TRAINER_PIC_POKEFAN_M, - .encounterMusic_gender = -#line 5542 - TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5543 - .doubleBattle = FALSE, -#line 5544 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 5546 - .species = SPECIES_DELCATTY, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 5546 - .heldItem = ITEM_ORAN_BERRY, -#line 5548 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5547 - .lvl = 35, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 5550 - [TRAINER_MIGUEL_5] = - { -#line 5551 - .trainerName = _("MIGUEL"), -#line 5552 - .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5553 - .trainerPic = TRAINER_PIC_POKEFAN_M, - .encounterMusic_gender = -#line 5555 - TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5556 - .doubleBattle = FALSE, -#line 5557 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 5559 - .species = SPECIES_DELCATTY, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 5559 - .heldItem = ITEM_SITRUS_BERRY, -#line 5561 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5560 - .lvl = 38, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 5563 - [TRAINER_VICTORIA] = - { -#line 5564 - .trainerName = _("VICTORIA"), -#line 5565 - .trainerClass = TRAINER_CLASS_WINSTRATE, -#line 5566 - .trainerPic = TRAINER_PIC_POKEFAN_F, - .encounterMusic_gender = -#line 5567 -F_TRAINER_FEMALE | -#line 5568 - TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5569 - .doubleBattle = FALSE, -#line 5570 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 5572 - .species = SPECIES_ROSELIA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 5572 - .heldItem = ITEM_ORAN_BERRY, -#line 5574 - .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 5573 - .lvl = 17, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 5576 - [TRAINER_VANESSA] = - { #line 5577 - .trainerName = _("VANESSA"), + .trainerName = _("MIGUEL"), #line 5578 .trainerClass = TRAINER_CLASS_POKEFAN, #line 5579 - .trainerPic = TRAINER_PIC_POKEFAN_F, + .trainerPic = TRAINER_PIC_POKEFAN_M, .encounterMusic_gender = -#line 5580 -F_TRAINER_FEMALE | #line 5581 TRAINER_ENCOUNTER_MUSIC_TWINS, #line 5582 @@ -13951,389 +13777,563 @@ F_TRAINER_FEMALE | { { #line 5585 - .species = SPECIES_PIKACHU, + .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, #line 5585 .heldItem = ITEM_ORAN_BERRY, #line 5587 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 5586 - .lvl = 30, + .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, #line 5589 - [TRAINER_BETHANY] = + [TRAINER_MIGUEL_3] = { #line 5590 - .trainerName = _("BETHANY"), + .trainerName = _("MIGUEL"), #line 5591 .trainerClass = TRAINER_CLASS_POKEFAN, #line 5592 - .trainerPic = TRAINER_PIC_POKEFAN_F, + .trainerPic = TRAINER_PIC_POKEFAN_M, .encounterMusic_gender = -#line 5593 -F_TRAINER_FEMALE | #line 5594 TRAINER_ENCOUNTER_MUSIC_TWINS, #line 5595 .doubleBattle = FALSE, #line 5596 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 3, + .partySize = 1, .party = (const struct TrainerMon[]) { { #line 5598 - .species = SPECIES_AZURILL, + .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, #line 5598 .heldItem = ITEM_ORAN_BERRY, #line 5600 - .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 5599 + .lvl = 32, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 5602 + [TRAINER_MIGUEL_4] = + { +#line 5603 + .trainerName = _("MIGUEL"), +#line 5604 + .trainerClass = TRAINER_CLASS_POKEFAN, +#line 5605 + .trainerPic = TRAINER_PIC_POKEFAN_M, + .encounterMusic_gender = +#line 5607 + TRAINER_ENCOUNTER_MUSIC_TWINS, +#line 5608 + .doubleBattle = FALSE, +#line 5609 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 5611 + .species = SPECIES_DELCATTY, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 5611 + .heldItem = ITEM_ORAN_BERRY, +#line 5613 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 5612 + .lvl = 35, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 5615 + [TRAINER_MIGUEL_5] = + { +#line 5616 + .trainerName = _("MIGUEL"), +#line 5617 + .trainerClass = TRAINER_CLASS_POKEFAN, +#line 5618 + .trainerPic = TRAINER_PIC_POKEFAN_M, + .encounterMusic_gender = +#line 5620 + TRAINER_ENCOUNTER_MUSIC_TWINS, +#line 5621 + .doubleBattle = FALSE, +#line 5622 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 5624 + .species = SPECIES_DELCATTY, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 5624 + .heldItem = ITEM_SITRUS_BERRY, +#line 5626 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 5625 + .lvl = 38, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 5628 + [TRAINER_VICTORIA] = + { +#line 5629 + .trainerName = _("VICTORIA"), +#line 5630 + .trainerClass = TRAINER_CLASS_WINSTRATE, +#line 5631 + .trainerPic = TRAINER_PIC_POKEFAN_F, + .encounterMusic_gender = +#line 5632 +F_TRAINER_FEMALE | +#line 5633 + TRAINER_ENCOUNTER_MUSIC_TWINS, +#line 5634 + .doubleBattle = FALSE, +#line 5635 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 5637 + .species = SPECIES_ROSELIA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 5637 + .heldItem = ITEM_ORAN_BERRY, +#line 5639 + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), +#line 5638 + .lvl = 17, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 5641 + [TRAINER_VANESSA] = + { +#line 5642 + .trainerName = _("VANESSA"), +#line 5643 + .trainerClass = TRAINER_CLASS_POKEFAN, +#line 5644 + .trainerPic = TRAINER_PIC_POKEFAN_F, + .encounterMusic_gender = +#line 5645 +F_TRAINER_FEMALE | +#line 5646 + TRAINER_ENCOUNTER_MUSIC_TWINS, +#line 5647 + .doubleBattle = FALSE, +#line 5648 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 5650 + .species = SPECIES_PIKACHU, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 5650 + .heldItem = ITEM_ORAN_BERRY, +#line 5652 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 5651 + .lvl = 30, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 5654 + [TRAINER_BETHANY] = + { +#line 5655 + .trainerName = _("BETHANY"), +#line 5656 + .trainerClass = TRAINER_CLASS_POKEFAN, +#line 5657 + .trainerPic = TRAINER_PIC_POKEFAN_F, + .encounterMusic_gender = +#line 5658 +F_TRAINER_FEMALE | +#line 5659 + TRAINER_ENCOUNTER_MUSIC_TWINS, +#line 5660 + .doubleBattle = FALSE, +#line 5661 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 3, + .party = (const struct TrainerMon[]) + { + { +#line 5663 + .species = SPECIES_AZURILL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 5663 + .heldItem = ITEM_ORAN_BERRY, +#line 5665 + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), +#line 5664 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5602 +#line 5667 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5602 +#line 5667 .heldItem = ITEM_ORAN_BERRY, -#line 5604 +#line 5669 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 5603 +#line 5668 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5606 +#line 5671 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5606 +#line 5671 .heldItem = ITEM_ORAN_BERRY, -#line 5608 +#line 5673 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 5607 +#line 5672 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5610 +#line 5675 [TRAINER_ISABEL_1] = { -#line 5611 +#line 5676 .trainerName = _("ISABEL"), -#line 5612 +#line 5677 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5613 +#line 5678 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 5614 +#line 5679 F_TRAINER_FEMALE | -#line 5615 +#line 5680 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5616 +#line 5681 .doubleBattle = FALSE, -#line 5617 +#line 5682 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5619 +#line 5684 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5619 +#line 5684 .heldItem = ITEM_ORAN_BERRY, -#line 5621 +#line 5686 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5620 +#line 5685 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5623 +#line 5688 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5623 +#line 5688 .heldItem = ITEM_ORAN_BERRY, -#line 5625 +#line 5690 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5624 +#line 5689 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5627 +#line 5692 [TRAINER_ISABEL_2] = { -#line 5628 +#line 5693 .trainerName = _("ISABEL"), -#line 5629 +#line 5694 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5630 +#line 5695 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 5631 +#line 5696 F_TRAINER_FEMALE | -#line 5632 +#line 5697 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5633 +#line 5698 .doubleBattle = FALSE, -#line 5634 +#line 5699 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5636 +#line 5701 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5636 +#line 5701 .heldItem = ITEM_ORAN_BERRY, -#line 5638 +#line 5703 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5637 +#line 5702 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5640 +#line 5705 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5640 +#line 5705 .heldItem = ITEM_ORAN_BERRY, -#line 5642 +#line 5707 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 5641 +#line 5706 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5644 +#line 5709 [TRAINER_ISABEL_3] = { -#line 5645 +#line 5710 .trainerName = _("ISABEL"), -#line 5646 +#line 5711 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5647 +#line 5712 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 5648 +#line 5713 F_TRAINER_FEMALE | -#line 5649 +#line 5714 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5650 +#line 5715 .doubleBattle = FALSE, -#line 5651 +#line 5716 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5653 +#line 5718 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5653 +#line 5718 .heldItem = ITEM_ORAN_BERRY, -#line 5655 +#line 5720 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5654 +#line 5719 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5657 +#line 5722 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5657 +#line 5722 .heldItem = ITEM_ORAN_BERRY, -#line 5659 +#line 5724 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 5658 +#line 5723 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5661 +#line 5726 [TRAINER_ISABEL_4] = { -#line 5662 +#line 5727 .trainerName = _("ISABEL"), -#line 5663 +#line 5728 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5664 +#line 5729 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 5665 +#line 5730 F_TRAINER_FEMALE | -#line 5666 +#line 5731 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5667 +#line 5732 .doubleBattle = FALSE, -#line 5668 +#line 5733 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5670 +#line 5735 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5670 +#line 5735 .heldItem = ITEM_ORAN_BERRY, -#line 5672 +#line 5737 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5671 +#line 5736 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5674 +#line 5739 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5674 +#line 5739 .heldItem = ITEM_ORAN_BERRY, -#line 5676 +#line 5741 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 5675 +#line 5740 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5678 +#line 5743 [TRAINER_ISABEL_5] = { -#line 5679 +#line 5744 .trainerName = _("ISABEL"), -#line 5680 +#line 5745 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 5681 +#line 5746 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 5682 +#line 5747 F_TRAINER_FEMALE | -#line 5683 +#line 5748 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 5684 +#line 5749 .doubleBattle = FALSE, -#line 5685 +#line 5750 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5687 +#line 5752 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5687 +#line 5752 .heldItem = ITEM_SITRUS_BERRY, -#line 5689 +#line 5754 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5688 +#line 5753 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5691 +#line 5756 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5691 +#line 5756 .heldItem = ITEM_SITRUS_BERRY, -#line 5693 +#line 5758 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 5692 +#line 5757 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5695 +#line 5760 [TRAINER_TIMOTHY_1] = { -#line 5696 +#line 5761 .trainerName = _("TIMOTHY"), -#line 5697 +#line 5762 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5698 +#line 5763 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 5700 +#line 5765 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5701 +#line 5766 .doubleBattle = FALSE, -#line 5702 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 5767 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5704 +#line 5769 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5706 +#line 5771 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5705 +#line 5770 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5708 +#line 5773 [TRAINER_TIMOTHY_2] = { -#line 5709 +#line 5774 .trainerName = _("TIMOTHY"), -#line 5710 +#line 5775 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5711 +#line 5776 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 5713 +#line 5778 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5714 +#line 5779 .doubleBattle = FALSE, -#line 5715 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 5780 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5717 +#line 5782 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5719 +#line 5784 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 5718 +#line 5783 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5720 +#line 5785 MOVE_ARM_THRUST, MOVE_KNOCK_OFF, MOVE_SAND_ATTACK, @@ -14342,37 +14342,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 5725 +#line 5790 [TRAINER_TIMOTHY_3] = { -#line 5726 +#line 5791 .trainerName = _("TIMOTHY"), -#line 5727 +#line 5792 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5728 +#line 5793 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 5730 +#line 5795 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5731 +#line 5796 .doubleBattle = FALSE, -#line 5732 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 5797 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5734 +#line 5799 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5736 +#line 5801 .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), -#line 5735 +#line 5800 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5737 +#line 5802 MOVE_ARM_THRUST, MOVE_KNOCK_OFF, MOVE_SAND_ATTACK, @@ -14381,37 +14381,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 5742 +#line 5807 [TRAINER_TIMOTHY_4] = { -#line 5743 +#line 5808 .trainerName = _("TIMOTHY"), -#line 5744 +#line 5809 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5745 +#line 5810 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 5747 +#line 5812 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5748 +#line 5813 .doubleBattle = FALSE, -#line 5749 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 5814 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5751 +#line 5816 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5753 +#line 5818 .iv = TRAINER_PARTY_IVS(27, 27, 27, 27, 27, 27), -#line 5752 +#line 5817 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5754 +#line 5819 MOVE_ARM_THRUST, MOVE_BELLY_DRUM, MOVE_SAND_ATTACK, @@ -14420,37 +14420,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 5759 +#line 5824 [TRAINER_TIMOTHY_5] = { -#line 5760 +#line 5825 .trainerName = _("TIMOTHY"), -#line 5761 +#line 5826 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5762 +#line 5827 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 5764 +#line 5829 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5765 +#line 5830 .doubleBattle = FALSE, -#line 5766 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 5831 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5768 +#line 5833 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5770 +#line 5835 .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), -#line 5769 +#line 5834 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5771 +#line 5836 MOVE_ARM_THRUST, MOVE_BELLY_DRUM, MOVE_SAND_ATTACK, @@ -14459,39 +14459,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 5776 +#line 5841 [TRAINER_VICKY] = { -#line 5777 +#line 5842 .trainerName = _("VICKY"), -#line 5778 +#line 5843 .trainerClass = TRAINER_CLASS_WINSTRATE, -#line 5779 +#line 5844 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 5780 +#line 5845 F_TRAINER_FEMALE | -#line 5781 +#line 5846 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5782 +#line 5847 .doubleBattle = FALSE, -#line 5783 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 5848 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5785 +#line 5850 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5787 +#line 5852 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5786 +#line 5851 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5788 +#line 5853 MOVE_HIGH_JUMP_KICK, MOVE_MEDITATE, MOVE_CONFUSION, @@ -14500,448 +14500,448 @@ F_TRAINER_FEMALE | }, }, }, -#line 5793 +#line 5858 [TRAINER_SHELBY_1] = { -#line 5794 +#line 5859 .trainerName = _("SHELBY"), -#line 5795 +#line 5860 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5796 +#line 5861 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 5797 +#line 5862 F_TRAINER_FEMALE | -#line 5798 +#line 5863 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5799 +#line 5864 .doubleBattle = FALSE, -#line 5800 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 5865 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5802 +#line 5867 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5804 +#line 5869 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5803 +#line 5868 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5806 +#line 5871 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5808 +#line 5873 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 5807 +#line 5872 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5810 +#line 5875 [TRAINER_SHELBY_2] = { -#line 5811 +#line 5876 .trainerName = _("SHELBY"), -#line 5812 +#line 5877 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5813 +#line 5878 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 5814 +#line 5879 F_TRAINER_FEMALE | -#line 5815 +#line 5880 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5816 +#line 5881 .doubleBattle = FALSE, -#line 5817 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 5882 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5819 +#line 5884 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5821 +#line 5886 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 5820 +#line 5885 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5823 +#line 5888 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5825 +#line 5890 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 5824 +#line 5889 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5827 +#line 5892 [TRAINER_SHELBY_3] = { -#line 5828 +#line 5893 .trainerName = _("SHELBY"), -#line 5829 +#line 5894 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5830 +#line 5895 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 5831 +#line 5896 F_TRAINER_FEMALE | -#line 5832 +#line 5897 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5833 +#line 5898 .doubleBattle = FALSE, -#line 5834 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 5899 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5836 +#line 5901 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5838 +#line 5903 .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), -#line 5837 +#line 5902 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5840 +#line 5905 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5842 +#line 5907 .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), -#line 5841 +#line 5906 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5844 +#line 5909 [TRAINER_SHELBY_4] = { -#line 5845 +#line 5910 .trainerName = _("SHELBY"), -#line 5846 +#line 5911 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5847 +#line 5912 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 5848 +#line 5913 F_TRAINER_FEMALE | -#line 5849 +#line 5914 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5850 +#line 5915 .doubleBattle = FALSE, -#line 5851 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 5916 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5853 +#line 5918 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5855 +#line 5920 .iv = TRAINER_PARTY_IVS(27, 27, 27, 27, 27, 27), -#line 5854 +#line 5919 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5857 +#line 5922 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5859 +#line 5924 .iv = TRAINER_PARTY_IVS(27, 27, 27, 27, 27, 27), -#line 5858 +#line 5923 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5861 +#line 5926 [TRAINER_SHELBY_5] = { -#line 5862 +#line 5927 .trainerName = _("SHELBY"), -#line 5863 +#line 5928 .trainerClass = TRAINER_CLASS_EXPERT, -#line 5864 +#line 5929 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 5865 +#line 5930 F_TRAINER_FEMALE | -#line 5866 +#line 5931 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 5867 +#line 5932 .doubleBattle = FALSE, -#line 5868 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 5933 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5870 +#line 5935 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5872 +#line 5937 .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), -#line 5871 +#line 5936 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5874 +#line 5939 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5876 +#line 5941 .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), -#line 5875 +#line 5940 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5878 +#line 5943 [TRAINER_CALVIN_1] = { -#line 5879 +#line 5944 .trainerName = _("CALVIN"), -#line 5880 +#line 5945 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 5881 +#line 5946 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 5883 +#line 5948 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5884 +#line 5949 .doubleBattle = FALSE, -#line 5885 +#line 5950 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5887 +#line 5952 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5889 +#line 5954 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5888 +#line 5953 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5891 +#line 5956 [TRAINER_BILLY] = { -#line 5892 +#line 5957 .trainerName = _("BILLY"), -#line 5893 +#line 5958 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 5894 +#line 5959 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 5896 +#line 5961 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5897 +#line 5962 .doubleBattle = FALSE, -#line 5898 +#line 5963 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5900 +#line 5965 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5902 +#line 5967 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5901 +#line 5966 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5904 +#line 5969 .species = SPECIES_SEEDOT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5906 +#line 5971 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5905 +#line 5970 .lvl = 7, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5908 +#line 5973 [TRAINER_JOSH] = { -#line 5909 +#line 5974 .trainerName = _("JOSH"), -#line 5910 +#line 5975 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 5911 +#line 5976 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 5913 +#line 5978 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5914 +#line 5979 .doubleBattle = FALSE, -#line 5915 +#line 5980 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5917 +#line 5982 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5919 +#line 5984 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 5918 +#line 5983 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5920 +#line 5985 MOVE_TACKLE, }, }, }, }, -#line 5922 +#line 5987 [TRAINER_TOMMY] = { -#line 5923 +#line 5988 .trainerName = _("TOMMY"), -#line 5924 +#line 5989 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 5925 +#line 5990 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 5927 +#line 5992 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5928 +#line 5993 .doubleBattle = FALSE, -#line 5929 +#line 5994 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5931 +#line 5996 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5933 +#line 5998 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 5932 +#line 5997 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 5935 +#line 6000 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5937 +#line 6002 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 5936 +#line 6001 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5939 +#line 6004 [TRAINER_JOEY] = { -#line 5940 +#line 6005 .trainerName = _("JOEY"), -#line 5941 +#line 6006 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 5942 +#line 6007 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 5944 +#line 6009 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5945 +#line 6010 .doubleBattle = FALSE, -#line 5946 +#line 6011 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 5948 +#line 6013 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5950 +#line 6015 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 5949 +#line 6014 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 5952 +#line 6017 [TRAINER_BEN] = { -#line 5953 +#line 6018 .trainerName = _("BEN"), -#line 5954 +#line 6019 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 5955 +#line 6020 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 5957 +#line 6022 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 5958 +#line 6023 .doubleBattle = FALSE, -#line 5959 +#line 6024 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5961 +#line 6026 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5963 +#line 6028 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 5962 +#line 6027 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5964 +#line 6029 MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_GROWL, @@ -14949,17 +14949,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5969 +#line 6034 .species = SPECIES_GULPIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5971 +#line 6036 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 5970 +#line 6035 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5972 +#line 6037 MOVE_AMNESIA, MOVE_SLUDGE, MOVE_YAWN, @@ -14968,39 +14968,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 5977 +#line 6042 [TRAINER_QUINCY] = { -#line 5978 +#line 6043 .trainerName = _("QUINCY"), -#line 5979 +#line 6044 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 5980 +#line 6045 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 5982 +#line 6047 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 5983 +#line 6048 .items = { ITEM_FULL_RESTORE }, -#line 5984 +#line 6049 .doubleBattle = FALSE, -#line 5985 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 6050 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 5987 +#line 6052 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5989 +#line 6054 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 5988 +#line 6053 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5990 +#line 6055 MOVE_ATTRACT, MOVE_ICE_BEAM, MOVE_THUNDERBOLT, @@ -15008,17 +15008,17 @@ F_TRAINER_FEMALE | }, }, { -#line 5995 +#line 6060 .species = SPECIES_DUSCLOPS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 5997 +#line 6062 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 5996 +#line 6061 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 5998 +#line 6063 MOVE_SKILL_SWAP, MOVE_PROTECT, MOVE_WILL_O_WISP, @@ -15027,41 +15027,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 6003 +#line 6068 [TRAINER_KATELYNN] = { -#line 6004 +#line 6069 .trainerName = _("KATELYNN"), -#line 6005 +#line 6070 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 6006 +#line 6071 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 6007 +#line 6072 F_TRAINER_FEMALE | -#line 6008 +#line 6073 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 6009 +#line 6074 .items = { ITEM_FULL_RESTORE }, -#line 6010 +#line 6075 .doubleBattle = FALSE, -#line 6011 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 6076 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6013 +#line 6078 .species = SPECIES_GARDEVOIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6015 +#line 6080 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 6014 +#line 6079 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6016 +#line 6081 MOVE_SKILL_SWAP, MOVE_PSYCHIC, MOVE_THUNDERBOLT, @@ -15069,17 +15069,17 @@ F_TRAINER_FEMALE | }, }, { -#line 6021 +#line 6086 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6023 +#line 6088 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 6022 +#line 6087 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6024 +#line 6089 MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, @@ -15088,418 +15088,418 @@ F_TRAINER_FEMALE | }, }, }, -#line 6029 +#line 6094 [TRAINER_JAYLEN] = { -#line 6030 +#line 6095 .trainerName = _("JAYLEN"), -#line 6031 +#line 6096 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6032 +#line 6097 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6034 +#line 6099 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6035 +#line 6100 .doubleBattle = FALSE, -#line 6036 +#line 6101 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6038 +#line 6103 .species = SPECIES_TRAPINCH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6040 +#line 6105 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6039 +#line 6104 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6042 +#line 6107 [TRAINER_DILLON] = { -#line 6043 +#line 6108 .trainerName = _("DILLON"), -#line 6044 +#line 6109 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6045 +#line 6110 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6047 +#line 6112 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6048 +#line 6113 .doubleBattle = FALSE, -#line 6049 +#line 6114 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6051 +#line 6116 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6053 +#line 6118 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6052 +#line 6117 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6055 +#line 6120 [TRAINER_CALVIN_2] = { -#line 6056 +#line 6121 .trainerName = _("CALVIN"), -#line 6057 +#line 6122 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6058 +#line 6123 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6060 +#line 6125 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6061 +#line 6126 .doubleBattle = FALSE, -#line 6062 +#line 6127 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6064 +#line 6129 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6066 +#line 6131 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6065 +#line 6130 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6068 +#line 6133 [TRAINER_CALVIN_3] = { -#line 6069 +#line 6134 .trainerName = _("CALVIN"), -#line 6070 +#line 6135 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6071 +#line 6136 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6073 +#line 6138 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6074 +#line 6139 .doubleBattle = FALSE, -#line 6075 +#line 6140 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6077 +#line 6142 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6079 +#line 6144 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6078 +#line 6143 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6081 +#line 6146 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6083 +#line 6148 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6082 +#line 6147 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6085 +#line 6150 [TRAINER_CALVIN_4] = { -#line 6086 +#line 6151 .trainerName = _("CALVIN"), -#line 6087 +#line 6152 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6088 +#line 6153 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6090 +#line 6155 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6091 +#line 6156 .doubleBattle = FALSE, -#line 6092 +#line 6157 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6094 +#line 6159 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6096 +#line 6161 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6095 +#line 6160 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6098 +#line 6163 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6100 +#line 6165 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6099 +#line 6164 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6102 +#line 6167 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6104 +#line 6169 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6103 +#line 6168 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6106 +#line 6171 [TRAINER_CALVIN_5] = { -#line 6107 +#line 6172 .trainerName = _("CALVIN"), -#line 6108 +#line 6173 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6109 +#line 6174 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6111 +#line 6176 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6112 +#line 6177 .doubleBattle = FALSE, -#line 6113 +#line 6178 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6115 +#line 6180 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6117 +#line 6182 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6116 +#line 6181 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6119 +#line 6184 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6121 +#line 6186 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6120 +#line 6185 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6123 +#line 6188 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6125 +#line 6190 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6124 +#line 6189 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6127 +#line 6192 [TRAINER_EDDIE] = { -#line 6128 +#line 6193 .trainerName = _("EDDIE"), -#line 6129 +#line 6194 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6130 +#line 6195 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6132 +#line 6197 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6133 +#line 6198 .doubleBattle = FALSE, -#line 6134 +#line 6199 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6136 +#line 6201 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6138 +#line 6203 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6137 +#line 6202 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6140 +#line 6205 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6142 +#line 6207 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6141 +#line 6206 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6144 +#line 6209 [TRAINER_ALLEN] = { -#line 6145 +#line 6210 .trainerName = _("ALLEN"), -#line 6146 +#line 6211 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6147 +#line 6212 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6149 +#line 6214 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6150 +#line 6215 .doubleBattle = FALSE, -#line 6151 +#line 6216 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6153 +#line 6218 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6155 +#line 6220 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6154 +#line 6219 .lvl = 4, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6157 +#line 6222 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6159 +#line 6224 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6158 +#line 6223 .lvl = 3, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6161 +#line 6226 [TRAINER_TIMMY] = { -#line 6162 +#line 6227 .trainerName = _("TIMMY"), -#line 6163 +#line 6228 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6164 +#line 6229 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 6166 +#line 6231 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6167 +#line 6232 .doubleBattle = FALSE, -#line 6168 +#line 6233 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6170 +#line 6235 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6172 +#line 6237 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6171 +#line 6236 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6174 +#line 6239 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6176 +#line 6241 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6175 +#line 6240 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6178 +#line 6243 [TRAINER_WALLACE] = { -#line 6179 +#line 6244 .trainerName = _("WALLACE"), -#line 6180 +#line 6245 .trainerClass = TRAINER_CLASS_CHAMPION, -#line 6181 +#line 6246 .trainerPic = TRAINER_PIC_CHAMPION_WALLACE, .encounterMusic_gender = -#line 6183 +#line 6248 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6184 +#line 6249 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 6185 +#line 6250 .doubleBattle = FALSE, -#line 6186 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, -#line 6187 +#line 6251 + .aiFlags = AI_FLAG_BASIC_TRAINER, +#line 6252 .mugshotEnabled = TRUE, .mugshotColor = MUGSHOT_COLOR_YELLOW, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 6189 +#line 6254 .species = SPECIES_WAILORD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6191 +#line 6256 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 6190 +#line 6255 .lvl = 57, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6192 +#line 6257 MOVE_RAIN_DANCE, MOVE_WATER_SPOUT, MOVE_DOUBLE_EDGE, @@ -15507,17 +15507,17 @@ F_TRAINER_FEMALE | }, }, { -#line 6197 +#line 6262 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6199 +#line 6264 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 6198 +#line 6263 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6200 +#line 6265 MOVE_TOXIC, MOVE_HYDRO_PUMP, MOVE_SLUDGE_BOMB, @@ -15525,17 +15525,17 @@ F_TRAINER_FEMALE | }, }, { -#line 6205 +#line 6270 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6207 +#line 6272 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 6206 +#line 6271 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6208 +#line 6273 MOVE_GIGA_DRAIN, MOVE_SURF, MOVE_LEECH_SEED, @@ -15543,17 +15543,17 @@ F_TRAINER_FEMALE | }, }, { -#line 6213 +#line 6278 .species = SPECIES_WHISCASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6215 +#line 6280 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 6214 +#line 6279 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6216 +#line 6281 MOVE_EARTHQUAKE, MOVE_SURF, MOVE_AMNESIA, @@ -15561,17 +15561,17 @@ F_TRAINER_FEMALE | }, }, { -#line 6221 +#line 6286 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6223 +#line 6288 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 6222 +#line 6287 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6224 +#line 6289 MOVE_DRAGON_DANCE, MOVE_EARTHQUAKE, MOVE_HYPER_BEAM, @@ -15579,19 +15579,19 @@ F_TRAINER_FEMALE | }, }, { -#line 6229 +#line 6294 .species = SPECIES_MILOTIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6229 +#line 6294 .heldItem = ITEM_SITRUS_BERRY, -#line 6231 +#line 6296 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 6230 +#line 6295 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 6232 +#line 6297 MOVE_RECOVER, MOVE_SURF, MOVE_ICE_BEAM, @@ -15600,1076 +15600,914 @@ F_TRAINER_FEMALE | }, }, }, -#line 6237 +#line 6302 [TRAINER_ANDREW] = { -#line 6238 +#line 6303 .trainerName = _("ANDREW"), -#line 6239 +#line 6304 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6240 +#line 6305 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6242 +#line 6307 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6243 +#line 6308 .doubleBattle = FALSE, -#line 6244 +#line 6309 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6246 +#line 6311 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6248 +#line 6313 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6247 +#line 6312 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6250 +#line 6315 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6252 +#line 6317 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6251 +#line 6316 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6254 +#line 6319 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6256 +#line 6321 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6255 +#line 6320 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6258 +#line 6323 [TRAINER_IVAN] = { -#line 6259 +#line 6324 .trainerName = _("IVAN"), -#line 6260 +#line 6325 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6261 +#line 6326 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6263 +#line 6328 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6264 +#line 6329 .doubleBattle = FALSE, -#line 6265 +#line 6330 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6267 +#line 6332 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6269 +#line 6334 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6268 +#line 6333 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6271 +#line 6336 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6273 +#line 6338 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6272 +#line 6337 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6275 +#line 6340 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6277 +#line 6342 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6276 +#line 6341 .lvl = 7, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6279 +#line 6344 [TRAINER_CLAUDE] = { -#line 6280 +#line 6345 .trainerName = _("CLAUDE"), -#line 6281 +#line 6346 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6282 +#line 6347 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6284 +#line 6349 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6285 +#line 6350 .doubleBattle = FALSE, -#line 6286 +#line 6351 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6288 +#line 6353 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6290 +#line 6355 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6289 +#line 6354 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6292 +#line 6357 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6294 +#line 6359 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6293 +#line 6358 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6296 +#line 6361 .species = SPECIES_BARBOACH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6298 +#line 6363 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6297 +#line 6362 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6300 +#line 6365 [TRAINER_ELLIOT_1] = { -#line 6301 +#line 6366 .trainerName = _("ELLIOT"), -#line 6302 +#line 6367 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6303 +#line 6368 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6305 +#line 6370 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6306 +#line 6371 .doubleBattle = FALSE, -#line 6307 +#line 6372 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6309 +#line 6374 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6311 +#line 6376 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6310 +#line 6375 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6313 +#line 6378 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6315 +#line 6380 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6314 +#line 6379 .lvl = 7, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6317 +#line 6382 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6319 +#line 6384 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6318 +#line 6383 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6321 +#line 6386 [TRAINER_NED] = { -#line 6322 +#line 6387 .trainerName = _("NED"), -#line 6323 +#line 6388 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6324 +#line 6389 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6326 +#line 6391 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6327 +#line 6392 .doubleBattle = FALSE, -#line 6328 +#line 6393 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6330 +#line 6395 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6332 +#line 6397 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6331 +#line 6396 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6334 +#line 6399 [TRAINER_DALE] = { -#line 6335 +#line 6400 .trainerName = _("DALE"), -#line 6336 +#line 6401 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6337 +#line 6402 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6339 +#line 6404 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6340 +#line 6405 .doubleBattle = FALSE, -#line 6341 +#line 6406 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 6343 +#line 6408 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6345 +#line 6410 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6344 +#line 6409 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6347 +#line 6412 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6349 +#line 6414 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6348 +#line 6413 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6351 +#line 6416 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6353 +#line 6418 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6352 +#line 6417 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6355 +#line 6420 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6357 +#line 6422 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6356 +#line 6421 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6359 +#line 6424 [TRAINER_NOLAN] = { -#line 6360 +#line 6425 .trainerName = _("NOLAN"), -#line 6361 +#line 6426 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6362 +#line 6427 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6364 +#line 6429 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6365 +#line 6430 .doubleBattle = FALSE, -#line 6366 +#line 6431 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6368 +#line 6433 .species = SPECIES_BARBOACH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6370 +#line 6435 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6369 +#line 6434 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6372 +#line 6437 [TRAINER_BARNY] = { -#line 6373 +#line 6438 .trainerName = _("BARNY"), -#line 6374 +#line 6439 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6375 +#line 6440 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6377 +#line 6442 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6378 +#line 6443 .doubleBattle = FALSE, -#line 6379 +#line 6444 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6381 +#line 6446 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6383 +#line 6448 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6382 +#line 6447 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6385 +#line 6450 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6387 +#line 6452 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6386 +#line 6451 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6389 +#line 6454 [TRAINER_WADE] = { -#line 6390 +#line 6455 .trainerName = _("WADE"), -#line 6391 +#line 6456 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6392 +#line 6457 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6394 +#line 6459 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6395 +#line 6460 .doubleBattle = FALSE, -#line 6396 +#line 6461 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 6398 +#line 6463 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6400 +#line 6465 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6399 +#line 6464 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6402 +#line 6467 [TRAINER_CARTER] = { -#line 6403 +#line 6468 .trainerName = _("CARTER"), -#line 6404 +#line 6469 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6405 +#line 6470 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6407 +#line 6472 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6408 +#line 6473 .doubleBattle = FALSE, -#line 6409 +#line 6474 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6411 +#line 6476 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6413 +#line 6478 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6412 +#line 6477 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6415 +#line 6480 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6417 +#line 6482 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6416 +#line 6481 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6419 +#line 6484 [TRAINER_ELLIOT_2] = { -#line 6420 +#line 6485 .trainerName = _("ELLIOT"), -#line 6421 +#line 6486 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6422 +#line 6487 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6424 +#line 6489 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6425 +#line 6490 .doubleBattle = FALSE, -#line 6426 +#line 6491 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6428 +#line 6493 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6430 +#line 6495 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6429 +#line 6494 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6432 +#line 6497 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6434 +#line 6499 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6433 +#line 6498 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6436 +#line 6501 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6438 +#line 6503 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6437 +#line 6502 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6440 +#line 6505 [TRAINER_ELLIOT_3] = { -#line 6441 +#line 6506 .trainerName = _("ELLIOT"), -#line 6442 +#line 6507 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6443 +#line 6508 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6445 +#line 6510 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6446 +#line 6511 .doubleBattle = FALSE, -#line 6447 +#line 6512 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 6449 +#line 6514 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6451 +#line 6516 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6450 +#line 6515 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6453 +#line 6518 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6455 +#line 6520 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6454 +#line 6519 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6457 +#line 6522 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6459 +#line 6524 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6458 +#line 6523 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6461 +#line 6526 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6463 +#line 6528 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6462 +#line 6527 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6465 +#line 6530 [TRAINER_ELLIOT_4] = { -#line 6466 +#line 6531 .trainerName = _("ELLIOT"), -#line 6467 +#line 6532 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6468 +#line 6533 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6470 +#line 6535 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6471 +#line 6536 .doubleBattle = FALSE, -#line 6472 +#line 6537 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 6474 +#line 6539 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6476 +#line 6541 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6475 +#line 6540 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6478 +#line 6543 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6480 +#line 6545 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6479 +#line 6544 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6482 +#line 6547 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6484 +#line 6549 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6483 +#line 6548 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6486 +#line 6551 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6488 +#line 6553 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6487 +#line 6552 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6490 +#line 6555 [TRAINER_ELLIOT_5] = { -#line 6491 +#line 6556 .trainerName = _("ELLIOT"), -#line 6492 +#line 6557 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6493 +#line 6558 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6495 +#line 6560 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6496 +#line 6561 .doubleBattle = FALSE, -#line 6497 +#line 6562 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 6499 +#line 6564 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6501 +#line 6566 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6500 +#line 6565 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6503 +#line 6568 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6505 +#line 6570 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6504 +#line 6569 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6507 +#line 6572 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6509 +#line 6574 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6508 +#line 6573 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6511 +#line 6576 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6513 +#line 6578 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6512 +#line 6577 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6515 +#line 6580 [TRAINER_RONALD] = { -#line 6516 +#line 6581 .trainerName = _("RONALD"), -#line 6517 +#line 6582 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 6518 +#line 6583 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 6520 +#line 6585 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 6521 +#line 6586 .doubleBattle = FALSE, -#line 6522 +#line 6587 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 6524 +#line 6589 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6526 +#line 6591 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6525 +#line 6590 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6528 +#line 6593 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6530 +#line 6595 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6529 +#line 6594 .lvl = 21, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6532 +#line 6597 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6534 +#line 6599 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6533 +#line 6598 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6536 +#line 6601 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6538 +#line 6603 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6537 +#line 6602 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6540 +#line 6605 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6542 +#line 6607 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6541 +#line 6606 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6544 +#line 6609 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6546 +#line 6611 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6545 +#line 6610 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6548 +#line 6613 [TRAINER_JACOB] = { -#line 6549 +#line 6614 .trainerName = _("JACOB"), -#line 6550 +#line 6615 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6551 +#line 6616 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .encounterMusic_gender = -#line 6553 +#line 6618 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6554 +#line 6619 .doubleBattle = FALSE, -#line 6555 +#line 6620 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 6557 +#line 6622 .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6559 +#line 6624 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6558 +#line 6623 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6561 +#line 6626 .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6563 +#line 6628 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6562 +#line 6627 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6565 +#line 6630 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6567 +#line 6632 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 6566 +#line 6631 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6569 +#line 6634 [TRAINER_ANTHONY] = { -#line 6570 +#line 6635 .trainerName = _("ANTHONY"), -#line 6571 +#line 6636 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6572 +#line 6637 .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .encounterMusic_gender = -#line 6574 +#line 6639 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6575 +#line 6640 .doubleBattle = FALSE, -#line 6576 +#line 6641 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 6578 - .species = SPECIES_MAGNEMITE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6580 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6579 - .lvl = 14, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 6582 - .species = SPECIES_MAGNEMITE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6584 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6583 - .lvl = 14, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 6586 - [TRAINER_BENJAMIN_1] = - { -#line 6587 - .trainerName = _("BENJAMIN"), -#line 6588 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6589 - .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, - .encounterMusic_gender = -#line 6591 - TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6592 - .doubleBattle = FALSE, -#line 6593 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 6595 - .species = SPECIES_MAGNEMITE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6597 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6596 - .lvl = 16, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 6599 - [TRAINER_BENJAMIN_2] = - { -#line 6600 - .trainerName = _("BENJAMIN"), -#line 6601 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6602 - .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, - .encounterMusic_gender = -#line 6604 - TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6605 - .doubleBattle = FALSE, -#line 6606 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 6608 - .species = SPECIES_MAGNEMITE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6610 - .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6609 - .lvl = 30, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 6612 - [TRAINER_BENJAMIN_3] = - { -#line 6613 - .trainerName = _("BENJAMIN"), -#line 6614 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6615 - .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, - .encounterMusic_gender = -#line 6617 - TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6618 - .doubleBattle = FALSE, -#line 6619 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 6621 - .species = SPECIES_MAGNEMITE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6623 - .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6622 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 6625 - [TRAINER_BENJAMIN_4] = - { -#line 6626 - .trainerName = _("BENJAMIN"), -#line 6627 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6628 - .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, - .encounterMusic_gender = -#line 6630 - TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6631 - .doubleBattle = FALSE, -#line 6632 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 6634 - .species = SPECIES_MAGNETON, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6636 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6635 - .lvl = 36, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 6638 - [TRAINER_BENJAMIN_5] = - { -#line 6639 - .trainerName = _("BENJAMIN"), -#line 6640 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6641 - .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, - .encounterMusic_gender = #line 6643 - TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6644 - .doubleBattle = FALSE, + .species = SPECIES_MAGNEMITE, + .gender = TRAINER_MON_RANDOM_GENDER, #line 6645 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 6644 + .lvl = 14, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, { #line 6647 - .species = SPECIES_MAGNETON, + .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, #line 6649 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 6648 - .lvl = 39, + .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, #line 6651 - [TRAINER_ABIGAIL_1] = + [TRAINER_BENJAMIN_1] = { #line 6652 - .trainerName = _("ABIGAIL"), + .trainerName = _("BENJAMIN"), #line 6653 .trainerClass = TRAINER_CLASS_TRIATHLETE, #line 6654 - .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, + .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .encounterMusic_gender = -#line 6655 -F_TRAINER_FEMALE | #line 6656 - TRAINER_ENCOUNTER_MUSIC_FEMALE, + TRAINER_ENCOUNTER_MUSIC_MALE, #line 6657 .doubleBattle = FALSE, #line 6658 @@ -16691,24 +16529,22 @@ F_TRAINER_FEMALE | }, }, #line 6664 - [TRAINER_JASMINE] = + [TRAINER_BENJAMIN_2] = { #line 6665 - .trainerName = _("JASMINE"), + .trainerName = _("BENJAMIN"), #line 6666 .trainerClass = TRAINER_CLASS_TRIATHLETE, #line 6667 - .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, + .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .encounterMusic_gender = -#line 6668 -F_TRAINER_FEMALE | #line 6669 - TRAINER_ENCOUNTER_MUSIC_FEMALE, + TRAINER_ENCOUNTER_MUSIC_MALE, #line 6670 .doubleBattle = FALSE, #line 6671 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 3, + .partySize = 1, .party = (const struct TrainerMon[]) { { @@ -16716,216 +16552,214 @@ F_TRAINER_FEMALE | .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, #line 6675 - .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), #line 6674 - .lvl = 14, + .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, - { + }, + }, #line 6677 + [TRAINER_BENJAMIN_3] = + { +#line 6678 + .trainerName = _("BENJAMIN"), +#line 6679 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 6680 + .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, + .encounterMusic_gender = +#line 6682 + TRAINER_ENCOUNTER_MUSIC_MALE, +#line 6683 + .doubleBattle = FALSE, +#line 6684 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 6686 .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6679 +#line 6688 + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), +#line 6687 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 6690 + [TRAINER_BENJAMIN_4] = + { +#line 6691 + .trainerName = _("BENJAMIN"), +#line 6692 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 6693 + .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, + .encounterMusic_gender = +#line 6695 + TRAINER_ENCOUNTER_MUSIC_MALE, +#line 6696 + .doubleBattle = FALSE, +#line 6697 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 6699 + .species = SPECIES_MAGNETON, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 6701 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 6700 + .lvl = 36, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 6703 + [TRAINER_BENJAMIN_5] = + { +#line 6704 + .trainerName = _("BENJAMIN"), +#line 6705 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 6706 + .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, + .encounterMusic_gender = +#line 6708 + TRAINER_ENCOUNTER_MUSIC_MALE, +#line 6709 + .doubleBattle = FALSE, +#line 6710 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 6712 + .species = SPECIES_MAGNETON, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 6714 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 6713 + .lvl = 39, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 6716 + [TRAINER_ABIGAIL_1] = + { +#line 6717 + .trainerName = _("ABIGAIL"), +#line 6718 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 6719 + .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, + .encounterMusic_gender = +#line 6720 +F_TRAINER_FEMALE | +#line 6721 + TRAINER_ENCOUNTER_MUSIC_FEMALE, +#line 6722 + .doubleBattle = FALSE, +#line 6723 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 6725 + .species = SPECIES_MAGNEMITE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 6727 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 6726 + .lvl = 16, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 6729 + [TRAINER_JASMINE] = + { +#line 6730 + .trainerName = _("JASMINE"), +#line 6731 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 6732 + .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, + .encounterMusic_gender = +#line 6733 +F_TRAINER_FEMALE | +#line 6734 + TRAINER_ENCOUNTER_MUSIC_FEMALE, +#line 6735 + .doubleBattle = FALSE, +#line 6736 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 3, + .party = (const struct TrainerMon[]) + { + { +#line 6738 + .species = SPECIES_MAGNEMITE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 6740 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 6678 +#line 6739 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 6681 +#line 6742 + .species = SPECIES_MAGNEMITE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 6744 + .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), +#line 6743 + .lvl = 14, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 6746 .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, -#line 6683 +#line 6748 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6682 +#line 6747 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6685 +#line 6750 [TRAINER_ABIGAIL_2] = { -#line 6686 - .trainerName = _("ABIGAIL"), -#line 6687 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6688 - .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, - .encounterMusic_gender = -#line 6689 -F_TRAINER_FEMALE | -#line 6690 - TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6691 - .doubleBattle = FALSE, -#line 6692 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 6694 - .species = SPECIES_MAGNEMITE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6696 - .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6695 - .lvl = 28, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 6698 - [TRAINER_ABIGAIL_3] = - { -#line 6699 - .trainerName = _("ABIGAIL"), -#line 6700 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6701 - .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, - .encounterMusic_gender = -#line 6702 -F_TRAINER_FEMALE | -#line 6703 - TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6704 - .doubleBattle = FALSE, -#line 6705 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 6707 - .species = SPECIES_MAGNEMITE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6709 - .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6708 - .lvl = 31, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 6711 - [TRAINER_ABIGAIL_4] = - { -#line 6712 - .trainerName = _("ABIGAIL"), -#line 6713 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6714 - .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, - .encounterMusic_gender = -#line 6715 -F_TRAINER_FEMALE | -#line 6716 - TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6717 - .doubleBattle = FALSE, -#line 6718 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 6720 - .species = SPECIES_MAGNETON, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6722 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6721 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 6724 - [TRAINER_ABIGAIL_5] = - { -#line 6725 - .trainerName = _("ABIGAIL"), -#line 6726 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6727 - .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, - .encounterMusic_gender = -#line 6728 -F_TRAINER_FEMALE | -#line 6729 - TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 6730 - .doubleBattle = FALSE, -#line 6731 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 6733 - .species = SPECIES_MAGNETON, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6735 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6734 - .lvl = 37, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 6737 - [TRAINER_DYLAN_1] = - { -#line 6738 - .trainerName = _("DYLAN"), -#line 6739 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6740 - .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, - .encounterMusic_gender = -#line 6742 - TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6743 - .doubleBattle = FALSE, -#line 6744 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 6746 - .species = SPECIES_DODUO, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6748 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6747 - .lvl = 17, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 6750 - [TRAINER_DYLAN_2] = - { #line 6751 - .trainerName = _("DYLAN"), + .trainerName = _("ABIGAIL"), #line 6752 .trainerClass = TRAINER_CLASS_TRIATHLETE, #line 6753 - .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, + .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = +#line 6754 +F_TRAINER_FEMALE | #line 6755 - TRAINER_ENCOUNTER_MUSIC_MALE, + TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 6756 .doubleBattle = FALSE, #line 6757 @@ -16935,7 +16769,7 @@ F_TRAINER_FEMALE | { { #line 6759 - .species = SPECIES_DODUO, + .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, #line 6761 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), @@ -16947,17 +16781,19 @@ F_TRAINER_FEMALE | }, }, #line 6763 - [TRAINER_DYLAN_3] = + [TRAINER_ABIGAIL_3] = { #line 6764 - .trainerName = _("DYLAN"), + .trainerName = _("ABIGAIL"), #line 6765 .trainerClass = TRAINER_CLASS_TRIATHLETE, #line 6766 - .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, + .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = +#line 6767 +F_TRAINER_FEMALE | #line 6768 - TRAINER_ENCOUNTER_MUSIC_MALE, + TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 6769 .doubleBattle = FALSE, #line 6770 @@ -16967,7 +16803,7 @@ F_TRAINER_FEMALE | { { #line 6772 - .species = SPECIES_DODUO, + .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, #line 6774 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), @@ -16979,17 +16815,19 @@ F_TRAINER_FEMALE | }, }, #line 6776 - [TRAINER_DYLAN_4] = + [TRAINER_ABIGAIL_4] = { #line 6777 - .trainerName = _("DYLAN"), + .trainerName = _("ABIGAIL"), #line 6778 .trainerClass = TRAINER_CLASS_TRIATHLETE, #line 6779 - .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, + .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = +#line 6780 +F_TRAINER_FEMALE | #line 6781 - TRAINER_ENCOUNTER_MUSIC_MALE, + TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 6782 .doubleBattle = FALSE, #line 6783 @@ -16999,7 +16837,7 @@ F_TRAINER_FEMALE | { { #line 6785 - .species = SPECIES_DODRIO, + .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, #line 6787 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), @@ -17011,17 +16849,19 @@ F_TRAINER_FEMALE | }, }, #line 6789 - [TRAINER_DYLAN_5] = + [TRAINER_ABIGAIL_5] = { #line 6790 - .trainerName = _("DYLAN"), + .trainerName = _("ABIGAIL"), #line 6791 .trainerClass = TRAINER_CLASS_TRIATHLETE, #line 6792 - .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, + .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = +#line 6793 +F_TRAINER_FEMALE | #line 6794 - TRAINER_ENCOUNTER_MUSIC_MALE, + TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 6795 .doubleBattle = FALSE, #line 6796 @@ -17031,7 +16871,7 @@ F_TRAINER_FEMALE | { { #line 6798 - .species = SPECIES_DODRIO, + .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, #line 6800 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), @@ -17043,19 +16883,17 @@ F_TRAINER_FEMALE | }, }, #line 6802 - [TRAINER_MARIA_1] = + [TRAINER_DYLAN_1] = { #line 6803 - .trainerName = _("MARIA"), + .trainerName = _("DYLAN"), #line 6804 .trainerClass = TRAINER_CLASS_TRIATHLETE, #line 6805 - .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, + .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, .encounterMusic_gender = -#line 6806 -F_TRAINER_FEMALE | #line 6807 - TRAINER_ENCOUNTER_MUSIC_FEMALE, + TRAINER_ENCOUNTER_MUSIC_MALE, #line 6808 .doubleBattle = FALSE, #line 6809 @@ -17077,19 +16915,17 @@ F_TRAINER_FEMALE | }, }, #line 6815 - [TRAINER_MARIA_2] = + [TRAINER_DYLAN_2] = { #line 6816 - .trainerName = _("MARIA"), + .trainerName = _("DYLAN"), #line 6817 .trainerClass = TRAINER_CLASS_TRIATHLETE, #line 6818 - .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, + .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, .encounterMusic_gender = -#line 6819 -F_TRAINER_FEMALE | #line 6820 - TRAINER_ENCOUNTER_MUSIC_FEMALE, + TRAINER_ENCOUNTER_MUSIC_MALE, #line 6821 .doubleBattle = FALSE, #line 6822 @@ -17111,19 +16947,17 @@ F_TRAINER_FEMALE | }, }, #line 6828 - [TRAINER_MARIA_3] = + [TRAINER_DYLAN_3] = { #line 6829 - .trainerName = _("MARIA"), + .trainerName = _("DYLAN"), #line 6830 .trainerClass = TRAINER_CLASS_TRIATHLETE, #line 6831 - .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, + .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, .encounterMusic_gender = -#line 6832 -F_TRAINER_FEMALE | #line 6833 - TRAINER_ENCOUNTER_MUSIC_FEMALE, + TRAINER_ENCOUNTER_MUSIC_MALE, #line 6834 .doubleBattle = FALSE, #line 6835 @@ -17145,19 +16979,17 @@ F_TRAINER_FEMALE | }, }, #line 6841 - [TRAINER_MARIA_4] = + [TRAINER_DYLAN_4] = { #line 6842 - .trainerName = _("MARIA"), + .trainerName = _("DYLAN"), #line 6843 .trainerClass = TRAINER_CLASS_TRIATHLETE, #line 6844 - .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, + .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, .encounterMusic_gender = -#line 6845 -F_TRAINER_FEMALE | #line 6846 - TRAINER_ENCOUNTER_MUSIC_FEMALE, + TRAINER_ENCOUNTER_MUSIC_MALE, #line 6847 .doubleBattle = FALSE, #line 6848 @@ -17179,19 +17011,17 @@ F_TRAINER_FEMALE | }, }, #line 6854 - [TRAINER_MARIA_5] = + [TRAINER_DYLAN_5] = { #line 6855 - .trainerName = _("MARIA"), + .trainerName = _("DYLAN"), #line 6856 .trainerClass = TRAINER_CLASS_TRIATHLETE, #line 6857 - .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, + .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_M, .encounterMusic_gender = -#line 6858 -F_TRAINER_FEMALE | #line 6859 - TRAINER_ENCOUNTER_MUSIC_FEMALE, + TRAINER_ENCOUNTER_MUSIC_MALE, #line 6860 .doubleBattle = FALSE, #line 6861 @@ -17213,364 +17043,372 @@ F_TRAINER_FEMALE | }, }, #line 6867 - [TRAINER_CAMDEN] = + [TRAINER_MARIA_1] = { #line 6868 - .trainerName = _("CAMDEN"), + .trainerName = _("MARIA"), #line 6869 .trainerClass = TRAINER_CLASS_TRIATHLETE, #line 6870 - .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, + .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = +#line 6871 +F_TRAINER_FEMALE | #line 6872 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, + TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 6873 .doubleBattle = FALSE, #line 6874 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 6876 - .species = SPECIES_STARYU, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6878 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6877 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 6880 - .species = SPECIES_STARYU, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6882 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6881 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 6884 - [TRAINER_DEMETRIUS] = - { -#line 6885 - .trainerName = _("DEMETRIUS"), -#line 6886 - .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 6887 - .trainerPic = TRAINER_PIC_YOUNGSTER, - .encounterMusic_gender = -#line 6889 - TRAINER_ENCOUNTER_MUSIC_MALE, -#line 6890 - .doubleBattle = FALSE, -#line 6891 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 6893 - .species = SPECIES_ZIGZAGOON, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6895 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6894 - .lvl = 25, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 6897 - .species = SPECIES_ELECTRIKE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6899 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6898 - .lvl = 25, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 6901 - [TRAINER_ISAIAH_1] = - { -#line 6902 - .trainerName = _("ISAIAH"), -#line 6903 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6904 - .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, - .encounterMusic_gender = -#line 6906 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6907 - .doubleBattle = FALSE, -#line 6908 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { +#line 6876 + .species = SPECIES_DODUO, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 6878 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 6877 + .lvl = 17, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 6880 + [TRAINER_MARIA_2] = + { +#line 6881 + .trainerName = _("MARIA"), +#line 6882 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 6883 + .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, + .encounterMusic_gender = +#line 6884 +F_TRAINER_FEMALE | +#line 6885 + TRAINER_ENCOUNTER_MUSIC_FEMALE, +#line 6886 + .doubleBattle = FALSE, +#line 6887 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 6889 + .species = SPECIES_DODUO, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 6891 + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), +#line 6890 + .lvl = 28, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 6893 + [TRAINER_MARIA_3] = + { +#line 6894 + .trainerName = _("MARIA"), +#line 6895 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 6896 + .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, + .encounterMusic_gender = +#line 6897 +F_TRAINER_FEMALE | +#line 6898 + TRAINER_ENCOUNTER_MUSIC_FEMALE, +#line 6899 + .doubleBattle = FALSE, +#line 6900 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 6902 + .species = SPECIES_DODUO, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 6904 + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), +#line 6903 + .lvl = 31, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 6906 + [TRAINER_MARIA_4] = + { +#line 6907 + .trainerName = _("MARIA"), +#line 6908 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 6909 + .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, + .encounterMusic_gender = #line 6910 - .species = SPECIES_STARYU, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6912 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +F_TRAINER_FEMALE | #line 6911 - .lvl = 35, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 6914 - [TRAINER_PABLO_1] = - { + TRAINER_ENCOUNTER_MUSIC_FEMALE, +#line 6912 + .doubleBattle = FALSE, +#line 6913 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { #line 6915 - .trainerName = _("PABLO"), -#line 6916 - .trainerClass = TRAINER_CLASS_TRIATHLETE, + .species = SPECIES_DODRIO, + .gender = TRAINER_MON_RANDOM_GENDER, #line 6917 - .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, - .encounterMusic_gender = -#line 6919 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6920 - .doubleBattle = FALSE, -#line 6921 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 6923 - .species = SPECIES_STARYU, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6925 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6924 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 6927 - .species = SPECIES_STARYU, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6929 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6928 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 6931 - [TRAINER_CHASE] = - { -#line 6932 - .trainerName = _("CHASE"), -#line 6933 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6934 - .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, - .encounterMusic_gender = -#line 6936 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6937 - .doubleBattle = FALSE, -#line 6938 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 6940 - .species = SPECIES_WINGULL, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6942 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 6941 - .lvl = 26, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 6944 - .species = SPECIES_STARYU, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6946 - .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 6945 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 6916 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 6948 - [TRAINER_ISAIAH_2] = +#line 6919 + [TRAINER_MARIA_5] = { -#line 6949 - .trainerName = _("ISAIAH"), -#line 6950 +#line 6920 + .trainerName = _("MARIA"), +#line 6921 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6951 - .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, +#line 6922 + .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = -#line 6953 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6954 - .doubleBattle = FALSE, -#line 6955 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 6957 - .species = SPECIES_STARYU, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6959 - .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 6958 - .lvl = 39, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 6961 - [TRAINER_ISAIAH_3] = - { -#line 6962 - .trainerName = _("ISAIAH"), -#line 6963 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6964 - .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, - .encounterMusic_gender = -#line 6966 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6967 - .doubleBattle = FALSE, -#line 6968 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 6970 - .species = SPECIES_STARYU, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6972 - .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 6971 - .lvl = 42, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 6974 - [TRAINER_ISAIAH_4] = - { -#line 6975 - .trainerName = _("ISAIAH"), -#line 6976 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6977 - .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, - .encounterMusic_gender = -#line 6979 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6980 - .doubleBattle = FALSE, -#line 6981 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 6983 - .species = SPECIES_STARMIE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6985 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 6984 - .lvl = 45, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 6987 - [TRAINER_ISAIAH_5] = - { -#line 6988 - .trainerName = _("ISAIAH"), -#line 6989 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 6990 - .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, - .encounterMusic_gender = -#line 6992 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 6993 - .doubleBattle = FALSE, -#line 6994 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 6996 - .species = SPECIES_STARMIE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 6998 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 6997 - .lvl = 48, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 7000 - [TRAINER_ISOBEL] = - { -#line 7001 - .trainerName = _("ISOBEL"), -#line 7002 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7003 - .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, - .encounterMusic_gender = -#line 7004 +#line 6923 F_TRAINER_FEMALE | -#line 7005 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7006 +#line 6924 + TRAINER_ENCOUNTER_MUSIC_FEMALE, +#line 6925 .doubleBattle = FALSE, -#line 7007 +#line 6926 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { +#line 6928 + .species = SPECIES_DODRIO, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 6930 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 6929 + .lvl = 37, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 6932 + [TRAINER_CAMDEN] = + { +#line 6933 + .trainerName = _("CAMDEN"), +#line 6934 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 6935 + .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, + .encounterMusic_gender = +#line 6937 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 6938 + .doubleBattle = FALSE, +#line 6939 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 6941 + .species = SPECIES_STARYU, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 6943 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 6942 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 6945 + .species = SPECIES_STARYU, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 6947 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 6946 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 6949 + [TRAINER_DEMETRIUS] = + { +#line 6950 + .trainerName = _("DEMETRIUS"), +#line 6951 + .trainerClass = TRAINER_CLASS_YOUNGSTER, +#line 6952 + .trainerPic = TRAINER_PIC_YOUNGSTER, + .encounterMusic_gender = +#line 6954 + TRAINER_ENCOUNTER_MUSIC_MALE, +#line 6955 + .doubleBattle = FALSE, +#line 6956 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 6958 + .species = SPECIES_ZIGZAGOON, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 6960 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 6959 + .lvl = 25, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 6962 + .species = SPECIES_ELECTRIKE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 6964 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 6963 + .lvl = 25, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 6966 + [TRAINER_ISAIAH_1] = + { +#line 6967 + .trainerName = _("ISAIAH"), +#line 6968 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 6969 + .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, + .encounterMusic_gender = +#line 6971 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 6972 + .doubleBattle = FALSE, +#line 6973 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 6975 + .species = SPECIES_STARYU, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 6977 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 6976 + .lvl = 35, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 6979 + [TRAINER_PABLO_1] = + { +#line 6980 + .trainerName = _("PABLO"), +#line 6981 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 6982 + .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, + .encounterMusic_gender = +#line 6984 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 6985 + .doubleBattle = FALSE, +#line 6986 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 6988 + .species = SPECIES_STARYU, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 6990 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 6989 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 6992 + .species = SPECIES_STARYU, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 6994 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 6993 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 6996 + [TRAINER_CHASE] = + { +#line 6997 + .trainerName = _("CHASE"), +#line 6998 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 6999 + .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, + .encounterMusic_gender = +#line 7001 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 7002 + .doubleBattle = FALSE, +#line 7003 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 7005 + .species = SPECIES_WINGULL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7007 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 7006 + .lvl = 26, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { #line 7009 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, #line 7011 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), + .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), #line 7010 .lvl = 34, .nature = NATURE_HARDY, @@ -17579,569 +17417,731 @@ F_TRAINER_FEMALE | }, }, #line 7013 - [TRAINER_DONNY] = + [TRAINER_ISAIAH_2] = { #line 7014 - .trainerName = _("DONNY"), + .trainerName = _("ISAIAH"), #line 7015 .trainerClass = TRAINER_CLASS_TRIATHLETE, #line 7016 - .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, + .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 7017 -F_TRAINER_FEMALE | #line 7018 TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 7019 .doubleBattle = FALSE, #line 7020 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, + .partySize = 1, .party = (const struct TrainerMon[]) { { #line 7022 - .species = SPECIES_WINGULL, + .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, #line 7024 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7023 - .lvl = 26, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 7026 - .species = SPECIES_STARYU, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7028 - .iv = TRAINER_PARTY_IVS(19, 19, 19, 19, 19, 19), -#line 7027 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 7030 - [TRAINER_TALIA] = - { -#line 7031 - .trainerName = _("TALIA"), -#line 7032 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7033 - .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, - .encounterMusic_gender = -#line 7034 -F_TRAINER_FEMALE | -#line 7035 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7036 - .doubleBattle = FALSE, -#line 7037 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 7039 - .species = SPECIES_STARYU, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7041 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7040 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 7043 - [TRAINER_KATELYN_1] = - { -#line 7044 - .trainerName = _("KATELYN"), -#line 7045 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7046 - .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, - .encounterMusic_gender = -#line 7047 -F_TRAINER_FEMALE | -#line 7048 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7049 - .doubleBattle = FALSE, -#line 7050 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 7052 - .species = SPECIES_STARYU, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7054 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7053 - .lvl = 35, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 7056 - [TRAINER_ALLISON] = - { -#line 7057 - .trainerName = _("ALLISON"), -#line 7058 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7059 - .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, - .encounterMusic_gender = -#line 7060 -F_TRAINER_FEMALE | -#line 7061 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7062 - .doubleBattle = FALSE, -#line 7063 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 7065 - .species = SPECIES_WINGULL, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7067 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7066 - .lvl = 27, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 7069 - .species = SPECIES_STARYU, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7071 - .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), -#line 7070 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 7073 - [TRAINER_KATELYN_2] = - { -#line 7074 - .trainerName = _("KATELYN"), -#line 7075 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7076 - .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, - .encounterMusic_gender = -#line 7077 -F_TRAINER_FEMALE | -#line 7078 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7079 - .doubleBattle = FALSE, -#line 7080 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 7082 - .species = SPECIES_STARYU, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7084 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 7083 +#line 7023 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7086 - [TRAINER_KATELYN_3] = +#line 7026 + [TRAINER_ISAIAH_3] = { -#line 7087 - .trainerName = _("KATELYN"), -#line 7088 +#line 7027 + .trainerName = _("ISAIAH"), +#line 7028 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7089 - .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, +#line 7029 + .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 7090 -F_TRAINER_FEMALE | -#line 7091 +#line 7031 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7092 +#line 7032 .doubleBattle = FALSE, -#line 7093 +#line 7033 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7095 +#line 7035 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7097 +#line 7037 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 7096 +#line 7036 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7099 - [TRAINER_KATELYN_4] = +#line 7039 + [TRAINER_ISAIAH_4] = { -#line 7100 - .trainerName = _("KATELYN"), -#line 7101 +#line 7040 + .trainerName = _("ISAIAH"), +#line 7041 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7102 - .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, +#line 7042 + .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 7103 -F_TRAINER_FEMALE | -#line 7104 +#line 7044 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7105 +#line 7045 .doubleBattle = FALSE, -#line 7106 +#line 7046 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7108 +#line 7048 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7110 +#line 7050 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 7109 +#line 7049 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7112 - [TRAINER_KATELYN_5] = +#line 7052 + [TRAINER_ISAIAH_5] = { -#line 7113 - .trainerName = _("KATELYN"), -#line 7114 +#line 7053 + .trainerName = _("ISAIAH"), +#line 7054 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 7115 - .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, +#line 7055 + .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 7116 -F_TRAINER_FEMALE | -#line 7117 +#line 7057 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 7118 +#line 7058 .doubleBattle = FALSE, -#line 7119 +#line 7059 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7121 +#line 7061 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7123 +#line 7063 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 7122 +#line 7062 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7125 - [TRAINER_NICOLAS_1] = +#line 7065 + [TRAINER_ISOBEL] = { -#line 7126 - .trainerName = _("NICOLAS"), -#line 7127 - .trainerClass = TRAINER_CLASS_DRAGON_TAMER, -#line 7128 - .trainerPic = TRAINER_PIC_DRAGON_TAMER, +#line 7066 + .trainerName = _("ISOBEL"), +#line 7067 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 7068 + .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, .encounterMusic_gender = -#line 7130 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7131 +#line 7069 +F_TRAINER_FEMALE | +#line 7070 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 7071 .doubleBattle = FALSE, -#line 7132 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 7134 - .species = SPECIES_ALTARIA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7136 - .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7135 - .lvl = 37, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 7138 - .species = SPECIES_ALTARIA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7140 - .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7139 - .lvl = 37, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 7142 - [TRAINER_NICOLAS_2] = - { -#line 7143 - .trainerName = _("NICOLAS"), -#line 7144 - .trainerClass = TRAINER_CLASS_DRAGON_TAMER, -#line 7145 - .trainerPic = TRAINER_PIC_DRAGON_TAMER, - .encounterMusic_gender = -#line 7147 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7148 - .doubleBattle = FALSE, -#line 7149 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 7151 - .species = SPECIES_ALTARIA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7153 - .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 7152 - .lvl = 41, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 7155 - .species = SPECIES_ALTARIA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7157 - .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 7156 - .lvl = 41, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 7159 - [TRAINER_NICOLAS_3] = - { -#line 7160 - .trainerName = _("NICOLAS"), -#line 7161 - .trainerClass = TRAINER_CLASS_DRAGON_TAMER, -#line 7162 - .trainerPic = TRAINER_PIC_DRAGON_TAMER, - .encounterMusic_gender = -#line 7164 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7165 - .doubleBattle = FALSE, -#line 7166 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 7168 - .species = SPECIES_ALTARIA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7170 - .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 7169 - .lvl = 44, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 7172 - .species = SPECIES_ALTARIA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7174 - .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 7173 - .lvl = 44, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 7176 - [TRAINER_NICOLAS_4] = - { -#line 7177 - .trainerName = _("NICOLAS"), -#line 7178 - .trainerClass = TRAINER_CLASS_DRAGON_TAMER, -#line 7179 - .trainerPic = TRAINER_PIC_DRAGON_TAMER, - .encounterMusic_gender = -#line 7181 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7182 - .doubleBattle = FALSE, -#line 7183 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 3, - .party = (const struct TrainerMon[]) - { - { -#line 7185 - .species = SPECIES_BAGON, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7187 - .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 7186 - .lvl = 46, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 7189 - .species = SPECIES_ALTARIA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7191 - .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 7190 - .lvl = 46, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 7193 - .species = SPECIES_ALTARIA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7195 - .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 7194 - .lvl = 46, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 7197 - [TRAINER_NICOLAS_5] = - { -#line 7198 - .trainerName = _("NICOLAS"), -#line 7199 - .trainerClass = TRAINER_CLASS_DRAGON_TAMER, -#line 7200 - .trainerPic = TRAINER_PIC_DRAGON_TAMER, - .encounterMusic_gender = -#line 7202 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7203 - .doubleBattle = FALSE, -#line 7204 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 3, - .party = (const struct TrainerMon[]) - { - { -#line 7206 - .species = SPECIES_ALTARIA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7208 - .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 7207 - .lvl = 49, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 7210 - .species = SPECIES_ALTARIA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7212 - .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 7211 - .lvl = 49, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 7214 - .species = SPECIES_SHELGON, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7214 - .heldItem = ITEM_DRAGON_FANG, -#line 7216 - .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 7215 - .lvl = 49, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 7218 - [TRAINER_AARON] = - { -#line 7219 - .trainerName = _("AARON"), -#line 7220 - .trainerClass = TRAINER_CLASS_DRAGON_TAMER, -#line 7221 - .trainerPic = TRAINER_PIC_DRAGON_TAMER, - .encounterMusic_gender = -#line 7223 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7224 - .doubleBattle = FALSE, -#line 7225 +#line 7072 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { +#line 7074 + .species = SPECIES_STARYU, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7076 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 7075 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 7078 + [TRAINER_DONNY] = + { +#line 7079 + .trainerName = _("DONNY"), +#line 7080 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 7081 + .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, + .encounterMusic_gender = +#line 7082 +F_TRAINER_FEMALE | +#line 7083 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 7084 + .doubleBattle = FALSE, +#line 7085 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 7087 + .species = SPECIES_WINGULL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7089 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 7088 + .lvl = 26, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 7091 + .species = SPECIES_STARYU, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7093 + .iv = TRAINER_PARTY_IVS(19, 19, 19, 19, 19, 19), +#line 7092 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 7095 + [TRAINER_TALIA] = + { +#line 7096 + .trainerName = _("TALIA"), +#line 7097 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 7098 + .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, + .encounterMusic_gender = +#line 7099 +F_TRAINER_FEMALE | +#line 7100 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 7101 + .doubleBattle = FALSE, +#line 7102 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 7104 + .species = SPECIES_STARYU, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7106 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 7105 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 7108 + [TRAINER_KATELYN_1] = + { +#line 7109 + .trainerName = _("KATELYN"), +#line 7110 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 7111 + .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, + .encounterMusic_gender = +#line 7112 +F_TRAINER_FEMALE | +#line 7113 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 7114 + .doubleBattle = FALSE, +#line 7115 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 7117 + .species = SPECIES_STARYU, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7119 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 7118 + .lvl = 35, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 7121 + [TRAINER_ALLISON] = + { +#line 7122 + .trainerName = _("ALLISON"), +#line 7123 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 7124 + .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, + .encounterMusic_gender = +#line 7125 +F_TRAINER_FEMALE | +#line 7126 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 7127 + .doubleBattle = FALSE, +#line 7128 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 7130 + .species = SPECIES_WINGULL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7132 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 7131 + .lvl = 27, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 7134 + .species = SPECIES_STARYU, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7136 + .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), +#line 7135 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 7138 + [TRAINER_KATELYN_2] = + { +#line 7139 + .trainerName = _("KATELYN"), +#line 7140 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 7141 + .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, + .encounterMusic_gender = +#line 7142 +F_TRAINER_FEMALE | +#line 7143 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 7144 + .doubleBattle = FALSE, +#line 7145 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 7147 + .species = SPECIES_STARYU, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7149 + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), +#line 7148 + .lvl = 39, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 7151 + [TRAINER_KATELYN_3] = + { +#line 7152 + .trainerName = _("KATELYN"), +#line 7153 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 7154 + .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, + .encounterMusic_gender = +#line 7155 +F_TRAINER_FEMALE | +#line 7156 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 7157 + .doubleBattle = FALSE, +#line 7158 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 7160 + .species = SPECIES_STARYU, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7162 + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), +#line 7161 + .lvl = 42, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 7164 + [TRAINER_KATELYN_4] = + { +#line 7165 + .trainerName = _("KATELYN"), +#line 7166 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 7167 + .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, + .encounterMusic_gender = +#line 7168 +F_TRAINER_FEMALE | +#line 7169 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 7170 + .doubleBattle = FALSE, +#line 7171 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 7173 + .species = SPECIES_STARMIE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7175 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 7174 + .lvl = 45, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 7177 + [TRAINER_KATELYN_5] = + { +#line 7178 + .trainerName = _("KATELYN"), +#line 7179 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 7180 + .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, + .encounterMusic_gender = +#line 7181 +F_TRAINER_FEMALE | +#line 7182 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 7183 + .doubleBattle = FALSE, +#line 7184 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 7186 + .species = SPECIES_STARMIE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7188 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 7187 + .lvl = 48, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 7190 + [TRAINER_NICOLAS_1] = + { +#line 7191 + .trainerName = _("NICOLAS"), +#line 7192 + .trainerClass = TRAINER_CLASS_DRAGON_TAMER, +#line 7193 + .trainerPic = TRAINER_PIC_DRAGON_TAMER, + .encounterMusic_gender = +#line 7195 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 7196 + .doubleBattle = FALSE, +#line 7197 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 7199 + .species = SPECIES_ALTARIA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7201 + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), +#line 7200 + .lvl = 37, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 7203 + .species = SPECIES_ALTARIA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7205 + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), +#line 7204 + .lvl = 37, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 7207 + [TRAINER_NICOLAS_2] = + { +#line 7208 + .trainerName = _("NICOLAS"), +#line 7209 + .trainerClass = TRAINER_CLASS_DRAGON_TAMER, +#line 7210 + .trainerPic = TRAINER_PIC_DRAGON_TAMER, + .encounterMusic_gender = +#line 7212 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 7213 + .doubleBattle = FALSE, +#line 7214 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 7216 + .species = SPECIES_ALTARIA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7218 + .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), +#line 7217 + .lvl = 41, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 7220 + .species = SPECIES_ALTARIA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7222 + .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), +#line 7221 + .lvl = 41, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 7224 + [TRAINER_NICOLAS_3] = + { +#line 7225 + .trainerName = _("NICOLAS"), +#line 7226 + .trainerClass = TRAINER_CLASS_DRAGON_TAMER, #line 7227 + .trainerPic = TRAINER_PIC_DRAGON_TAMER, + .encounterMusic_gender = +#line 7229 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 7230 + .doubleBattle = FALSE, +#line 7231 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 7233 + .species = SPECIES_ALTARIA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7235 + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), +#line 7234 + .lvl = 44, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 7237 + .species = SPECIES_ALTARIA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7239 + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), +#line 7238 + .lvl = 44, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 7241 + [TRAINER_NICOLAS_4] = + { +#line 7242 + .trainerName = _("NICOLAS"), +#line 7243 + .trainerClass = TRAINER_CLASS_DRAGON_TAMER, +#line 7244 + .trainerPic = TRAINER_PIC_DRAGON_TAMER, + .encounterMusic_gender = +#line 7246 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 7247 + .doubleBattle = FALSE, +#line 7248 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 3, + .party = (const struct TrainerMon[]) + { + { +#line 7250 .species = SPECIES_BAGON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7229 +#line 7252 + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), +#line 7251 + .lvl = 46, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 7254 + .species = SPECIES_ALTARIA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7256 + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), +#line 7255 + .lvl = 46, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 7258 + .species = SPECIES_ALTARIA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7260 + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), +#line 7259 + .lvl = 46, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 7262 + [TRAINER_NICOLAS_5] = + { +#line 7263 + .trainerName = _("NICOLAS"), +#line 7264 + .trainerClass = TRAINER_CLASS_DRAGON_TAMER, +#line 7265 + .trainerPic = TRAINER_PIC_DRAGON_TAMER, + .encounterMusic_gender = +#line 7267 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 7268 + .doubleBattle = FALSE, +#line 7269 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 3, + .party = (const struct TrainerMon[]) + { + { +#line 7271 + .species = SPECIES_ALTARIA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7273 + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), +#line 7272 + .lvl = 49, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 7275 + .species = SPECIES_ALTARIA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7277 + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), +#line 7276 + .lvl = 49, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 7279 + .species = SPECIES_SHELGON, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7279 + .heldItem = ITEM_DRAGON_FANG, +#line 7281 + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), +#line 7280 + .lvl = 49, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 7283 + [TRAINER_AARON] = + { +#line 7284 + .trainerName = _("AARON"), +#line 7285 + .trainerClass = TRAINER_CLASS_DRAGON_TAMER, +#line 7286 + .trainerPic = TRAINER_PIC_DRAGON_TAMER, + .encounterMusic_gender = +#line 7288 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 7289 + .doubleBattle = FALSE, +#line 7290 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 7292 + .species = SPECIES_BAGON, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7294 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 7228 +#line 7293 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7230 +#line 7295 MOVE_DRAGON_BREATH, MOVE_HEADBUTT, MOVE_FOCUS_ENERGY, @@ -18150,895 +18150,895 @@ F_TRAINER_FEMALE | }, }, }, -#line 7235 +#line 7300 [TRAINER_PERRY] = { -#line 7236 +#line 7301 .trainerName = _("PERRY"), -#line 7237 +#line 7302 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7238 +#line 7303 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7240 +#line 7305 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7241 +#line 7306 .doubleBattle = FALSE, -#line 7242 +#line 7307 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7244 +#line 7309 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7246 +#line 7311 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7245 +#line 7310 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7248 +#line 7313 [TRAINER_HUGH] = { -#line 7249 +#line 7314 .trainerName = _("HUGH"), -#line 7250 +#line 7315 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7251 +#line 7316 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7253 +#line 7318 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7254 +#line 7319 .doubleBattle = FALSE, -#line 7255 +#line 7320 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7257 +#line 7322 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7259 +#line 7324 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7258 +#line 7323 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7261 +#line 7326 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7263 +#line 7328 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7262 +#line 7327 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7265 +#line 7330 [TRAINER_PHIL] = { -#line 7266 +#line 7331 .trainerName = _("PHIL"), -#line 7267 +#line 7332 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7268 +#line 7333 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7270 +#line 7335 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7271 +#line 7336 .doubleBattle = FALSE, -#line 7272 +#line 7337 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7274 +#line 7339 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7276 +#line 7341 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7275 +#line 7340 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7278 +#line 7343 [TRAINER_JARED] = { -#line 7279 +#line 7344 .trainerName = _("JARED"), -#line 7280 +#line 7345 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7281 +#line 7346 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7283 +#line 7348 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7284 +#line 7349 .doubleBattle = FALSE, -#line 7285 +#line 7350 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 7287 +#line 7352 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7289 +#line 7354 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7288 +#line 7353 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7291 +#line 7356 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7293 +#line 7358 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7292 +#line 7357 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7295 +#line 7360 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7297 +#line 7362 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7296 +#line 7361 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7299 +#line 7364 [TRAINER_HUMBERTO] = { -#line 7300 +#line 7365 .trainerName = _("HUMBERTO"), -#line 7301 +#line 7366 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7302 +#line 7367 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7304 +#line 7369 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7305 +#line 7370 .doubleBattle = FALSE, -#line 7306 +#line 7371 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7308 +#line 7373 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7310 +#line 7375 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 7309 +#line 7374 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7312 +#line 7377 [TRAINER_PRESLEY] = { -#line 7313 +#line 7378 .trainerName = _("PRESLEY"), -#line 7314 +#line 7379 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7315 +#line 7380 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7317 +#line 7382 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7318 +#line 7383 .doubleBattle = FALSE, -#line 7319 +#line 7384 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7321 +#line 7386 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7323 +#line 7388 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7322 +#line 7387 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7325 +#line 7390 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7327 +#line 7392 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7326 +#line 7391 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7329 +#line 7394 [TRAINER_EDWARDO] = { -#line 7330 +#line 7395 .trainerName = _("EDWARDO"), -#line 7331 +#line 7396 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7332 +#line 7397 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7334 +#line 7399 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7335 +#line 7400 .doubleBattle = FALSE, -#line 7336 +#line 7401 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7338 +#line 7403 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7340 +#line 7405 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 7339 +#line 7404 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7342 +#line 7407 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7344 +#line 7409 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 7343 +#line 7408 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7346 +#line 7411 [TRAINER_COLIN] = { -#line 7347 +#line 7412 .trainerName = _("COLIN"), -#line 7348 +#line 7413 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7349 +#line 7414 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7351 +#line 7416 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7352 +#line 7417 .doubleBattle = FALSE, -#line 7353 +#line 7418 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7355 +#line 7420 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7357 +#line 7422 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7356 +#line 7421 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7359 +#line 7424 .species = SPECIES_NATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7361 +#line 7426 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7360 +#line 7425 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7363 +#line 7428 [TRAINER_ROBERT_1] = { -#line 7364 +#line 7429 .trainerName = _("ROBERT"), -#line 7365 +#line 7430 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7366 +#line 7431 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7368 +#line 7433 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7369 +#line 7434 .doubleBattle = FALSE, -#line 7370 +#line 7435 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7372 +#line 7437 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7374 +#line 7439 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7373 +#line 7438 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7376 +#line 7441 [TRAINER_BENNY] = { -#line 7377 +#line 7442 .trainerName = _("BENNY"), -#line 7378 +#line 7443 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7379 +#line 7444 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7381 +#line 7446 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7382 +#line 7447 .doubleBattle = FALSE, -#line 7383 +#line 7448 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 7385 +#line 7450 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7387 +#line 7452 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7386 +#line 7451 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7389 +#line 7454 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7391 +#line 7456 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7390 +#line 7455 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7393 +#line 7458 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7395 +#line 7460 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7394 +#line 7459 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7397 +#line 7462 [TRAINER_CHESTER] = { -#line 7398 +#line 7463 .trainerName = _("CHESTER"), -#line 7399 +#line 7464 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7400 +#line 7465 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7402 +#line 7467 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7403 +#line 7468 .doubleBattle = FALSE, -#line 7404 +#line 7469 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7406 +#line 7471 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7408 +#line 7473 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7407 +#line 7472 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7410 +#line 7475 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7412 +#line 7477 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7411 +#line 7476 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7414 +#line 7479 [TRAINER_ROBERT_2] = { -#line 7415 +#line 7480 .trainerName = _("ROBERT"), -#line 7416 +#line 7481 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7417 +#line 7482 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7419 +#line 7484 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7420 +#line 7485 .doubleBattle = FALSE, -#line 7421 +#line 7486 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7423 +#line 7488 .species = SPECIES_NATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7425 +#line 7490 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 7424 +#line 7489 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7427 +#line 7492 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7429 +#line 7494 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 7428 +#line 7493 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7431 +#line 7496 [TRAINER_ROBERT_3] = { -#line 7432 +#line 7497 .trainerName = _("ROBERT"), -#line 7433 +#line 7498 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7434 +#line 7499 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7436 +#line 7501 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7437 +#line 7502 .doubleBattle = FALSE, -#line 7438 +#line 7503 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7440 +#line 7505 .species = SPECIES_NATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7442 +#line 7507 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 7441 +#line 7506 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7444 +#line 7509 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7446 +#line 7511 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 7445 +#line 7510 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7448 +#line 7513 [TRAINER_ROBERT_4] = { -#line 7449 +#line 7514 .trainerName = _("ROBERT"), -#line 7450 +#line 7515 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7451 +#line 7516 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7453 +#line 7518 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7454 +#line 7519 .doubleBattle = FALSE, -#line 7455 +#line 7520 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7457 +#line 7522 .species = SPECIES_NATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7459 +#line 7524 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 7458 +#line 7523 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7461 +#line 7526 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7463 +#line 7528 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 7462 +#line 7527 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7465 +#line 7530 [TRAINER_ROBERT_5] = { -#line 7466 +#line 7531 .trainerName = _("ROBERT"), -#line 7467 +#line 7532 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7468 +#line 7533 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7470 +#line 7535 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7471 +#line 7536 .doubleBattle = FALSE, -#line 7472 +#line 7537 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7474 +#line 7539 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7476 +#line 7541 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 7475 +#line 7540 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7478 +#line 7543 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7480 +#line 7545 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 7479 +#line 7544 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7482 +#line 7547 [TRAINER_ALEX] = { -#line 7483 +#line 7548 .trainerName = _("ALEX"), -#line 7484 +#line 7549 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7485 +#line 7550 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7487 +#line 7552 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7488 +#line 7553 .doubleBattle = FALSE, -#line 7489 +#line 7554 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7491 +#line 7556 .species = SPECIES_NATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7493 +#line 7558 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 7492 +#line 7557 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7495 +#line 7560 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7497 +#line 7562 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 7496 +#line 7561 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7499 +#line 7564 [TRAINER_BECK] = { -#line 7500 +#line 7565 .trainerName = _("BECK"), -#line 7501 +#line 7566 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 7502 +#line 7567 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 7504 +#line 7569 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7505 +#line 7570 .doubleBattle = FALSE, -#line 7506 +#line 7571 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7508 +#line 7573 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7510 +#line 7575 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7509 +#line 7574 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7512 +#line 7577 [TRAINER_YASU] = { -#line 7513 +#line 7578 .trainerName = _("YASU"), -#line 7514 +#line 7579 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7515 +#line 7580 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 7517 +#line 7582 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7518 +#line 7583 .doubleBattle = FALSE, -#line 7519 +#line 7584 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7521 +#line 7586 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7523 +#line 7588 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7522 +#line 7587 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7525 +#line 7590 [TRAINER_TAKASHI] = { -#line 7526 +#line 7591 .trainerName = _("TAKASHI"), -#line 7527 +#line 7592 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7528 +#line 7593 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 7530 +#line 7595 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7531 +#line 7596 .doubleBattle = FALSE, -#line 7532 +#line 7597 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7534 +#line 7599 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7536 +#line 7601 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7535 +#line 7600 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7538 +#line 7603 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7540 +#line 7605 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7539 +#line 7604 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7542 +#line 7607 [TRAINER_DIANNE] = { -#line 7543 +#line 7608 .trainerName = _("DIANNE"), -#line 7544 +#line 7609 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 7545 +#line 7610 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 7546 +#line 7611 F_TRAINER_FEMALE | -#line 7547 +#line 7612 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 7548 +#line 7613 .items = { ITEM_FULL_RESTORE }, -#line 7549 +#line 7614 .doubleBattle = FALSE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7551 +#line 7616 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7553 +#line 7618 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7552 +#line 7617 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7554 +#line 7619 MOVE_SKILL_SWAP, MOVE_EARTHQUAKE, }, }, { -#line 7557 +#line 7622 .species = SPECIES_LANTURN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7559 +#line 7624 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7558 +#line 7623 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7560 +#line 7625 MOVE_THUNDERBOLT, MOVE_EARTHQUAKE, }, }, }, }, -#line 7563 +#line 7628 [TRAINER_JANI] = { -#line 7564 +#line 7629 .trainerName = _("JANI"), -#line 7565 +#line 7630 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 7566 +#line 7631 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 7567 +#line 7632 F_TRAINER_FEMALE | -#line 7568 +#line 7633 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 7569 +#line 7634 .doubleBattle = FALSE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7571 +#line 7636 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7573 +#line 7638 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7572 +#line 7637 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7575 +#line 7640 [TRAINER_LAO_1] = { -#line 7576 +#line 7641 .trainerName = _("LAO"), -#line 7577 +#line 7642 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7578 +#line 7643 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 7580 +#line 7645 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7581 +#line 7646 .doubleBattle = FALSE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 7583 +#line 7648 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7585 +#line 7650 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7584 +#line 7649 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7586 +#line 7651 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SMOG, @@ -19046,17 +19046,17 @@ F_TRAINER_FEMALE | }, }, { -#line 7591 +#line 7656 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7593 +#line 7658 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7592 +#line 7657 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7594 +#line 7659 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SMOG, @@ -19064,17 +19064,17 @@ F_TRAINER_FEMALE | }, }, { -#line 7599 +#line 7664 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7601 +#line 7666 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7600 +#line 7665 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7602 +#line 7667 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, @@ -19083,272 +19083,115 @@ F_TRAINER_FEMALE | }, }, }, -#line 7607 +#line 7672 [TRAINER_LUNG] = { -#line 7608 +#line 7673 .trainerName = _("LUNG"), -#line 7609 +#line 7674 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7610 +#line 7675 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 7612 +#line 7677 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7613 +#line 7678 .doubleBattle = FALSE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7615 +#line 7680 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7617 +#line 7682 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7616 +#line 7681 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7619 - .species = SPECIES_NINJASK, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7621 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7620 - .lvl = 18, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 7623 - [TRAINER_LAO_2] = - { -#line 7624 - .trainerName = _("LAO"), -#line 7625 - .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7626 - .trainerPic = TRAINER_PIC_NINJA_BOY, - .encounterMusic_gender = -#line 7628 - TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7629 - .doubleBattle = FALSE, - .partySize = 4, - .party = (const struct TrainerMon[]) - { - { -#line 7631 - .species = SPECIES_KOFFING, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7633 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7632 - .lvl = 24, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 7634 - MOVE_POISON_GAS, - MOVE_TACKLE, - MOVE_SLUDGE, - MOVE_SELF_DESTRUCT, - }, - }, - { -#line 7639 - .species = SPECIES_KOFFING, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7641 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7640 - .lvl = 24, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 7642 - MOVE_POISON_GAS, - MOVE_TACKLE, - MOVE_SLUDGE, - }, - }, - { -#line 7646 - .species = SPECIES_KOFFING, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7648 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7647 - .lvl = 24, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 7649 - MOVE_POISON_GAS, - MOVE_TACKLE, - MOVE_SLUDGE, - MOVE_SELF_DESTRUCT, - }, - }, - { -#line 7654 - .species = SPECIES_KOFFING, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7656 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7655 - .lvl = 26, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 7657 - MOVE_TACKLE, - MOVE_SLUDGE, - }, - }, - }, - }, -#line 7660 - [TRAINER_LAO_3] = - { -#line 7661 - .trainerName = _("LAO"), -#line 7662 - .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7663 - .trainerPic = TRAINER_PIC_NINJA_BOY, - .encounterMusic_gender = -#line 7665 - TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7666 - .doubleBattle = FALSE, - .partySize = 4, - .party = (const struct TrainerMon[]) - { - { -#line 7668 - .species = SPECIES_KOFFING, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7670 - .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 7669 - .lvl = 27, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 7671 - MOVE_POISON_GAS, - MOVE_TACKLE, - MOVE_SLUDGE, - MOVE_SELF_DESTRUCT, - }, - }, - { -#line 7676 - .species = SPECIES_KOFFING, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7678 - .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 7677 - .lvl = 27, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 7679 - MOVE_POISON_GAS, - MOVE_TACKLE, - MOVE_SLUDGE, - MOVE_SELF_DESTRUCT, - }, - }, - { #line 7684 - .species = SPECIES_KOFFING, + .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, #line 7686 - .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 7685 - .lvl = 27, + .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 7687 - MOVE_POISON_GAS, - MOVE_TACKLE, - MOVE_SLUDGE, - }, - }, - { -#line 7691 - .species = SPECIES_KOFFING, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7693 - .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 7692 - .lvl = 29, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 7694 - MOVE_TACKLE, - MOVE_SLUDGE, - }, }, }, }, -#line 7697 - [TRAINER_LAO_4] = +#line 7688 + [TRAINER_LAO_2] = { -#line 7698 +#line 7689 .trainerName = _("LAO"), -#line 7699 +#line 7690 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7700 +#line 7691 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 7702 +#line 7693 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7703 +#line 7694 .doubleBattle = FALSE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 7705 +#line 7696 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7707 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 7706 - .lvl = 30, +#line 7698 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 7697 + .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7708 +#line 7699 + MOVE_POISON_GAS, + MOVE_TACKLE, + MOVE_SLUDGE, + MOVE_SELF_DESTRUCT, + }, + }, + { +#line 7704 + .species = SPECIES_KOFFING, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7706 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 7705 + .lvl = 24, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 7707 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, }, }, { -#line 7712 +#line 7711 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7714 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), #line 7713 - .lvl = 30, + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 7712 + .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7715 +#line 7714 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, + MOVE_SELF_DESTRUCT, }, }, { @@ -19356,520 +19199,677 @@ F_TRAINER_FEMALE | .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, #line 7721 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 7720 - .lvl = 30, + .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { #line 7722 - MOVE_POISON_GAS, - MOVE_TACKLE, - MOVE_SLUDGE, - }, - }, - { -#line 7726 - .species = SPECIES_KOFFING, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 7728 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 7727 - .lvl = 32, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 7729 MOVE_TACKLE, MOVE_SLUDGE, }, }, }, }, -#line 7732 - [TRAINER_LAO_5] = +#line 7725 + [TRAINER_LAO_3] = { -#line 7733 +#line 7726 .trainerName = _("LAO"), -#line 7734 +#line 7727 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 7735 +#line 7728 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 7737 +#line 7730 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 7738 +#line 7731 .doubleBattle = FALSE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 7740 +#line 7733 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7742 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 7735 + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), +#line 7734 + .lvl = 27, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 7736 + MOVE_POISON_GAS, + MOVE_TACKLE, + MOVE_SLUDGE, + MOVE_SELF_DESTRUCT, + }, + }, + { #line 7741 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { + .species = SPECIES_KOFFING, + .gender = TRAINER_MON_RANDOM_GENDER, #line 7743 + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), +#line 7742 + .lvl = 27, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 7744 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, + MOVE_SELF_DESTRUCT, }, }, { -#line 7747 - .species = SPECIES_KOFFING, - .gender = TRAINER_MON_RANDOM_GENDER, #line 7749 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 7748 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 7750 - MOVE_POISON_GAS, - MOVE_TACKLE, - MOVE_SLUDGE, - MOVE_SELF_DESTRUCT, - }, - }, - { -#line 7755 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7757 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 7756 - .lvl = 33, +#line 7751 + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), +#line 7750 + .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7758 +#line 7752 MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, - MOVE_SELF_DESTRUCT, }, }, { -#line 7763 - .species = SPECIES_WEEZING, +#line 7756 + .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7763 - .heldItem = ITEM_SMOKE_BALL, -#line 7765 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 7764 - .lvl = 35, +#line 7758 + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), +#line 7757 + .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7766 +#line 7759 MOVE_TACKLE, MOVE_SLUDGE, }, }, }, }, -#line 7769 - [TRAINER_JOCELYN] = +#line 7762 + [TRAINER_LAO_4] = { -#line 7770 - .trainerName = _("JOCELYN"), -#line 7771 - .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7772 - .trainerPic = TRAINER_PIC_BATTLE_GIRL, +#line 7763 + .trainerName = _("LAO"), +#line 7764 + .trainerClass = TRAINER_CLASS_NINJA_BOY, +#line 7765 + .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 7773 -F_TRAINER_FEMALE | -#line 7774 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7775 +#line 7767 + TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, +#line 7768 .doubleBattle = FALSE, -#line 7776 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, + .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 7778 - .species = SPECIES_MEDITITE, +#line 7770 + .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7780 - .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 7779 - .lvl = 13, +#line 7772 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 7771 + .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 7773 + MOVE_POISON_GAS, + MOVE_TACKLE, + MOVE_SLUDGE, }, - }, - }, -#line 7782 - [TRAINER_LAURA] = - { -#line 7783 - .trainerName = _("LAURA"), + }, + { +#line 7777 + .species = SPECIES_KOFFING, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7779 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 7778 + .lvl = 30, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 7780 + MOVE_POISON_GAS, + MOVE_TACKLE, + MOVE_SLUDGE, + }, + }, + { #line 7784 - .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7785 - .trainerPic = TRAINER_PIC_BATTLE_GIRL, - .encounterMusic_gender = + .species = SPECIES_KOFFING, + .gender = TRAINER_MON_RANDOM_GENDER, #line 7786 -F_TRAINER_FEMALE | + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 7785 + .lvl = 30, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { #line 7787 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7788 - .doubleBattle = FALSE, -#line 7789 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { + MOVE_POISON_GAS, + MOVE_TACKLE, + MOVE_SLUDGE, + }, + }, { #line 7791 - .species = SPECIES_MEDITITE, + .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, #line 7793 - .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), #line 7792 + .lvl = 32, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 7794 + MOVE_TACKLE, + MOVE_SLUDGE, + }, + }, + }, + }, +#line 7797 + [TRAINER_LAO_5] = + { +#line 7798 + .trainerName = _("LAO"), +#line 7799 + .trainerClass = TRAINER_CLASS_NINJA_BOY, +#line 7800 + .trainerPic = TRAINER_PIC_NINJA_BOY, + .encounterMusic_gender = +#line 7802 + TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, +#line 7803 + .doubleBattle = FALSE, + .partySize = 4, + .party = (const struct TrainerMon[]) + { + { +#line 7805 + .species = SPECIES_KOFFING, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7807 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 7806 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 7808 + MOVE_POISON_GAS, + MOVE_TACKLE, + MOVE_SLUDGE, + }, + }, + { +#line 7812 + .species = SPECIES_KOFFING, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7814 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 7813 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 7815 + MOVE_POISON_GAS, + MOVE_TACKLE, + MOVE_SLUDGE, + MOVE_SELF_DESTRUCT, + }, + }, + { +#line 7820 + .species = SPECIES_KOFFING, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7822 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 7821 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 7823 + MOVE_POISON_GAS, + MOVE_TACKLE, + MOVE_SLUDGE, + MOVE_SELF_DESTRUCT, + }, + }, + { +#line 7828 + .species = SPECIES_WEEZING, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7828 + .heldItem = ITEM_SMOKE_BALL, +#line 7830 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 7829 + .lvl = 35, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 7831 + MOVE_TACKLE, + MOVE_SLUDGE, + }, + }, + }, + }, +#line 7834 + [TRAINER_JOCELYN] = + { +#line 7835 + .trainerName = _("JOCELYN"), +#line 7836 + .trainerClass = TRAINER_CLASS_BATTLE_GIRL, +#line 7837 + .trainerPic = TRAINER_PIC_BATTLE_GIRL, + .encounterMusic_gender = +#line 7838 +F_TRAINER_FEMALE | +#line 7839 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 7840 + .doubleBattle = FALSE, +#line 7841 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 7843 + .species = SPECIES_MEDITITE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7845 + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), +#line 7844 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7795 +#line 7847 + [TRAINER_LAURA] = + { +#line 7848 + .trainerName = _("LAURA"), +#line 7849 + .trainerClass = TRAINER_CLASS_BATTLE_GIRL, +#line 7850 + .trainerPic = TRAINER_PIC_BATTLE_GIRL, + .encounterMusic_gender = +#line 7851 +F_TRAINER_FEMALE | +#line 7852 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 7853 + .doubleBattle = FALSE, +#line 7854 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 7856 + .species = SPECIES_MEDITITE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 7858 + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), +#line 7857 + .lvl = 13, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 7860 [TRAINER_CYNDY_1] = { -#line 7796 +#line 7861 .trainerName = _("CYNDY"), -#line 7797 +#line 7862 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7798 +#line 7863 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7799 +#line 7864 F_TRAINER_FEMALE | -#line 7800 +#line 7865 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7801 +#line 7866 .doubleBattle = FALSE, -#line 7802 +#line 7867 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7804 +#line 7869 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7806 +#line 7871 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7805 +#line 7870 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7808 +#line 7873 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7810 +#line 7875 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7809 +#line 7874 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7812 +#line 7877 [TRAINER_CORA] = { -#line 7813 +#line 7878 .trainerName = _("CORA"), -#line 7814 +#line 7879 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7815 +#line 7880 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7816 +#line 7881 F_TRAINER_FEMALE | -#line 7817 +#line 7882 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7818 +#line 7883 .doubleBattle = FALSE, -#line 7819 +#line 7884 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7821 +#line 7886 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7823 +#line 7888 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7822 +#line 7887 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7825 +#line 7890 [TRAINER_PAULA] = { -#line 7826 +#line 7891 .trainerName = _("PAULA"), -#line 7827 +#line 7892 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7828 +#line 7893 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7829 +#line 7894 F_TRAINER_FEMALE | -#line 7830 +#line 7895 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7831 +#line 7896 .doubleBattle = FALSE, -#line 7832 +#line 7897 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7834 +#line 7899 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7836 +#line 7901 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 7835 +#line 7900 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7838 +#line 7903 [TRAINER_CYNDY_2] = { -#line 7839 +#line 7904 .trainerName = _("CYNDY"), -#line 7840 +#line 7905 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7841 +#line 7906 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7842 +#line 7907 F_TRAINER_FEMALE | -#line 7843 +#line 7908 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7844 +#line 7909 .doubleBattle = FALSE, -#line 7845 +#line 7910 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7847 +#line 7912 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7849 +#line 7914 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 7848 +#line 7913 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7851 +#line 7916 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7853 +#line 7918 .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 7852 +#line 7917 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7855 +#line 7920 [TRAINER_CYNDY_3] = { -#line 7856 +#line 7921 .trainerName = _("CYNDY"), -#line 7857 +#line 7922 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7858 +#line 7923 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7859 +#line 7924 F_TRAINER_FEMALE | -#line 7860 +#line 7925 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7861 +#line 7926 .doubleBattle = FALSE, -#line 7862 +#line 7927 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7864 +#line 7929 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7866 +#line 7931 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 7865 +#line 7930 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7868 +#line 7933 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7870 +#line 7935 .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 7869 +#line 7934 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7872 +#line 7937 [TRAINER_CYNDY_4] = { -#line 7873 +#line 7938 .trainerName = _("CYNDY"), -#line 7874 +#line 7939 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7875 +#line 7940 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7876 +#line 7941 F_TRAINER_FEMALE | -#line 7877 +#line 7942 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7878 +#line 7943 .doubleBattle = FALSE, -#line 7879 +#line 7944 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7881 +#line 7946 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7883 +#line 7948 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 7882 +#line 7947 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7885 +#line 7950 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7887 +#line 7952 .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 7886 +#line 7951 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7889 +#line 7954 [TRAINER_CYNDY_5] = { -#line 7890 +#line 7955 .trainerName = _("CYNDY"), -#line 7891 +#line 7956 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 7892 +#line 7957 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 7893 +#line 7958 F_TRAINER_FEMALE | -#line 7894 +#line 7959 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 7895 +#line 7960 .doubleBattle = FALSE, -#line 7896 +#line 7961 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7898 +#line 7963 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7900 +#line 7965 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 7899 +#line 7964 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7902 +#line 7967 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7904 +#line 7969 .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 7903 +#line 7968 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7906 +#line 7971 [TRAINER_MADELINE_1] = { -#line 7907 +#line 7972 .trainerName = _("MADELINE"), -#line 7908 +#line 7973 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 7909 +#line 7974 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 7910 +#line 7975 F_TRAINER_FEMALE | -#line 7911 +#line 7976 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 7912 +#line 7977 .doubleBattle = FALSE, -#line 7913 +#line 7978 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7915 +#line 7980 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7917 +#line 7982 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7916 +#line 7981 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7918 +#line 7983 MOVE_EMBER, MOVE_TACKLE, MOVE_MAGNITUDE, @@ -19878,84 +19878,84 @@ F_TRAINER_FEMALE | }, }, }, -#line 7923 +#line 7988 [TRAINER_CLARISSA] = { -#line 7924 +#line 7989 .trainerName = _("CLARISSA"), -#line 7925 +#line 7990 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 7926 +#line 7991 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 7927 +#line 7992 F_TRAINER_FEMALE | -#line 7928 +#line 7993 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 7929 +#line 7994 .doubleBattle = FALSE, -#line 7930 +#line 7995 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 7932 +#line 7997 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7934 +#line 7999 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7933 +#line 7998 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 7936 +#line 8001 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7938 +#line 8003 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 7937 +#line 8002 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 7940 +#line 8005 [TRAINER_ANGELICA] = { -#line 7941 +#line 8006 .trainerName = _("ANGELICA"), -#line 7942 +#line 8007 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 7943 +#line 8008 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 7944 +#line 8009 F_TRAINER_FEMALE | -#line 7945 +#line 8010 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 7946 +#line 8011 .doubleBattle = FALSE, -#line 7947 +#line 8012 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7949 +#line 8014 .species = SPECIES_CASTFORM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7951 +#line 8016 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 7950 +#line 8015 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7952 +#line 8017 MOVE_RAIN_DANCE, MOVE_WEATHER_BALL, MOVE_THUNDER, @@ -19964,39 +19964,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 7957 +#line 8022 [TRAINER_MADELINE_2] = { -#line 7958 +#line 8023 .trainerName = _("MADELINE"), -#line 7959 +#line 8024 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 7960 +#line 8025 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 7961 +#line 8026 F_TRAINER_FEMALE | -#line 7962 +#line 8027 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 7963 +#line 8028 .doubleBattle = FALSE, -#line 7964 +#line 8029 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7966 +#line 8031 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7968 +#line 8033 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 7967 +#line 8032 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7969 +#line 8034 MOVE_EMBER, MOVE_TACKLE, MOVE_MAGNITUDE, @@ -20005,39 +20005,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 7974 +#line 8039 [TRAINER_MADELINE_3] = { -#line 7975 +#line 8040 .trainerName = _("MADELINE"), -#line 7976 +#line 8041 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 7977 +#line 8042 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 7978 +#line 8043 F_TRAINER_FEMALE | -#line 7979 +#line 8044 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 7980 +#line 8045 .doubleBattle = FALSE, -#line 7981 +#line 8046 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 7983 +#line 8048 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 7985 +#line 8050 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 7984 +#line 8049 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 7986 +#line 8051 MOVE_EMBER, MOVE_TAKE_DOWN, MOVE_MAGNITUDE, @@ -20046,39 +20046,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 7991 +#line 8056 [TRAINER_MADELINE_4] = { -#line 7992 +#line 8057 .trainerName = _("MADELINE"), -#line 7993 +#line 8058 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 7994 +#line 8059 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 7995 +#line 8060 F_TRAINER_FEMALE | -#line 7996 +#line 8061 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 7997 +#line 8062 .doubleBattle = FALSE, -#line 7998 +#line 8063 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8000 +#line 8065 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8002 +#line 8067 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 8001 +#line 8066 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8003 +#line 8068 MOVE_LEECH_SEED, MOVE_MEGA_DRAIN, MOVE_GRASS_WHISTLE, @@ -20086,17 +20086,17 @@ F_TRAINER_FEMALE | }, }, { -#line 8008 +#line 8073 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8010 +#line 8075 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 8009 +#line 8074 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8011 +#line 8076 MOVE_FLAMETHROWER, MOVE_TAKE_DOWN, MOVE_MAGNITUDE, @@ -20105,39 +20105,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 8016 +#line 8081 [TRAINER_MADELINE_5] = { -#line 8017 +#line 8082 .trainerName = _("MADELINE"), -#line 8018 +#line 8083 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 8019 +#line 8084 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 8020 +#line 8085 F_TRAINER_FEMALE | -#line 8021 +#line 8086 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 8022 +#line 8087 .doubleBattle = FALSE, -#line 8023 +#line 8088 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8025 +#line 8090 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8027 +#line 8092 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 8026 +#line 8091 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8028 +#line 8093 MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_SOLAR_BEAM, @@ -20145,17 +20145,17 @@ F_TRAINER_FEMALE | }, }, { -#line 8033 +#line 8098 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8035 +#line 8100 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 8034 +#line 8099 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8036 +#line 8101 MOVE_FLAMETHROWER, MOVE_TAKE_DOWN, MOVE_EARTHQUAKE, @@ -20164,1145 +20164,1145 @@ F_TRAINER_FEMALE | }, }, }, -#line 8041 +#line 8106 [TRAINER_BEVERLY] = { -#line 8042 +#line 8107 .trainerName = _("BEVERLY"), -#line 8043 +#line 8108 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8044 +#line 8109 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8045 +#line 8110 F_TRAINER_FEMALE | -#line 8046 +#line 8111 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8047 +#line 8112 .doubleBattle = FALSE, -#line 8048 +#line 8113 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8050 +#line 8115 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8052 +#line 8117 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8051 +#line 8116 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8054 +#line 8119 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8056 +#line 8121 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8055 +#line 8120 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8058 +#line 8123 [TRAINER_IMANI] = { -#line 8059 +#line 8124 .trainerName = _("IMANI"), -#line 8060 +#line 8125 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8061 +#line 8126 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8062 +#line 8127 F_TRAINER_FEMALE | -#line 8063 +#line 8128 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8064 +#line 8129 .doubleBattle = FALSE, -#line 8065 +#line 8130 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8067 +#line 8132 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8069 +#line 8134 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8068 +#line 8133 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8071 +#line 8136 [TRAINER_KYLA] = { -#line 8072 +#line 8137 .trainerName = _("KYLA"), -#line 8073 +#line 8138 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8074 +#line 8139 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8075 +#line 8140 F_TRAINER_FEMALE | -#line 8076 +#line 8141 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8077 +#line 8142 .doubleBattle = FALSE, -#line 8078 +#line 8143 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8080 +#line 8145 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8082 +#line 8147 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8081 +#line 8146 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8084 +#line 8149 [TRAINER_DENISE] = { -#line 8085 +#line 8150 .trainerName = _("DENISE"), -#line 8086 +#line 8151 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8087 +#line 8152 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8088 +#line 8153 F_TRAINER_FEMALE | -#line 8089 +#line 8154 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8090 +#line 8155 .doubleBattle = FALSE, -#line 8091 +#line 8156 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8093 +#line 8158 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8095 +#line 8160 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8094 +#line 8159 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8097 +#line 8162 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8099 +#line 8164 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8098 +#line 8163 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8101 +#line 8166 [TRAINER_BETH] = { -#line 8102 +#line 8167 .trainerName = _("BETH"), -#line 8103 +#line 8168 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8104 +#line 8169 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8105 +#line 8170 F_TRAINER_FEMALE | -#line 8106 +#line 8171 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8107 +#line 8172 .doubleBattle = FALSE, -#line 8108 +#line 8173 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8110 +#line 8175 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8112 +#line 8177 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8111 +#line 8176 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8114 +#line 8179 [TRAINER_TARA] = { -#line 8115 +#line 8180 .trainerName = _("TARA"), -#line 8116 +#line 8181 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8117 +#line 8182 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8118 +#line 8183 F_TRAINER_FEMALE | -#line 8119 +#line 8184 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8120 +#line 8185 .doubleBattle = FALSE, -#line 8121 +#line 8186 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8123 +#line 8188 .species = SPECIES_HORSEA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8125 +#line 8190 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8124 +#line 8189 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8127 +#line 8192 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8129 +#line 8194 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8128 +#line 8193 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8131 +#line 8196 [TRAINER_MISSY] = { -#line 8132 +#line 8197 .trainerName = _("MISSY"), -#line 8133 +#line 8198 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8134 +#line 8199 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8135 +#line 8200 F_TRAINER_FEMALE | -#line 8136 +#line 8201 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8137 +#line 8202 .doubleBattle = FALSE, -#line 8138 +#line 8203 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8140 +#line 8205 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8142 +#line 8207 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8141 +#line 8206 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8144 +#line 8209 [TRAINER_ALICE] = { -#line 8145 +#line 8210 .trainerName = _("ALICE"), -#line 8146 +#line 8211 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8147 +#line 8212 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8148 +#line 8213 F_TRAINER_FEMALE | -#line 8149 +#line 8214 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8150 +#line 8215 .doubleBattle = FALSE, -#line 8151 +#line 8216 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8153 +#line 8218 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8155 +#line 8220 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8154 +#line 8219 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8157 +#line 8222 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8159 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8158 - .lvl = 24, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 8161 - .species = SPECIES_GOLDEEN, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 8163 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8162 - .lvl = 24, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 8165 - [TRAINER_JENNY_1] = - { -#line 8166 - .trainerName = _("JENNY"), -#line 8167 - .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8168 - .trainerPic = TRAINER_PIC_SWIMMER_F, - .encounterMusic_gender = -#line 8169 -F_TRAINER_FEMALE | -#line 8170 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8171 - .doubleBattle = FALSE, -#line 8172 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 8174 - .species = SPECIES_WAILMER, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 8176 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8175 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 8178 - [TRAINER_GRACE] = - { -#line 8179 - .trainerName = _("GRACE"), -#line 8180 - .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8181 - .trainerPic = TRAINER_PIC_SWIMMER_F, - .encounterMusic_gender = -#line 8182 -F_TRAINER_FEMALE | -#line 8183 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8184 - .doubleBattle = FALSE, -#line 8185 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 8187 - .species = SPECIES_MARILL, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 8189 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8188 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 8191 - [TRAINER_TANYA] = - { -#line 8192 - .trainerName = _("TANYA"), -#line 8193 - .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8194 - .trainerPic = TRAINER_PIC_SWIMMER_F, - .encounterMusic_gender = -#line 8195 -F_TRAINER_FEMALE | -#line 8196 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8197 - .doubleBattle = FALSE, -#line 8198 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 8200 - .species = SPECIES_LUVDISC, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 8202 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8201 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 8204 - [TRAINER_SHARON] = - { -#line 8205 - .trainerName = _("SHARON"), -#line 8206 - .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8207 - .trainerPic = TRAINER_PIC_SWIMMER_F, - .encounterMusic_gender = -#line 8208 -F_TRAINER_FEMALE | -#line 8209 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8210 - .doubleBattle = FALSE, -#line 8211 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 8213 - .species = SPECIES_SEAKING, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 8215 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8214 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 8217 - [TRAINER_NIKKI] = - { -#line 8218 - .trainerName = _("NIKKI"), -#line 8219 - .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8220 - .trainerPic = TRAINER_PIC_SWIMMER_F, - .encounterMusic_gender = -#line 8221 -F_TRAINER_FEMALE | -#line 8222 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8223 - .doubleBattle = FALSE, #line 8224 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 8223 + .lvl = 24, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, { #line 8226 - .species = SPECIES_MARILL, + .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, #line 8228 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 8227 + .lvl = 24, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 8230 + [TRAINER_JENNY_1] = + { +#line 8231 + .trainerName = _("JENNY"), +#line 8232 + .trainerClass = TRAINER_CLASS_SWIMMER_F, +#line 8233 + .trainerPic = TRAINER_PIC_SWIMMER_F, + .encounterMusic_gender = +#line 8234 +F_TRAINER_FEMALE | +#line 8235 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 8236 + .doubleBattle = FALSE, +#line 8237 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 8239 + .species = SPECIES_WAILMER, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 8241 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 8240 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 8243 + [TRAINER_GRACE] = + { +#line 8244 + .trainerName = _("GRACE"), +#line 8245 + .trainerClass = TRAINER_CLASS_SWIMMER_F, +#line 8246 + .trainerPic = TRAINER_PIC_SWIMMER_F, + .encounterMusic_gender = +#line 8247 +F_TRAINER_FEMALE | +#line 8248 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 8249 + .doubleBattle = FALSE, +#line 8250 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 8252 + .species = SPECIES_MARILL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 8254 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 8253 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 8256 + [TRAINER_TANYA] = + { +#line 8257 + .trainerName = _("TANYA"), +#line 8258 + .trainerClass = TRAINER_CLASS_SWIMMER_F, +#line 8259 + .trainerPic = TRAINER_PIC_SWIMMER_F, + .encounterMusic_gender = +#line 8260 +F_TRAINER_FEMALE | +#line 8261 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 8262 + .doubleBattle = FALSE, +#line 8263 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 8265 + .species = SPECIES_LUVDISC, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 8267 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 8266 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 8269 + [TRAINER_SHARON] = + { +#line 8270 + .trainerName = _("SHARON"), +#line 8271 + .trainerClass = TRAINER_CLASS_SWIMMER_F, +#line 8272 + .trainerPic = TRAINER_PIC_SWIMMER_F, + .encounterMusic_gender = +#line 8273 +F_TRAINER_FEMALE | +#line 8274 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 8275 + .doubleBattle = FALSE, +#line 8276 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 8278 + .species = SPECIES_SEAKING, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 8280 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 8279 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 8282 + [TRAINER_NIKKI] = + { +#line 8283 + .trainerName = _("NIKKI"), +#line 8284 + .trainerClass = TRAINER_CLASS_SWIMMER_F, +#line 8285 + .trainerPic = TRAINER_PIC_SWIMMER_F, + .encounterMusic_gender = +#line 8286 +F_TRAINER_FEMALE | +#line 8287 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 8288 + .doubleBattle = FALSE, +#line 8289 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 8291 + .species = SPECIES_MARILL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 8293 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 8292 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8230 +#line 8295 .species = SPECIES_SPHEAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8232 +#line 8297 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8231 +#line 8296 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8234 +#line 8299 [TRAINER_BRENDA] = { -#line 8235 +#line 8300 .trainerName = _("BRENDA"), -#line 8236 +#line 8301 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8237 +#line 8302 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8238 +#line 8303 F_TRAINER_FEMALE | -#line 8239 +#line 8304 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8240 +#line 8305 .doubleBattle = FALSE, -#line 8241 +#line 8306 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8243 +#line 8308 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8245 +#line 8310 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8244 +#line 8309 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8247 +#line 8312 [TRAINER_KATIE] = { -#line 8248 +#line 8313 .trainerName = _("KATIE"), -#line 8249 +#line 8314 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8250 +#line 8315 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8251 +#line 8316 F_TRAINER_FEMALE | -#line 8252 +#line 8317 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8253 +#line 8318 .doubleBattle = FALSE, -#line 8254 +#line 8319 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8256 +#line 8321 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8258 +#line 8323 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8257 +#line 8322 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8260 +#line 8325 .species = SPECIES_SPHEAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8262 +#line 8327 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8261 +#line 8326 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8264 +#line 8329 [TRAINER_SUSIE] = { -#line 8265 +#line 8330 .trainerName = _("SUSIE"), -#line 8266 +#line 8331 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8267 +#line 8332 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8268 +#line 8333 F_TRAINER_FEMALE | -#line 8269 +#line 8334 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8270 +#line 8335 .doubleBattle = FALSE, -#line 8271 +#line 8336 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8273 +#line 8338 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8275 +#line 8340 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8274 +#line 8339 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8277 +#line 8342 [TRAINER_KARA] = { -#line 8278 +#line 8343 .trainerName = _("KARA"), -#line 8279 +#line 8344 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8280 +#line 8345 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8281 +#line 8346 F_TRAINER_FEMALE | -#line 8282 +#line 8347 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8283 +#line 8348 .doubleBattle = FALSE, -#line 8284 +#line 8349 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8286 +#line 8351 .species = SPECIES_SEAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8288 +#line 8353 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8287 +#line 8352 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8290 +#line 8355 [TRAINER_DANA] = { -#line 8291 +#line 8356 .trainerName = _("DANA"), -#line 8292 +#line 8357 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8293 +#line 8358 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8294 +#line 8359 F_TRAINER_FEMALE | -#line 8295 +#line 8360 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8296 +#line 8361 .doubleBattle = FALSE, -#line 8297 +#line 8362 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8299 +#line 8364 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8301 +#line 8366 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8300 +#line 8365 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8303 +#line 8368 [TRAINER_SIENNA] = { -#line 8304 +#line 8369 .trainerName = _("SIENNA"), -#line 8305 +#line 8370 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8306 +#line 8371 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8307 +#line 8372 F_TRAINER_FEMALE | -#line 8308 +#line 8373 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8309 +#line 8374 .doubleBattle = FALSE, -#line 8310 +#line 8375 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8312 +#line 8377 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8314 +#line 8379 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8313 +#line 8378 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8316 +#line 8381 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8318 +#line 8383 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8317 +#line 8382 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8320 +#line 8385 [TRAINER_DEBRA] = { -#line 8321 +#line 8386 .trainerName = _("DEBRA"), -#line 8322 +#line 8387 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8323 +#line 8388 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8324 +#line 8389 F_TRAINER_FEMALE | -#line 8325 +#line 8390 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8326 +#line 8391 .doubleBattle = FALSE, -#line 8327 +#line 8392 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8329 +#line 8394 .species = SPECIES_SEAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8331 +#line 8396 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8330 +#line 8395 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8333 +#line 8398 [TRAINER_LINDA] = { -#line 8334 +#line 8399 .trainerName = _("LINDA"), -#line 8335 +#line 8400 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8336 +#line 8401 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8337 +#line 8402 F_TRAINER_FEMALE | -#line 8338 +#line 8403 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8339 +#line 8404 .doubleBattle = FALSE, -#line 8340 +#line 8405 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8342 +#line 8407 .species = SPECIES_HORSEA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8344 +#line 8409 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8343 +#line 8408 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8346 +#line 8411 .species = SPECIES_SEADRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8348 +#line 8413 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8347 +#line 8412 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8350 +#line 8415 [TRAINER_KAYLEE] = { -#line 8351 +#line 8416 .trainerName = _("KAYLEE"), -#line 8352 +#line 8417 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8353 +#line 8418 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8354 +#line 8419 F_TRAINER_FEMALE | -#line 8355 +#line 8420 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8356 +#line 8421 .doubleBattle = FALSE, -#line 8357 +#line 8422 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8359 +#line 8424 .species = SPECIES_LANTURN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8361 +#line 8426 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8360 +#line 8425 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8363 +#line 8428 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8365 +#line 8430 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8364 +#line 8429 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8367 +#line 8432 [TRAINER_LAUREL] = { -#line 8368 +#line 8433 .trainerName = _("LAUREL"), -#line 8369 +#line 8434 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8370 +#line 8435 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8371 +#line 8436 F_TRAINER_FEMALE | -#line 8372 +#line 8437 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8373 +#line 8438 .doubleBattle = FALSE, -#line 8374 +#line 8439 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8376 +#line 8441 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8378 +#line 8443 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8377 +#line 8442 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8380 +#line 8445 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8382 +#line 8447 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8381 +#line 8446 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8384 +#line 8449 [TRAINER_CARLEE] = { -#line 8385 +#line 8450 .trainerName = _("CARLEE"), -#line 8386 +#line 8451 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8387 +#line 8452 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8388 +#line 8453 F_TRAINER_FEMALE | -#line 8389 +#line 8454 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8390 +#line 8455 .doubleBattle = FALSE, -#line 8391 +#line 8456 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8393 +#line 8458 .species = SPECIES_SEAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8395 +#line 8460 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8394 +#line 8459 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8397 +#line 8462 [TRAINER_JENNY_2] = { -#line 8398 +#line 8463 .trainerName = _("JENNY"), -#line 8399 +#line 8464 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8400 +#line 8465 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8401 +#line 8466 F_TRAINER_FEMALE | -#line 8402 +#line 8467 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8403 +#line 8468 .doubleBattle = FALSE, -#line 8404 +#line 8469 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8406 +#line 8471 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8408 +#line 8473 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8407 +#line 8472 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8410 +#line 8475 [TRAINER_JENNY_3] = { -#line 8411 +#line 8476 .trainerName = _("JENNY"), -#line 8412 +#line 8477 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8413 +#line 8478 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8414 +#line 8479 F_TRAINER_FEMALE | -#line 8415 +#line 8480 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8416 +#line 8481 .doubleBattle = FALSE, -#line 8417 +#line 8482 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8419 +#line 8484 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8421 +#line 8486 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8420 +#line 8485 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8423 +#line 8488 [TRAINER_JENNY_4] = { -#line 8424 +#line 8489 .trainerName = _("JENNY"), -#line 8425 +#line 8490 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8426 +#line 8491 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8427 +#line 8492 F_TRAINER_FEMALE | -#line 8428 +#line 8493 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8429 +#line 8494 .doubleBattle = FALSE, -#line 8430 +#line 8495 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8432 +#line 8497 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8434 +#line 8499 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8433 +#line 8498 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8436 +#line 8501 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8438 +#line 8503 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8437 +#line 8502 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8440 +#line 8505 [TRAINER_JENNY_5] = { -#line 8441 +#line 8506 .trainerName = _("JENNY"), -#line 8442 +#line 8507 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 8443 +#line 8508 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 8444 +#line 8509 F_TRAINER_FEMALE | -#line 8445 +#line 8510 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 8446 +#line 8511 .doubleBattle = FALSE, -#line 8447 +#line 8512 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8449 +#line 8514 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8451 +#line 8516 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8450 +#line 8515 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8453 +#line 8518 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8455 +#line 8520 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8454 +#line 8519 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8457 +#line 8522 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8459 +#line 8524 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8458 +#line 8523 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8461 +#line 8526 [TRAINER_HEIDI] = { -#line 8462 +#line 8527 .trainerName = _("HEIDI"), -#line 8463 +#line 8528 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8464 +#line 8529 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8465 +#line 8530 F_TRAINER_FEMALE | -#line 8466 +#line 8531 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8467 +#line 8532 .doubleBattle = FALSE, -#line 8468 +#line 8533 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8470 +#line 8535 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8472 +#line 8537 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8471 +#line 8536 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8473 +#line 8538 MOVE_DIG, MOVE_SAND_ATTACK, MOVE_POISON_STING, @@ -21310,17 +21310,17 @@ F_TRAINER_FEMALE | }, }, { -#line 8478 +#line 8543 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8480 +#line 8545 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8479 +#line 8544 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8481 +#line 8546 MOVE_RAPID_SPIN, MOVE_MUD_SLAP, MOVE_PSYBEAM, @@ -21329,39 +21329,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 8486 +#line 8551 [TRAINER_BECKY] = { -#line 8487 +#line 8552 .trainerName = _("BECKY"), -#line 8488 +#line 8553 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8489 +#line 8554 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8490 +#line 8555 F_TRAINER_FEMALE | -#line 8491 +#line 8556 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8492 +#line 8557 .doubleBattle = FALSE, -#line 8493 +#line 8558 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8495 +#line 8560 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8497 +#line 8562 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8496 +#line 8561 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8498 +#line 8563 MOVE_SAND_ATTACK, MOVE_POISON_STING, MOVE_SLASH, @@ -21369,17 +21369,17 @@ F_TRAINER_FEMALE | }, }, { -#line 8503 +#line 8568 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8505 +#line 8570 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8504 +#line 8569 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8506 +#line 8571 MOVE_ROLLOUT, MOVE_BUBBLE_BEAM, MOVE_TAIL_WHIP, @@ -21388,228 +21388,228 @@ F_TRAINER_FEMALE | }, }, }, -#line 8511 +#line 8576 [TRAINER_CAROL] = { -#line 8512 +#line 8577 .trainerName = _("CAROL"), -#line 8513 +#line 8578 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8514 +#line 8579 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8515 +#line 8580 F_TRAINER_FEMALE | -#line 8516 +#line 8581 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8517 +#line 8582 .doubleBattle = FALSE, -#line 8518 +#line 8583 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8520 +#line 8585 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8522 +#line 8587 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8521 +#line 8586 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8524 +#line 8589 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8526 +#line 8591 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8525 +#line 8590 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8528 +#line 8593 [TRAINER_NANCY] = { -#line 8529 +#line 8594 .trainerName = _("NANCY"), -#line 8530 +#line 8595 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8531 +#line 8596 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8532 +#line 8597 F_TRAINER_FEMALE | -#line 8533 +#line 8598 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8534 +#line 8599 .doubleBattle = FALSE, -#line 8535 +#line 8600 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8537 +#line 8602 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8539 +#line 8604 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8538 +#line 8603 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8541 +#line 8606 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8543 +#line 8608 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8542 +#line 8607 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8545 +#line 8610 [TRAINER_MARTHA] = { -#line 8546 +#line 8611 .trainerName = _("MARTHA"), -#line 8547 +#line 8612 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8548 +#line 8613 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8549 +#line 8614 F_TRAINER_FEMALE | -#line 8550 +#line 8615 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8551 +#line 8616 .doubleBattle = FALSE, -#line 8552 +#line 8617 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8554 +#line 8619 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8556 +#line 8621 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8555 +#line 8620 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8558 +#line 8623 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8560 +#line 8625 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8559 +#line 8624 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8562 +#line 8627 [TRAINER_DIANA_1] = { -#line 8563 +#line 8628 .trainerName = _("DIANA"), -#line 8564 +#line 8629 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8565 +#line 8630 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8566 +#line 8631 F_TRAINER_FEMALE | -#line 8567 +#line 8632 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8568 +#line 8633 .doubleBattle = FALSE, -#line 8569 +#line 8634 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8571 +#line 8636 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8573 +#line 8638 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8572 +#line 8637 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8575 +#line 8640 .species = SPECIES_ODDISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8577 +#line 8642 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8576 +#line 8641 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8579 +#line 8644 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8581 +#line 8646 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8580 +#line 8645 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8583 +#line 8648 [TRAINER_CEDRIC] = { -#line 8584 +#line 8649 .trainerName = _("CEDRIC"), -#line 8585 +#line 8650 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 8586 +#line 8651 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 8588 +#line 8653 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 8589 +#line 8654 .doubleBattle = FALSE, -#line 8590 +#line 8655 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8592 +#line 8657 .species = SPECIES_WOBBUFFET, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8594 +#line 8659 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8593 +#line 8658 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8595 +#line 8660 MOVE_DESTINY_BOND, MOVE_SAFEGUARD, MOVE_COUNTER, @@ -21618,617 +21618,617 @@ F_TRAINER_FEMALE | }, }, }, -#line 8600 +#line 8665 [TRAINER_IRENE] = { -#line 8601 +#line 8666 .trainerName = _("IRENE"), -#line 8602 +#line 8667 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8603 +#line 8668 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8604 +#line 8669 F_TRAINER_FEMALE | -#line 8605 +#line 8670 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8606 +#line 8671 .doubleBattle = FALSE, -#line 8607 +#line 8672 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8609 +#line 8674 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8611 +#line 8676 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8610 +#line 8675 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8613 +#line 8678 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8615 +#line 8680 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8614 +#line 8679 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8617 +#line 8682 [TRAINER_DIANA_2] = { -#line 8618 +#line 8683 .trainerName = _("DIANA"), -#line 8619 +#line 8684 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8620 +#line 8685 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8621 +#line 8686 F_TRAINER_FEMALE | -#line 8622 +#line 8687 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8623 +#line 8688 .doubleBattle = FALSE, -#line 8624 +#line 8689 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8626 +#line 8691 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8628 +#line 8693 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 8627 +#line 8692 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8630 +#line 8695 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8632 +#line 8697 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 8631 +#line 8696 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8634 +#line 8699 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8636 +#line 8701 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 8635 +#line 8700 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8638 +#line 8703 [TRAINER_DIANA_3] = { -#line 8639 +#line 8704 .trainerName = _("DIANA"), -#line 8640 +#line 8705 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8641 +#line 8706 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8642 +#line 8707 F_TRAINER_FEMALE | -#line 8643 +#line 8708 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8644 +#line 8709 .doubleBattle = FALSE, -#line 8645 +#line 8710 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8647 +#line 8712 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8649 +#line 8714 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 8648 +#line 8713 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8651 +#line 8716 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8653 +#line 8718 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 8652 +#line 8717 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8655 +#line 8720 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8657 +#line 8722 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 8656 +#line 8721 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8659 +#line 8724 [TRAINER_DIANA_4] = { -#line 8660 +#line 8725 .trainerName = _("DIANA"), -#line 8661 +#line 8726 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8662 +#line 8727 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8663 +#line 8728 F_TRAINER_FEMALE | -#line 8664 +#line 8729 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8665 +#line 8730 .doubleBattle = FALSE, -#line 8666 +#line 8731 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8668 +#line 8733 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8670 +#line 8735 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 8669 +#line 8734 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8672 +#line 8737 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8674 +#line 8739 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 8673 +#line 8738 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8676 +#line 8741 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8678 +#line 8743 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 8677 +#line 8742 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8680 +#line 8745 [TRAINER_DIANA_5] = { -#line 8681 +#line 8746 .trainerName = _("DIANA"), -#line 8682 +#line 8747 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 8683 +#line 8748 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 8684 +#line 8749 F_TRAINER_FEMALE | -#line 8685 +#line 8750 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 8686 +#line 8751 .doubleBattle = FALSE, -#line 8687 +#line 8752 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8689 +#line 8754 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8691 +#line 8756 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 8690 +#line 8755 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8693 +#line 8758 .species = SPECIES_VILEPLUME, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8695 +#line 8760 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 8694 +#line 8759 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8697 +#line 8762 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8699 +#line 8764 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 8698 +#line 8763 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8701 +#line 8766 [TRAINER_AMY_AND_LIV_1] = { -#line 8702 +#line 8767 .trainerName = _("AMY & LIV"), -#line 8703 +#line 8768 .trainerClass = TRAINER_CLASS_TWINS, -#line 8704 +#line 8769 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8706 +#line 8771 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8707 +#line 8772 .doubleBattle = TRUE, -#line 8708 +#line 8773 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8710 +#line 8775 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8712 +#line 8777 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8711 +#line 8776 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8714 +#line 8779 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8716 +#line 8781 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8715 +#line 8780 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8718 +#line 8783 [TRAINER_AMY_AND_LIV_2] = { -#line 8719 +#line 8784 .trainerName = _("AMY & LIV"), -#line 8720 +#line 8785 .trainerClass = TRAINER_CLASS_TWINS, -#line 8721 +#line 8786 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8723 +#line 8788 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8724 +#line 8789 .doubleBattle = TRUE, -#line 8725 +#line 8790 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8727 +#line 8792 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8729 +#line 8794 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 8728 +#line 8793 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8731 +#line 8796 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8733 +#line 8798 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 8732 +#line 8797 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8735 +#line 8800 [TRAINER_GINA_AND_MIA_1] = { -#line 8736 +#line 8801 .trainerName = _("GINA & MIA"), -#line 8737 +#line 8802 .trainerClass = TRAINER_CLASS_TWINS, -#line 8738 +#line 8803 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8740 +#line 8805 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8741 +#line 8806 .doubleBattle = TRUE, -#line 8742 +#line 8807 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8744 +#line 8809 .species = SPECIES_SEEDOT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8746 +#line 8811 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8745 +#line 8810 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8748 +#line 8813 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8750 +#line 8815 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8749 +#line 8814 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8752 +#line 8817 [TRAINER_MIU_AND_YUKI] = { -#line 8753 +#line 8818 .trainerName = _("MIU & YUKI"), -#line 8754 +#line 8819 .trainerClass = TRAINER_CLASS_TWINS, -#line 8755 +#line 8820 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8757 +#line 8822 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8758 +#line 8823 .doubleBattle = TRUE, -#line 8759 +#line 8824 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8761 +#line 8826 .species = SPECIES_BEAUTIFLY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8763 +#line 8828 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8762 +#line 8827 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8765 +#line 8830 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8767 +#line 8832 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8766 +#line 8831 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8769 +#line 8834 [TRAINER_AMY_AND_LIV_3] = { -#line 8770 +#line 8835 .trainerName = _("AMY & LIV"), -#line 8771 +#line 8836 .trainerClass = TRAINER_CLASS_TWINS, -#line 8772 +#line 8837 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8774 +#line 8839 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8775 +#line 8840 .doubleBattle = TRUE, -#line 8776 +#line 8841 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8778 +#line 8843 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8780 +#line 8845 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8779 +#line 8844 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8782 +#line 8847 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8784 +#line 8849 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8783 +#line 8848 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8786 +#line 8851 [TRAINER_GINA_AND_MIA_2] = { -#line 8787 +#line 8852 .trainerName = _("GINA & MIA"), -#line 8788 +#line 8853 .trainerClass = TRAINER_CLASS_TWINS, -#line 8789 +#line 8854 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8791 +#line 8856 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8792 +#line 8857 .doubleBattle = TRUE, -#line 8793 +#line 8858 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8795 +#line 8860 .species = SPECIES_DUSKULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8797 +#line 8862 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8796 +#line 8861 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8798 +#line 8863 MOVE_NIGHT_SHADE, MOVE_DISABLE, }, }, { -#line 8801 +#line 8866 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8803 +#line 8868 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8802 +#line 8867 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8804 +#line 8869 MOVE_ABSORB, MOVE_LEECH_SEED, }, }, }, }, -#line 8807 +#line 8872 [TRAINER_AMY_AND_LIV_4] = { -#line 8808 +#line 8873 .trainerName = _("AMY & LIV"), -#line 8809 +#line 8874 .trainerClass = TRAINER_CLASS_TWINS, -#line 8810 +#line 8875 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8812 +#line 8877 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8813 +#line 8878 .doubleBattle = TRUE, -#line 8814 +#line 8879 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8816 +#line 8881 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8818 +#line 8883 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 8817 +#line 8882 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8820 +#line 8885 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8822 +#line 8887 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 8821 +#line 8886 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8824 +#line 8889 [TRAINER_AMY_AND_LIV_5] = { -#line 8825 +#line 8890 .trainerName = _("AMY & LIV"), -#line 8826 +#line 8891 .trainerClass = TRAINER_CLASS_TWINS, -#line 8827 +#line 8892 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8829 +#line 8894 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8830 +#line 8895 .doubleBattle = TRUE, -#line 8831 +#line 8896 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8833 +#line 8898 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8835 +#line 8900 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 8834 +#line 8899 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8836 +#line 8901 MOVE_SPARK, MOVE_CHARGE, MOVE_FAKE_TEARS, @@ -22236,17 +22236,17 @@ F_TRAINER_FEMALE | }, }, { -#line 8841 +#line 8906 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8843 +#line 8908 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 8842 +#line 8907 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8844 +#line 8909 MOVE_SPARK, MOVE_CHARGE, MOVE_CHARM, @@ -22255,37 +22255,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 8849 +#line 8914 [TRAINER_AMY_AND_LIV_6] = { -#line 8850 +#line 8915 .trainerName = _("AMY & LIV"), -#line 8851 +#line 8916 .trainerClass = TRAINER_CLASS_TWINS, -#line 8852 +#line 8917 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 8854 +#line 8919 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 8855 +#line 8920 .doubleBattle = TRUE, -#line 8856 +#line 8921 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8858 +#line 8923 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8860 +#line 8925 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 8859 +#line 8924 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8861 +#line 8926 MOVE_THUNDER, MOVE_CHARGE, MOVE_FAKE_TEARS, @@ -22293,17 +22293,17 @@ F_TRAINER_FEMALE | }, }, { -#line 8866 +#line 8931 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8868 +#line 8933 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 8867 +#line 8932 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 8869 +#line 8934 MOVE_THUNDER, MOVE_CHARGE, MOVE_CHARM, @@ -22312,601 +22312,601 @@ F_TRAINER_FEMALE | }, }, }, -#line 8874 +#line 8939 [TRAINER_HUEY] = { -#line 8875 +#line 8940 .trainerName = _("HUEY"), -#line 8876 +#line 8941 .trainerClass = TRAINER_CLASS_SAILOR, -#line 8877 +#line 8942 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 8879 +#line 8944 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 8880 +#line 8945 .doubleBattle = FALSE, -#line 8881 +#line 8946 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8883 +#line 8948 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8885 +#line 8950 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 8884 +#line 8949 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8887 +#line 8952 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8889 +#line 8954 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 8888 +#line 8953 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8891 +#line 8956 [TRAINER_EDMOND] = { -#line 8892 +#line 8957 .trainerName = _("EDMOND"), -#line 8893 +#line 8958 .trainerClass = TRAINER_CLASS_SAILOR, -#line 8894 +#line 8959 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 8896 +#line 8961 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 8897 +#line 8962 .doubleBattle = FALSE, -#line 8898 +#line 8963 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 8900 +#line 8965 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8902 +#line 8967 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8901 +#line 8966 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8904 +#line 8969 [TRAINER_ERNEST_1] = { -#line 8905 +#line 8970 .trainerName = _("ERNEST"), -#line 8906 +#line 8971 .trainerClass = TRAINER_CLASS_SAILOR, -#line 8907 +#line 8972 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 8909 +#line 8974 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 8910 +#line 8975 .doubleBattle = FALSE, -#line 8911 +#line 8976 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8913 +#line 8978 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8915 +#line 8980 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8914 +#line 8979 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8917 +#line 8982 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8919 +#line 8984 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8918 +#line 8983 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8921 +#line 8986 [TRAINER_DWAYNE] = { -#line 8922 +#line 8987 .trainerName = _("DWAYNE"), -#line 8923 +#line 8988 .trainerClass = TRAINER_CLASS_SAILOR, -#line 8924 +#line 8989 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 8926 +#line 8991 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 8927 +#line 8992 .doubleBattle = FALSE, -#line 8928 +#line 8993 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8930 +#line 8995 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8932 +#line 8997 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8931 +#line 8996 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8934 +#line 8999 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8936 +#line 9001 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8935 +#line 9000 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8938 +#line 9003 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8940 +#line 9005 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8939 +#line 9004 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8942 +#line 9007 [TRAINER_PHILLIP] = { -#line 8943 +#line 9008 .trainerName = _("PHILLIP"), -#line 8944 +#line 9009 .trainerClass = TRAINER_CLASS_SAILOR, -#line 8945 +#line 9010 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 8947 +#line 9012 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 8948 +#line 9013 .doubleBattle = FALSE, -#line 8949 +#line 9014 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8951 +#line 9016 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8953 +#line 9018 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8952 +#line 9017 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8955 +#line 9020 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8957 +#line 9022 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8956 +#line 9021 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8959 +#line 9024 [TRAINER_LEONARD] = { -#line 8960 +#line 9025 .trainerName = _("LEONARD"), -#line 8961 +#line 9026 .trainerClass = TRAINER_CLASS_SAILOR, -#line 8962 +#line 9027 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 8964 +#line 9029 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 8965 +#line 9030 .doubleBattle = FALSE, -#line 8966 +#line 9031 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 8968 +#line 9033 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8970 +#line 9035 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8969 +#line 9034 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8972 +#line 9037 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8974 +#line 9039 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8973 +#line 9038 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8976 +#line 9041 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8978 +#line 9043 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8977 +#line 9042 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8980 +#line 9045 [TRAINER_DUNCAN] = { -#line 8981 +#line 9046 .trainerName = _("DUNCAN"), -#line 8982 +#line 9047 .trainerClass = TRAINER_CLASS_SAILOR, -#line 8983 +#line 9048 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 8985 +#line 9050 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 8986 +#line 9051 .doubleBattle = FALSE, -#line 8987 +#line 9052 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 8989 +#line 9054 .species = SPECIES_SPHEAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8991 +#line 9056 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8990 +#line 9055 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 8993 +#line 9058 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 8995 +#line 9060 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 8994 +#line 9059 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 8997 +#line 9062 [TRAINER_ERNEST_2] = { -#line 8998 +#line 9063 .trainerName = _("ERNEST"), -#line 8999 +#line 9064 .trainerClass = TRAINER_CLASS_SAILOR, -#line 9000 +#line 9065 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 9002 +#line 9067 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9003 +#line 9068 .doubleBattle = FALSE, -#line 9004 +#line 9069 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9006 +#line 9071 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9008 +#line 9073 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9007 +#line 9072 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9010 +#line 9075 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9012 +#line 9077 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9011 +#line 9076 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9014 +#line 9079 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9016 +#line 9081 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9015 +#line 9080 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9018 +#line 9083 [TRAINER_ERNEST_3] = { -#line 9019 +#line 9084 .trainerName = _("ERNEST"), -#line 9020 +#line 9085 .trainerClass = TRAINER_CLASS_SAILOR, -#line 9021 +#line 9086 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 9023 +#line 9088 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9024 +#line 9089 .doubleBattle = FALSE, -#line 9025 +#line 9090 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9027 +#line 9092 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9029 +#line 9094 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9028 +#line 9093 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9031 +#line 9096 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9033 +#line 9098 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9032 +#line 9097 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9035 +#line 9100 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9037 +#line 9102 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9036 +#line 9101 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9039 +#line 9104 [TRAINER_ERNEST_4] = { -#line 9040 +#line 9105 .trainerName = _("ERNEST"), -#line 9041 +#line 9106 .trainerClass = TRAINER_CLASS_SAILOR, -#line 9042 +#line 9107 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 9044 +#line 9109 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9045 +#line 9110 .doubleBattle = FALSE, -#line 9046 +#line 9111 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9048 +#line 9113 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9050 +#line 9115 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9049 +#line 9114 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9052 +#line 9117 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9054 +#line 9119 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9053 +#line 9118 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9056 +#line 9121 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9058 +#line 9123 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9057 +#line 9122 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9060 +#line 9125 [TRAINER_ERNEST_5] = { -#line 9061 +#line 9126 .trainerName = _("ERNEST"), -#line 9062 +#line 9127 .trainerClass = TRAINER_CLASS_SAILOR, -#line 9063 +#line 9128 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 9065 +#line 9130 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9066 +#line 9131 .doubleBattle = FALSE, -#line 9067 +#line 9132 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9069 +#line 9134 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9071 +#line 9136 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9070 +#line 9135 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9073 +#line 9138 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9075 +#line 9140 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9074 +#line 9139 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9077 +#line 9142 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9079 +#line 9144 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9078 +#line 9143 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9081 +#line 9146 [TRAINER_ELI] = { -#line 9082 +#line 9147 .trainerName = _("ELI"), -#line 9083 +#line 9148 .trainerClass = TRAINER_CLASS_HIKER, -#line 9084 +#line 9149 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 9086 +#line 9151 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 9087 +#line 9152 .doubleBattle = FALSE, -#line 9088 +#line 9153 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9090 +#line 9155 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9092 +#line 9157 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9091 +#line 9156 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9094 +#line 9159 [TRAINER_ANNIKA] = { -#line 9095 +#line 9160 .trainerName = _("ANNIKA"), -#line 9096 +#line 9161 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 9097 +#line 9162 .trainerPic = TRAINER_PIC_POKEFAN_F, .encounterMusic_gender = -#line 9098 +#line 9163 F_TRAINER_FEMALE | -#line 9099 +#line 9164 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 9100 +#line 9165 .doubleBattle = FALSE, -#line 9101 +#line 9166 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9103 +#line 9168 .species = SPECIES_FEEBAS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9103 +#line 9168 .heldItem = ITEM_ORAN_BERRY, -#line 9105 +#line 9170 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9104 +#line 9169 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9106 +#line 9171 MOVE_FLAIL, MOVE_WATER_PULSE, MOVE_RETURN, @@ -22914,19 +22914,19 @@ F_TRAINER_FEMALE | }, }, { -#line 9111 +#line 9176 .species = SPECIES_FEEBAS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9111 +#line 9176 .heldItem = ITEM_ORAN_BERRY, -#line 9113 +#line 9178 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9112 +#line 9177 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9114 +#line 9179 MOVE_FLAIL, MOVE_WATER_PULSE, MOVE_RETURN, @@ -22935,73 +22935,73 @@ F_TRAINER_FEMALE | }, }, }, -#line 9119 +#line 9184 [TRAINER_JAZMYN] = { -#line 9120 +#line 9185 .trainerName = _("JAZMYN"), -#line 9121 +#line 9186 .trainerClass = TRAINER_CLASS_COOLTRAINER_2, -#line 9122 +#line 9187 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 9123 +#line 9188 F_TRAINER_FEMALE | -#line 9124 +#line 9189 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 9125 +#line 9190 .items = { ITEM_HYPER_POTION }, -#line 9126 +#line 9191 .doubleBattle = FALSE, -#line 9127 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 9192 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9129 +#line 9194 .species = SPECIES_ABSOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9131 +#line 9196 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9130 +#line 9195 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9133 +#line 9198 [TRAINER_JONAS] = { -#line 9134 +#line 9199 .trainerName = _("JONAS"), -#line 9135 +#line 9200 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 9136 +#line 9201 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 9138 +#line 9203 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 9139 +#line 9204 .doubleBattle = FALSE, -#line 9140 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 9205 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9142 +#line 9207 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9144 +#line 9209 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9143 +#line 9208 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9145 +#line 9210 MOVE_TOXIC, MOVE_THUNDER, MOVE_SELF_DESTRUCT, @@ -23010,39 +23010,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 9150 +#line 9215 [TRAINER_KAYLEY] = { -#line 9151 +#line 9216 .trainerName = _("KAYLEY"), -#line 9152 +#line 9217 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 9153 +#line 9218 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 9154 +#line 9219 F_TRAINER_FEMALE | -#line 9155 +#line 9220 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9156 +#line 9221 .doubleBattle = FALSE, -#line 9157 +#line 9222 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9159 +#line 9224 .species = SPECIES_CASTFORM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9161 +#line 9226 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9160 +#line 9225 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9162 +#line 9227 MOVE_SUNNY_DAY, MOVE_WEATHER_BALL, MOVE_FLAMETHROWER, @@ -23051,224 +23051,61 @@ F_TRAINER_FEMALE | }, }, }, -#line 9167 +#line 9232 [TRAINER_AURON] = { -#line 9168 +#line 9233 .trainerName = _("AURON"), -#line 9169 +#line 9234 .trainerClass = TRAINER_CLASS_EXPERT, -#line 9170 +#line 9235 .trainerPic = TRAINER_PIC_EXPERT_M, .encounterMusic_gender = -#line 9172 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 9173 - .doubleBattle = FALSE, -#line 9174 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 9176 - .species = SPECIES_MANECTRIC, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 9178 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9177 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 9180 - .species = SPECIES_MACHAMP, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 9182 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9181 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 9184 - [TRAINER_KELVIN] = - { -#line 9185 - .trainerName = _("KELVIN"), -#line 9186 - .trainerClass = TRAINER_CLASS_SAILOR, -#line 9187 - .trainerPic = TRAINER_PIC_SAILOR, - .encounterMusic_gender = -#line 9189 - TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9190 - .doubleBattle = FALSE, -#line 9191 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 9193 - .species = SPECIES_MACHOKE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 9195 - .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9194 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 9197 - .species = SPECIES_SPHEAL, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 9199 - .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9198 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 9201 - [TRAINER_MARLEY] = - { -#line 9202 - .trainerName = _("MARLEY"), -#line 9203 - .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 9204 - .trainerPic = TRAINER_PIC_COOLTRAINER_F, - .encounterMusic_gender = -#line 9205 -F_TRAINER_FEMALE | -#line 9206 - TRAINER_ENCOUNTER_MUSIC_COOL, -#line 9207 - .items = { ITEM_HYPER_POTION }, -#line 9208 - .doubleBattle = FALSE, -#line 9209 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 9211 - .species = SPECIES_MANECTRIC, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 9213 - .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 9212 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 9214 - MOVE_BITE, - MOVE_ROAR, - MOVE_THUNDER_WAVE, - MOVE_THUNDERBOLT, - }, - }, - }, - }, -#line 9219 - [TRAINER_REYNA] = - { -#line 9220 - .trainerName = _("REYNA"), -#line 9221 - .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 9222 - .trainerPic = TRAINER_PIC_BATTLE_GIRL, - .encounterMusic_gender = -#line 9223 -F_TRAINER_FEMALE | -#line 9224 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 9225 - .doubleBattle = FALSE, -#line 9226 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 9228 - .species = SPECIES_MEDITITE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 9230 - .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9229 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 9232 - .species = SPECIES_HARIYAMA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 9234 - .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 9233 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 9236 - [TRAINER_HUDSON] = - { #line 9237 - .trainerName = _("HUDSON"), + TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 9238 - .trainerClass = TRAINER_CLASS_SAILOR, -#line 9239 - .trainerPic = TRAINER_PIC_SAILOR, - .encounterMusic_gender = -#line 9241 - TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9242 .doubleBattle = FALSE, -#line 9243 +#line 9239 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, + .partySize = 2, .party = (const struct TrainerMon[]) { { +#line 9241 + .species = SPECIES_MANECTRIC, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 9243 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 9242 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { #line 9245 - .species = SPECIES_WAILMER, + .species = SPECIES_MACHAMP, .gender = TRAINER_MON_RANDOM_GENDER, #line 9247 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 9246 - .lvl = 34, + .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, #line 9249 - [TRAINER_CONOR] = + [TRAINER_KELVIN] = { #line 9250 - .trainerName = _("CONOR"), + .trainerName = _("KELVIN"), #line 9251 - .trainerClass = TRAINER_CLASS_EXPERT, + .trainerClass = TRAINER_CLASS_SAILOR, #line 9252 - .trainerPic = TRAINER_PIC_EXPERT_M, + .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = #line 9254 - TRAINER_ENCOUNTER_MUSIC_INTENSE, + TRAINER_ENCOUNTER_MUSIC_MALE, #line 9255 .doubleBattle = FALSE, #line 9256 @@ -23278,10 +23115,10 @@ F_TRAINER_FEMALE | { { #line 9258 - .species = SPECIES_CHINCHOU, + .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, #line 9260 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), #line 9259 .lvl = 33, .nature = NATURE_HARDY, @@ -23289,10 +23126,10 @@ F_TRAINER_FEMALE | }, { #line 9262 - .species = SPECIES_HARIYAMA, + .species = SPECIES_SPHEAL, .gender = TRAINER_MON_RANDOM_GENDER, #line 9264 - .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), #line 9263 .lvl = 33, .nature = NATURE_HARDY, @@ -23301,350 +23138,513 @@ F_TRAINER_FEMALE | }, }, #line 9266 - [TRAINER_EDWIN_1] = + [TRAINER_MARLEY] = { #line 9267 - .trainerName = _("EDWIN"), + .trainerName = _("MARLEY"), #line 9268 - .trainerClass = TRAINER_CLASS_COLLECTOR, + .trainerClass = TRAINER_CLASS_COOLTRAINER, #line 9269 - .trainerPic = TRAINER_PIC_COLLECTOR, + .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = +#line 9270 +F_TRAINER_FEMALE | #line 9271 - TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, + TRAINER_ENCOUNTER_MUSIC_COOL, #line 9272 - .doubleBattle = FALSE, + .items = { ITEM_HYPER_POTION }, #line 9273 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, + .doubleBattle = FALSE, +#line 9274 + .aiFlags = AI_FLAG_BASIC_TRAINER, + .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9275 - .species = SPECIES_LOMBRE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 9277 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 9276 - .lvl = 14, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 9279 - .species = SPECIES_NUZLEAF, + .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9281 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9280 - .lvl = 14, +#line 9278 + .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), +#line 9277 + .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 9279 + MOVE_BITE, + MOVE_ROAR, + MOVE_THUNDER_WAVE, + MOVE_THUNDERBOLT, + }, }, }, }, -#line 9283 - [TRAINER_HECTOR] = - { #line 9284 - .trainerName = _("HECTOR"), + [TRAINER_REYNA] = + { #line 9285 - .trainerClass = TRAINER_CLASS_COLLECTOR, + .trainerName = _("REYNA"), #line 9286 - .trainerPic = TRAINER_PIC_COLLECTOR, + .trainerClass = TRAINER_CLASS_BATTLE_GIRL, +#line 9287 + .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = #line 9288 - TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, +F_TRAINER_FEMALE | #line 9289 - .doubleBattle = FALSE, + TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 9290 + .doubleBattle = FALSE, +#line 9291 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9292 +#line 9293 + .species = SPECIES_MEDITITE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 9295 + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), +#line 9294 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 9297 + .species = SPECIES_HARIYAMA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 9299 + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), +#line 9298 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 9301 + [TRAINER_HUDSON] = + { +#line 9302 + .trainerName = _("HUDSON"), +#line 9303 + .trainerClass = TRAINER_CLASS_SAILOR, +#line 9304 + .trainerPic = TRAINER_PIC_SAILOR, + .encounterMusic_gender = +#line 9306 + TRAINER_ENCOUNTER_MUSIC_MALE, +#line 9307 + .doubleBattle = FALSE, +#line 9308 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 9310 + .species = SPECIES_WAILMER, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 9312 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 9311 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 9314 + [TRAINER_CONOR] = + { +#line 9315 + .trainerName = _("CONOR"), +#line 9316 + .trainerClass = TRAINER_CLASS_EXPERT, +#line 9317 + .trainerPic = TRAINER_PIC_EXPERT_M, + .encounterMusic_gender = +#line 9319 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 9320 + .doubleBattle = FALSE, +#line 9321 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 9323 + .species = SPECIES_CHINCHOU, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 9325 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 9324 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 9327 + .species = SPECIES_HARIYAMA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 9329 + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), +#line 9328 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 9331 + [TRAINER_EDWIN_1] = + { +#line 9332 + .trainerName = _("EDWIN"), +#line 9333 + .trainerClass = TRAINER_CLASS_COLLECTOR, +#line 9334 + .trainerPic = TRAINER_PIC_COLLECTOR, + .encounterMusic_gender = +#line 9336 + TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, +#line 9337 + .doubleBattle = FALSE, +#line 9338 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 9340 + .species = SPECIES_LOMBRE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 9342 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 9341 + .lvl = 14, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 9344 + .species = SPECIES_NUZLEAF, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 9346 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 9345 + .lvl = 14, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 9348 + [TRAINER_HECTOR] = + { +#line 9349 + .trainerName = _("HECTOR"), +#line 9350 + .trainerClass = TRAINER_CLASS_COLLECTOR, +#line 9351 + .trainerPic = TRAINER_PIC_COLLECTOR, + .encounterMusic_gender = +#line 9353 + TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, +#line 9354 + .doubleBattle = FALSE, +#line 9355 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 9357 .species = SPECIES_ZANGOOSE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9294 +#line 9359 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9293 +#line 9358 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9296 +#line 9361 .species = SPECIES_SEVIPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9298 +#line 9363 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9297 +#line 9362 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9300 +#line 9365 [TRAINER_TABITHA_MOSSDEEP] = { -#line 9301 +#line 9366 .trainerName = _("TABITHA"), -#line 9302 +#line 9367 .trainerClass = TRAINER_CLASS_MAGMA_ADMIN, -#line 9303 +#line 9368 .trainerPic = TRAINER_PIC_MAGMA_ADMIN, .encounterMusic_gender = -#line 9305 +#line 9370 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 9306 +#line 9371 .doubleBattle = FALSE, -#line 9307 +#line 9372 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9309 +#line 9374 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9311 +#line 9376 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9310 +#line 9375 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9313 +#line 9378 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9315 +#line 9380 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9314 +#line 9379 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9317 +#line 9382 .species = SPECIES_GOLBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9319 +#line 9384 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9318 +#line 9383 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9321 +#line 9386 [TRAINER_EDWIN_2] = { -#line 9322 +#line 9387 .trainerName = _("EDWIN"), -#line 9323 +#line 9388 .trainerClass = TRAINER_CLASS_COLLECTOR, -#line 9324 +#line 9389 .trainerPic = TRAINER_PIC_COLLECTOR, .encounterMusic_gender = -#line 9326 +#line 9391 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 9327 +#line 9392 .doubleBattle = FALSE, -#line 9328 +#line 9393 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9330 +#line 9395 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9332 +#line 9397 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9331 +#line 9396 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9334 +#line 9399 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9336 +#line 9401 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9335 +#line 9400 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9338 +#line 9403 [TRAINER_EDWIN_3] = { -#line 9339 +#line 9404 .trainerName = _("EDWIN"), -#line 9340 +#line 9405 .trainerClass = TRAINER_CLASS_COLLECTOR, -#line 9341 +#line 9406 .trainerPic = TRAINER_PIC_COLLECTOR, .encounterMusic_gender = -#line 9343 +#line 9408 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 9344 +#line 9409 .doubleBattle = FALSE, -#line 9345 +#line 9410 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9347 +#line 9412 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9349 +#line 9414 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9348 +#line 9413 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9351 +#line 9416 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9353 +#line 9418 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9352 +#line 9417 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9355 +#line 9420 [TRAINER_EDWIN_4] = { -#line 9356 +#line 9421 .trainerName = _("EDWIN"), -#line 9357 +#line 9422 .trainerClass = TRAINER_CLASS_COLLECTOR, -#line 9358 +#line 9423 .trainerPic = TRAINER_PIC_COLLECTOR, .encounterMusic_gender = -#line 9360 +#line 9425 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 9361 +#line 9426 .doubleBattle = FALSE, -#line 9362 +#line 9427 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9364 +#line 9429 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9366 +#line 9431 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9365 +#line 9430 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9368 +#line 9433 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9370 +#line 9435 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9369 +#line 9434 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9372 +#line 9437 [TRAINER_EDWIN_5] = { -#line 9373 +#line 9438 .trainerName = _("EDWIN"), -#line 9374 +#line 9439 .trainerClass = TRAINER_CLASS_COLLECTOR, -#line 9375 +#line 9440 .trainerPic = TRAINER_PIC_COLLECTOR, .encounterMusic_gender = -#line 9377 +#line 9442 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 9378 +#line 9443 .doubleBattle = FALSE, -#line 9379 +#line 9444 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9381 +#line 9446 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9383 +#line 9448 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9382 +#line 9447 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9385 +#line 9450 .species = SPECIES_SHIFTRY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9387 +#line 9452 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9386 +#line 9451 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9389 +#line 9454 [TRAINER_WALLY_VR_1] = { -#line 9390 +#line 9455 .trainerName = _("WALLY"), -#line 9391 +#line 9456 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9392 +#line 9457 .trainerPic = TRAINER_PIC_WALLY, .encounterMusic_gender = -#line 9394 +#line 9459 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9395 +#line 9460 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 9396 +#line 9461 .doubleBattle = FALSE, -#line 9397 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 9462 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 9399 +#line 9464 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9401 +#line 9466 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9400 +#line 9465 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9402 +#line 9467 MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, @@ -23652,17 +23652,17 @@ F_TRAINER_FEMALE | }, }, { -#line 9407 +#line 9472 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9409 +#line 9474 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9408 +#line 9473 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9410 +#line 9475 MOVE_SING, MOVE_ASSIST, MOVE_CHARM, @@ -23670,17 +23670,17 @@ F_TRAINER_FEMALE | }, }, { -#line 9415 +#line 9480 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9417 +#line 9482 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9416 +#line 9481 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9418 +#line 9483 MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, @@ -23688,17 +23688,17 @@ F_TRAINER_FEMALE | }, }, { -#line 9423 +#line 9488 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9425 +#line 9490 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9424 +#line 9489 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9426 +#line 9491 MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, @@ -23706,17 +23706,17 @@ F_TRAINER_FEMALE | }, }, { -#line 9431 +#line 9496 .species = SPECIES_GARDEVOIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9433 +#line 9498 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 9432 +#line 9497 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9434 +#line 9499 MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, @@ -23725,1014 +23725,1014 @@ F_TRAINER_FEMALE | }, }, }, -#line 9439 +#line 9504 [TRAINER_BRENDAN_ROUTE_103_MUDKIP] = { -#line 9440 +#line 9505 .trainerName = _("BRENDAN"), -#line 9441 +#line 9506 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9442 +#line 9507 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9444 +#line 9509 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9445 +#line 9510 .doubleBattle = FALSE, -#line 9446 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 9511 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9448 +#line 9513 .species = SPECIES_TREECKO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9450 +#line 9515 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9449 +#line 9514 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9452 +#line 9517 [TRAINER_BRENDAN_ROUTE_110_MUDKIP] = { -#line 9453 +#line 9518 .trainerName = _("BRENDAN"), -#line 9454 +#line 9519 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9455 +#line 9520 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9457 +#line 9522 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9458 +#line 9523 .doubleBattle = FALSE, -#line 9459 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 9524 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9461 +#line 9526 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9463 +#line 9528 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9462 +#line 9527 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9465 +#line 9530 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9467 +#line 9532 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9466 +#line 9531 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9469 +#line 9534 .species = SPECIES_GROVYLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9471 +#line 9536 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9470 +#line 9535 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9473 +#line 9538 [TRAINER_BRENDAN_ROUTE_119_MUDKIP] = { -#line 9474 +#line 9539 .trainerName = _("BRENDAN"), -#line 9475 +#line 9540 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9476 +#line 9541 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9478 +#line 9543 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9479 +#line 9544 .doubleBattle = FALSE, -#line 9480 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 9545 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9482 +#line 9547 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9484 +#line 9549 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9483 +#line 9548 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9486 +#line 9551 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9488 +#line 9553 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9487 +#line 9552 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9490 +#line 9555 .species = SPECIES_GROVYLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9492 +#line 9557 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9491 +#line 9556 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9494 +#line 9559 [TRAINER_BRENDAN_ROUTE_103_TREECKO] = { -#line 9495 +#line 9560 .trainerName = _("BRENDAN"), -#line 9496 +#line 9561 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9497 +#line 9562 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9499 +#line 9564 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9500 +#line 9565 .doubleBattle = FALSE, -#line 9501 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, +#line 9566 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9503 +#line 9568 .species = SPECIES_TORCHIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9505 +#line 9570 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9504 +#line 9569 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9507 +#line 9572 [TRAINER_BRENDAN_ROUTE_110_TREECKO] = { -#line 9508 +#line 9573 .trainerName = _("BRENDAN"), -#line 9509 +#line 9574 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9510 +#line 9575 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9512 +#line 9577 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9513 +#line 9578 .doubleBattle = FALSE, -#line 9514 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 9579 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9516 +#line 9581 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9518 +#line 9583 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9517 +#line 9582 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9520 +#line 9585 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9522 +#line 9587 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9521 +#line 9586 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9524 +#line 9589 .species = SPECIES_COMBUSKEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9526 +#line 9591 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9525 +#line 9590 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9528 +#line 9593 [TRAINER_BRENDAN_ROUTE_119_TREECKO] = { -#line 9529 +#line 9594 .trainerName = _("BRENDAN"), -#line 9530 +#line 9595 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9531 +#line 9596 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9533 +#line 9598 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9534 +#line 9599 .doubleBattle = FALSE, -#line 9535 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 9600 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9537 +#line 9602 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9539 +#line 9604 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9538 +#line 9603 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9541 +#line 9606 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9543 +#line 9608 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9542 +#line 9607 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9545 +#line 9610 .species = SPECIES_COMBUSKEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9547 +#line 9612 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9546 +#line 9611 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9549 +#line 9614 [TRAINER_BRENDAN_ROUTE_103_TORCHIC] = { -#line 9550 +#line 9615 .trainerName = _("BRENDAN"), -#line 9551 +#line 9616 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9552 +#line 9617 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9554 +#line 9619 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9555 +#line 9620 .doubleBattle = FALSE, -#line 9556 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 9621 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9558 +#line 9623 .species = SPECIES_MUDKIP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9560 +#line 9625 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9559 +#line 9624 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9562 +#line 9627 [TRAINER_BRENDAN_ROUTE_110_TORCHIC] = { -#line 9563 +#line 9628 .trainerName = _("BRENDAN"), -#line 9564 +#line 9629 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9565 +#line 9630 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9567 +#line 9632 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9568 +#line 9633 .doubleBattle = FALSE, -#line 9569 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 9634 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9571 +#line 9636 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9573 +#line 9638 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9572 +#line 9637 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9575 +#line 9640 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9577 +#line 9642 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9576 +#line 9641 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9579 +#line 9644 .species = SPECIES_MARSHTOMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9581 +#line 9646 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9580 +#line 9645 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9583 +#line 9648 [TRAINER_BRENDAN_ROUTE_119_TORCHIC] = { -#line 9584 +#line 9649 .trainerName = _("BRENDAN"), -#line 9585 +#line 9650 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9586 +#line 9651 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 9588 +#line 9653 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9589 +#line 9654 .doubleBattle = FALSE, -#line 9590 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 9655 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9592 +#line 9657 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9594 +#line 9659 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9593 +#line 9658 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9596 +#line 9661 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9598 +#line 9663 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9597 +#line 9662 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9600 +#line 9665 .species = SPECIES_MARSHTOMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9602 +#line 9667 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9601 +#line 9666 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9604 +#line 9669 [TRAINER_MAY_ROUTE_103_MUDKIP] = { -#line 9605 +#line 9670 .trainerName = _("MAY"), -#line 9606 +#line 9671 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9607 +#line 9672 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9608 +#line 9673 F_TRAINER_FEMALE | -#line 9609 +#line 9674 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9610 +#line 9675 .doubleBattle = FALSE, -#line 9611 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 9676 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9613 +#line 9678 .species = SPECIES_TREECKO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9615 +#line 9680 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9614 +#line 9679 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9617 +#line 9682 [TRAINER_MAY_ROUTE_110_MUDKIP] = { -#line 9618 +#line 9683 .trainerName = _("MAY"), -#line 9619 +#line 9684 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9620 +#line 9685 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9621 +#line 9686 F_TRAINER_FEMALE | -#line 9622 +#line 9687 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9623 +#line 9688 .doubleBattle = FALSE, -#line 9624 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 9689 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9626 +#line 9691 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9628 +#line 9693 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9627 +#line 9692 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9630 +#line 9695 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9632 +#line 9697 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9631 +#line 9696 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9634 +#line 9699 .species = SPECIES_GROVYLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9636 +#line 9701 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9635 +#line 9700 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9638 +#line 9703 [TRAINER_MAY_ROUTE_119_MUDKIP] = { -#line 9639 +#line 9704 .trainerName = _("MAY"), -#line 9640 +#line 9705 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9641 +#line 9706 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9642 +#line 9707 F_TRAINER_FEMALE | -#line 9643 +#line 9708 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9644 +#line 9709 .doubleBattle = FALSE, -#line 9645 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 9710 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9647 +#line 9712 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9649 +#line 9714 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9648 +#line 9713 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9651 +#line 9716 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9653 +#line 9718 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9652 +#line 9717 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9655 +#line 9720 .species = SPECIES_GROVYLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9657 +#line 9722 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9656 +#line 9721 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9659 +#line 9724 [TRAINER_MAY_ROUTE_103_TREECKO] = { -#line 9660 +#line 9725 .trainerName = _("MAY"), -#line 9661 +#line 9726 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9662 +#line 9727 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9663 +#line 9728 F_TRAINER_FEMALE | -#line 9664 +#line 9729 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9665 +#line 9730 .doubleBattle = FALSE, -#line 9666 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 9731 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9668 +#line 9733 .species = SPECIES_TORCHIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9670 +#line 9735 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9669 +#line 9734 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9672 +#line 9737 [TRAINER_MAY_ROUTE_110_TREECKO] = { -#line 9673 +#line 9738 .trainerName = _("MAY"), -#line 9674 +#line 9739 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9675 +#line 9740 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9676 +#line 9741 F_TRAINER_FEMALE | -#line 9677 +#line 9742 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9678 +#line 9743 .doubleBattle = FALSE, -#line 9679 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 9744 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9681 +#line 9746 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9683 +#line 9748 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9682 +#line 9747 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9685 +#line 9750 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9687 +#line 9752 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9686 +#line 9751 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9689 +#line 9754 .species = SPECIES_COMBUSKEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9691 +#line 9756 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9690 +#line 9755 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9693 +#line 9758 [TRAINER_MAY_ROUTE_119_TREECKO] = { -#line 9694 +#line 9759 .trainerName = _("MAY"), -#line 9695 +#line 9760 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9696 +#line 9761 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9697 +#line 9762 F_TRAINER_FEMALE | -#line 9698 +#line 9763 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9699 +#line 9764 .doubleBattle = FALSE, -#line 9700 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 9765 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9702 +#line 9767 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9704 +#line 9769 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9703 +#line 9768 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9706 +#line 9771 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9708 +#line 9773 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9707 +#line 9772 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9710 +#line 9775 .species = SPECIES_COMBUSKEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9712 +#line 9777 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9711 +#line 9776 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9714 +#line 9779 [TRAINER_MAY_ROUTE_103_TORCHIC] = { -#line 9715 +#line 9780 .trainerName = _("MAY"), -#line 9716 +#line 9781 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9717 +#line 9782 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9718 +#line 9783 F_TRAINER_FEMALE | -#line 9719 +#line 9784 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9720 +#line 9785 .doubleBattle = FALSE, -#line 9721 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 9786 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9723 +#line 9788 .species = SPECIES_MUDKIP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9725 +#line 9790 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9724 +#line 9789 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9727 +#line 9792 [TRAINER_MAY_ROUTE_110_TORCHIC] = { -#line 9728 +#line 9793 .trainerName = _("MAY"), -#line 9729 +#line 9794 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9730 +#line 9795 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9731 +#line 9796 F_TRAINER_FEMALE | -#line 9732 +#line 9797 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9733 +#line 9798 .doubleBattle = FALSE, -#line 9734 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 9799 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9736 +#line 9801 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9738 +#line 9803 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9737 +#line 9802 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9740 +#line 9805 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9742 +#line 9807 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 9741 +#line 9806 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9744 +#line 9809 .species = SPECIES_MARSHTOMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9746 +#line 9811 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9745 +#line 9810 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9748 +#line 9813 [TRAINER_MAY_ROUTE_119_TORCHIC] = { -#line 9749 +#line 9814 .trainerName = _("MAY"), -#line 9750 +#line 9815 .trainerClass = TRAINER_CLASS_RIVAL, -#line 9751 +#line 9816 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 9752 +#line 9817 F_TRAINER_FEMALE | -#line 9753 +#line 9818 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9754 +#line 9819 .doubleBattle = FALSE, -#line 9755 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 9820 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 9757 +#line 9822 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9759 +#line 9824 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9758 +#line 9823 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9761 +#line 9826 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9763 +#line 9828 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 9762 +#line 9827 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9765 +#line 9830 .species = SPECIES_MARSHTOMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9767 +#line 9832 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 9766 +#line 9831 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9769 +#line 9834 [TRAINER_ISAAC_1] = { -#line 9770 +#line 9835 .trainerName = _("ISAAC"), -#line 9771 +#line 9836 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 9772 +#line 9837 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, .encounterMusic_gender = -#line 9774 +#line 9839 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9775 +#line 9840 .doubleBattle = FALSE, -#line 9776 +#line 9841 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 9778 +#line 9843 .species = SPECIES_WHISMUR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9780 +#line 9845 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9779 +#line 9844 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9782 +#line 9847 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9784 +#line 9849 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9783 +#line 9848 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9786 +#line 9851 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9788 +#line 9853 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9787 +#line 9852 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9790 +#line 9855 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9792 +#line 9857 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9791 +#line 9856 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9794 +#line 9859 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9796 +#line 9861 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9795 +#line 9860 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9798 +#line 9863 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9800 +#line 9865 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9799 +#line 9864 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9802 +#line 9867 [TRAINER_DAVIS] = { -#line 9803 +#line 9868 .trainerName = _("DAVIS"), -#line 9804 +#line 9869 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 9805 +#line 9870 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 9807 +#line 9872 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9808 +#line 9873 .doubleBattle = FALSE, -#line 9809 +#line 9874 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 9811 +#line 9876 .species = SPECIES_PINSIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9813 +#line 9878 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9812 +#line 9877 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9815 +#line 9880 [TRAINER_MITCHELL] = { -#line 9816 +#line 9881 .trainerName = _("MITCHELL"), -#line 9817 +#line 9882 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 9818 +#line 9883 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 9820 +#line 9885 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 9821 +#line 9886 .doubleBattle = FALSE, -#line 9822 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 9887 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 9824 +#line 9889 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9826 +#line 9891 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9825 +#line 9890 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9827 +#line 9892 MOVE_EXPLOSION, MOVE_REFLECT, MOVE_LIGHT_SCREEN, @@ -24740,17 +24740,17 @@ F_TRAINER_FEMALE | }, }, { -#line 9832 +#line 9897 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9834 +#line 9899 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9833 +#line 9898 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 9835 +#line 9900 MOVE_EXPLOSION, MOVE_REFLECT, MOVE_LIGHT_SCREEN, @@ -24759,939 +24759,771 @@ F_TRAINER_FEMALE | }, }, }, -#line 9840 +#line 9905 [TRAINER_ISAAC_2] = { -#line 9841 +#line 9906 .trainerName = _("ISAAC"), -#line 9842 +#line 9907 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 9843 +#line 9908 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, .encounterMusic_gender = -#line 9845 +#line 9910 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9846 +#line 9911 .doubleBattle = FALSE, -#line 9847 +#line 9912 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 9849 +#line 9914 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9851 +#line 9916 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9850 +#line 9915 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9853 +#line 9918 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9855 +#line 9920 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9854 +#line 9919 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9857 +#line 9922 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9859 +#line 9924 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9858 +#line 9923 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9861 +#line 9926 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9863 +#line 9928 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9862 +#line 9927 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9865 +#line 9930 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9867 +#line 9932 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9866 +#line 9931 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9869 +#line 9934 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9871 +#line 9936 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 9870 +#line 9935 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9873 +#line 9938 [TRAINER_ISAAC_3] = { -#line 9874 +#line 9939 .trainerName = _("ISAAC"), -#line 9875 +#line 9940 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 9876 +#line 9941 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, .encounterMusic_gender = -#line 9878 +#line 9943 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9879 +#line 9944 .doubleBattle = FALSE, -#line 9880 +#line 9945 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 9882 +#line 9947 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9884 +#line 9949 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9883 +#line 9948 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9886 +#line 9951 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9888 +#line 9953 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9887 +#line 9952 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9890 +#line 9955 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9892 +#line 9957 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9891 +#line 9956 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9894 +#line 9959 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9896 +#line 9961 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9895 +#line 9960 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9898 +#line 9963 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9900 +#line 9965 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9899 +#line 9964 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9902 +#line 9967 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9904 +#line 9969 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 9903 +#line 9968 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 9906 +#line 9971 [TRAINER_ISAAC_4] = { -#line 9907 - .trainerName = _("ISAAC"), -#line 9908 - .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 9909 - .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, - .encounterMusic_gender = -#line 9911 - TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9912 - .doubleBattle = FALSE, -#line 9913 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 6, - .party = (const struct TrainerMon[]) - { - { -#line 9915 - .species = SPECIES_LOUDRED, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 9917 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9916 - .lvl = 28, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 9919 - .species = SPECIES_LINOONE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 9921 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9920 - .lvl = 28, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 9923 - .species = SPECIES_ARON, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 9925 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9924 - .lvl = 28, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 9927 - .species = SPECIES_MIGHTYENA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 9929 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9928 - .lvl = 28, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 9931 - .species = SPECIES_SWELLOW, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 9933 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9932 - .lvl = 28, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 9935 - .species = SPECIES_HARIYAMA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 9937 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 9936 - .lvl = 28, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 9939 - [TRAINER_ISAAC_5] = - { -#line 9940 - .trainerName = _("ISAAC"), -#line 9941 - .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 9942 - .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, - .encounterMusic_gender = -#line 9944 - TRAINER_ENCOUNTER_MUSIC_MALE, -#line 9945 - .doubleBattle = FALSE, -#line 9946 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 6, - .party = (const struct TrainerMon[]) - { - { -#line 9948 - .species = SPECIES_LOUDRED, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 9950 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9949 - .lvl = 31, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 9952 - .species = SPECIES_LINOONE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 9954 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9953 - .lvl = 31, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 9956 - .species = SPECIES_LAIRON, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 9958 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9957 - .lvl = 31, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 9960 - .species = SPECIES_MIGHTYENA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 9962 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9961 - .lvl = 31, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 9964 - .species = SPECIES_SWELLOW, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 9966 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9965 - .lvl = 31, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 9968 - .species = SPECIES_HARIYAMA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 9970 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 9969 - .lvl = 31, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, #line 9972 - [TRAINER_LYDIA_1] = - { + .trainerName = _("ISAAC"), #line 9973 - .trainerName = _("LYDIA"), -#line 9974 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 9975 - .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, +#line 9974 + .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, .encounterMusic_gender = #line 9976 -F_TRAINER_FEMALE | + TRAINER_ENCOUNTER_MUSIC_MALE, #line 9977 - TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 9978 .doubleBattle = FALSE, -#line 9979 +#line 9978 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { +#line 9980 + .species = SPECIES_LOUDRED, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 9982 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), #line 9981 + .lvl = 28, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 9984 + .species = SPECIES_LINOONE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 9986 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 9985 + .lvl = 28, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 9988 + .species = SPECIES_ARON, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 9990 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 9989 + .lvl = 28, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 9992 + .species = SPECIES_MIGHTYENA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 9994 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 9993 + .lvl = 28, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 9996 + .species = SPECIES_SWELLOW, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 9998 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 9997 + .lvl = 28, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 10000 + .species = SPECIES_HARIYAMA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10002 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 10001 + .lvl = 28, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10004 + [TRAINER_ISAAC_5] = + { +#line 10005 + .trainerName = _("ISAAC"), +#line 10006 + .trainerClass = TRAINER_CLASS_PKMN_BREEDER, +#line 10007 + .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, + .encounterMusic_gender = +#line 10009 + TRAINER_ENCOUNTER_MUSIC_MALE, +#line 10010 + .doubleBattle = FALSE, +#line 10011 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 6, + .party = (const struct TrainerMon[]) + { + { +#line 10013 + .species = SPECIES_LOUDRED, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10015 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 10014 + .lvl = 31, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 10017 + .species = SPECIES_LINOONE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10019 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 10018 + .lvl = 31, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 10021 + .species = SPECIES_LAIRON, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10023 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 10022 + .lvl = 31, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 10025 + .species = SPECIES_MIGHTYENA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10027 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 10026 + .lvl = 31, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 10029 + .species = SPECIES_SWELLOW, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10031 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 10030 + .lvl = 31, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 10033 + .species = SPECIES_HARIYAMA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10035 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 10034 + .lvl = 31, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10037 + [TRAINER_LYDIA_1] = + { +#line 10038 + .trainerName = _("LYDIA"), +#line 10039 + .trainerClass = TRAINER_CLASS_PKMN_BREEDER, +#line 10040 + .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, + .encounterMusic_gender = +#line 10041 +F_TRAINER_FEMALE | +#line 10042 + TRAINER_ENCOUNTER_MUSIC_FEMALE, +#line 10043 + .doubleBattle = FALSE, +#line 10044 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 6, + .party = (const struct TrainerMon[]) + { + { +#line 10046 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9983 +#line 10048 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9982 +#line 10047 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9985 +#line 10050 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9987 +#line 10052 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9986 +#line 10051 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9989 +#line 10054 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9991 +#line 10056 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9990 +#line 10055 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9993 +#line 10058 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9995 +#line 10060 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9994 +#line 10059 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 9997 +#line 10062 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 9999 +#line 10064 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 9998 +#line 10063 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10001 +#line 10066 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10003 +#line 10068 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10002 +#line 10067 .lvl = 11, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10005 +#line 10070 [TRAINER_HALLE] = { -#line 10006 +#line 10071 .trainerName = _("HALLE"), -#line 10007 +#line 10072 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 10008 +#line 10073 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 10009 +#line 10074 F_TRAINER_FEMALE | -#line 10010 +#line 10075 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10011 +#line 10076 .items = { ITEM_FULL_RESTORE }, -#line 10012 +#line 10077 .doubleBattle = FALSE, -#line 10013 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 10078 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10015 +#line 10080 .species = SPECIES_SABLEYE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10017 +#line 10082 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10016 +#line 10081 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10019 +#line 10084 .species = SPECIES_ABSOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10021 +#line 10086 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10020 +#line 10085 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10023 +#line 10088 [TRAINER_GARRISON] = { -#line 10024 +#line 10089 .trainerName = _("GARRISON"), -#line 10025 +#line 10090 .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 10026 +#line 10091 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 10028 +#line 10093 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 10029 +#line 10094 .doubleBattle = FALSE, -#line 10030 +#line 10095 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10032 +#line 10097 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10034 +#line 10099 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10033 +#line 10098 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10036 +#line 10101 [TRAINER_LYDIA_2] = { -#line 10037 +#line 10102 .trainerName = _("LYDIA"), -#line 10038 +#line 10103 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 10039 +#line 10104 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 10040 +#line 10105 F_TRAINER_FEMALE | -#line 10041 +#line 10106 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 10042 +#line 10107 .doubleBattle = FALSE, -#line 10043 +#line 10108 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 10045 +#line 10110 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10047 +#line 10112 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 10046 +#line 10111 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10049 +#line 10114 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10051 +#line 10116 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 10050 +#line 10115 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10053 +#line 10118 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10055 +#line 10120 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 10054 +#line 10119 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10057 +#line 10122 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10059 +#line 10124 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 10058 +#line 10123 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10061 +#line 10126 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10063 +#line 10128 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 10062 +#line 10127 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10065 +#line 10130 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10067 +#line 10132 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 10066 +#line 10131 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10069 +#line 10134 [TRAINER_LYDIA_3] = { -#line 10070 +#line 10135 .trainerName = _("LYDIA"), -#line 10071 +#line 10136 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 10072 +#line 10137 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 10073 +#line 10138 F_TRAINER_FEMALE | -#line 10074 +#line 10139 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 10075 +#line 10140 .doubleBattle = FALSE, -#line 10076 +#line 10141 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 10078 +#line 10143 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10080 +#line 10145 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 10079 +#line 10144 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10082 +#line 10147 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10084 +#line 10149 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 10083 +#line 10148 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10086 +#line 10151 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10088 +#line 10153 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 10087 +#line 10152 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10090 +#line 10155 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10092 +#line 10157 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 10091 +#line 10156 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10094 +#line 10159 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10096 +#line 10161 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 10095 +#line 10160 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10098 +#line 10163 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10100 +#line 10165 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 10099 +#line 10164 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10102 +#line 10167 [TRAINER_LYDIA_4] = { -#line 10103 +#line 10168 .trainerName = _("LYDIA"), -#line 10104 +#line 10169 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 10105 +#line 10170 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 10106 +#line 10171 F_TRAINER_FEMALE | -#line 10107 +#line 10172 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 10108 +#line 10173 .doubleBattle = FALSE, -#line 10109 +#line 10174 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 10111 +#line 10176 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10113 +#line 10178 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10112 +#line 10177 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10115 +#line 10180 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10117 +#line 10182 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10116 +#line 10181 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10119 +#line 10184 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10121 +#line 10186 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10120 - .lvl = 28, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 10123 - .species = SPECIES_ROSELIA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10125 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10124 - .lvl = 28, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 10127 - .species = SPECIES_DELCATTY, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10129 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10128 - .lvl = 28, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 10131 - .species = SPECIES_GOLDEEN, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10133 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10132 - .lvl = 28, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 10135 - [TRAINER_LYDIA_5] = - { -#line 10136 - .trainerName = _("LYDIA"), -#line 10137 - .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 10138 - .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, - .encounterMusic_gender = -#line 10139 -F_TRAINER_FEMALE | -#line 10140 - TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 10141 - .doubleBattle = FALSE, -#line 10142 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 6, - .party = (const struct TrainerMon[]) - { - { -#line 10144 - .species = SPECIES_PELIPPER, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10146 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 10145 - .lvl = 31, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 10148 - .species = SPECIES_BRELOOM, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10150 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 10149 - .lvl = 31, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 10152 - .species = SPECIES_AZUMARILL, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10154 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 10153 - .lvl = 31, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 10156 - .species = SPECIES_ROSELIA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10158 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 10157 - .lvl = 31, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 10160 - .species = SPECIES_DELCATTY, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10162 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 10161 - .lvl = 31, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 10164 - .species = SPECIES_SEAKING, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10166 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 10165 - .lvl = 31, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 10168 - [TRAINER_JACKSON_1] = - { -#line 10169 - .trainerName = _("JACKSON"), -#line 10170 - .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10171 - .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, - .encounterMusic_gender = -#line 10173 - TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10174 - .items = { ITEM_FULL_RESTORE }, -#line 10175 - .doubleBattle = FALSE, -#line 10176 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 10178 - .species = SPECIES_BRELOOM, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10180 - .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10179 - .lvl = 27, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 10182 - [TRAINER_LORENZO] = - { -#line 10183 - .trainerName = _("LORENZO"), -#line 10184 - .trainerClass = TRAINER_CLASS_PKMN_RANGER, #line 10185 - .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, - .encounterMusic_gender = -#line 10187 - TRAINER_ENCOUNTER_MUSIC_COOL, + .lvl = 28, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { #line 10188 - .items = { ITEM_FULL_RESTORE }, -#line 10189 - .doubleBattle = FALSE, + .species = SPECIES_ROSELIA, + .gender = TRAINER_MON_RANDOM_GENDER, #line 10190 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 3, - .party = (const struct TrainerMon[]) - { + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 10189 + .lvl = 28, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, { #line 10192 - .species = SPECIES_SEEDOT, + .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, #line 10194 - .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), #line 10193 .lvl = 28, .nature = NATURE_HARDY, @@ -25699,1198 +25531,1202 @@ F_TRAINER_FEMALE | }, { #line 10196 - .species = SPECIES_NUZLEAF, + .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, #line 10198 - .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), #line 10197 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, - { + }, + }, #line 10200 - .species = SPECIES_LOMBRE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10202 - .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), + [TRAINER_LYDIA_5] = + { #line 10201 - .lvl = 28, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, + .trainerName = _("LYDIA"), +#line 10202 + .trainerClass = TRAINER_CLASS_PKMN_BREEDER, +#line 10203 + .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, + .encounterMusic_gender = #line 10204 - [TRAINER_SEBASTIAN] = - { +F_TRAINER_FEMALE | #line 10205 - .trainerName = _("SEBASTIAN"), + TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 10206 - .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10207 - .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, - .encounterMusic_gender = -#line 10209 - TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10210 - .items = { ITEM_FULL_RESTORE }, -#line 10211 .doubleBattle = FALSE, -#line 10212 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 1, +#line 10207 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 10214 - .species = SPECIES_CACTURNE, +#line 10209 + .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10216 - .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10215 - .lvl = 39, +#line 10211 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 10210 + .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, - }, - }, -#line 10218 - [TRAINER_JACKSON_2] = - { -#line 10219 - .trainerName = _("JACKSON"), -#line 10220 - .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10221 - .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, - .encounterMusic_gender = -#line 10223 - TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10224 - .items = { ITEM_FULL_RESTORE }, -#line 10225 - .doubleBattle = FALSE, -#line 10226 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, - .partySize = 1, - .party = (const struct TrainerMon[]) - { { -#line 10228 +#line 10213 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10230 - .iv = TRAINER_PARTY_IVS(7, 7, 7, 7, 7, 7), +#line 10215 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 10214 + .lvl = 31, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 10217 + .species = SPECIES_AZUMARILL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10219 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 10218 + .lvl = 31, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 10221 + .species = SPECIES_ROSELIA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10223 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 10222 + .lvl = 31, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 10225 + .species = SPECIES_DELCATTY, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10227 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 10226 + .lvl = 31, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { #line 10229 + .species = SPECIES_SEAKING, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10231 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 10230 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10232 - [TRAINER_JACKSON_3] = - { #line 10233 - .trainerName = _("JACKSON"), + [TRAINER_JACKSON_1] = + { #line 10234 - .trainerClass = TRAINER_CLASS_PKMN_RANGER, + .trainerName = _("JACKSON"), #line 10235 + .trainerClass = TRAINER_CLASS_PKMN_RANGER, +#line 10236 .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .encounterMusic_gender = -#line 10237 - TRAINER_ENCOUNTER_MUSIC_COOL, #line 10238 - .items = { ITEM_FULL_RESTORE }, + TRAINER_ENCOUNTER_MUSIC_COOL, #line 10239 - .doubleBattle = FALSE, + .items = { ITEM_FULL_RESTORE }, #line 10240 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .doubleBattle = FALSE, +#line 10241 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10242 +#line 10243 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, +#line 10245 + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), #line 10244 + .lvl = 27, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10247 + [TRAINER_LORENZO] = + { +#line 10248 + .trainerName = _("LORENZO"), +#line 10249 + .trainerClass = TRAINER_CLASS_PKMN_RANGER, +#line 10250 + .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, + .encounterMusic_gender = +#line 10252 + TRAINER_ENCOUNTER_MUSIC_COOL, +#line 10253 + .items = { ITEM_FULL_RESTORE }, +#line 10254 + .doubleBattle = FALSE, +#line 10255 + .aiFlags = AI_FLAG_BASIC_TRAINER, + .partySize = 3, + .party = (const struct TrainerMon[]) + { + { +#line 10257 + .species = SPECIES_SEEDOT, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10259 + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), +#line 10258 + .lvl = 28, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 10261 + .species = SPECIES_NUZLEAF, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10263 + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), +#line 10262 + .lvl = 28, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 10265 + .species = SPECIES_LOMBRE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10267 + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), +#line 10266 + .lvl = 28, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10269 + [TRAINER_SEBASTIAN] = + { +#line 10270 + .trainerName = _("SEBASTIAN"), +#line 10271 + .trainerClass = TRAINER_CLASS_PKMN_RANGER, +#line 10272 + .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, + .encounterMusic_gender = +#line 10274 + TRAINER_ENCOUNTER_MUSIC_COOL, +#line 10275 + .items = { ITEM_FULL_RESTORE }, +#line 10276 + .doubleBattle = FALSE, +#line 10277 + .aiFlags = AI_FLAG_BASIC_TRAINER, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 10279 + .species = SPECIES_CACTURNE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10281 + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), +#line 10280 + .lvl = 39, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10283 + [TRAINER_JACKSON_2] = + { +#line 10284 + .trainerName = _("JACKSON"), +#line 10285 + .trainerClass = TRAINER_CLASS_PKMN_RANGER, +#line 10286 + .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, + .encounterMusic_gender = +#line 10288 + TRAINER_ENCOUNTER_MUSIC_COOL, +#line 10289 + .items = { ITEM_FULL_RESTORE }, +#line 10290 + .doubleBattle = FALSE, +#line 10291 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 10293 + .species = SPECIES_BRELOOM, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10295 + .iv = TRAINER_PARTY_IVS(7, 7, 7, 7, 7, 7), +#line 10294 + .lvl = 31, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10297 + [TRAINER_JACKSON_3] = + { +#line 10298 + .trainerName = _("JACKSON"), +#line 10299 + .trainerClass = TRAINER_CLASS_PKMN_RANGER, +#line 10300 + .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, + .encounterMusic_gender = +#line 10302 + TRAINER_ENCOUNTER_MUSIC_COOL, +#line 10303 + .items = { ITEM_FULL_RESTORE }, +#line 10304 + .doubleBattle = FALSE, +#line 10305 + .aiFlags = AI_FLAG_BASIC_TRAINER, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 10307 + .species = SPECIES_BRELOOM, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10309 .iv = TRAINER_PARTY_IVS(8, 8, 8, 8, 8, 8), -#line 10243 +#line 10308 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10246 +#line 10311 [TRAINER_JACKSON_4] = { -#line 10247 +#line 10312 .trainerName = _("JACKSON"), -#line 10248 +#line 10313 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10249 +#line 10314 .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .encounterMusic_gender = -#line 10251 +#line 10316 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10252 +#line 10317 .items = { ITEM_FULL_RESTORE }, -#line 10253 +#line 10318 .doubleBattle = FALSE, -#line 10254 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, +#line 10319 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10256 +#line 10321 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10258 +#line 10323 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 10257 +#line 10322 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10260 +#line 10325 [TRAINER_JACKSON_5] = { -#line 10261 +#line 10326 .trainerName = _("JACKSON"), -#line 10262 +#line 10327 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10263 +#line 10328 .trainerPic = TRAINER_PIC_POKEMON_RANGER_M, .encounterMusic_gender = -#line 10265 +#line 10330 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10266 +#line 10331 .items = { ITEM_FULL_RESTORE }, -#line 10267 +#line 10332 .doubleBattle = FALSE, -#line 10268 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 10333 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10270 +#line 10335 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10272 +#line 10337 .iv = TRAINER_PARTY_IVS(10, 10, 10, 10, 10, 10), -#line 10271 +#line 10336 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10274 +#line 10339 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10276 +#line 10341 .iv = TRAINER_PARTY_IVS(10, 10, 10, 10, 10, 10), -#line 10275 +#line 10340 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10278 +#line 10343 [TRAINER_CATHERINE_1] = { -#line 10279 +#line 10344 .trainerName = _("CATHERINE"), -#line 10280 +#line 10345 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10281 +#line 10346 .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = -#line 10282 +#line 10347 F_TRAINER_FEMALE | -#line 10283 +#line 10348 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10284 +#line 10349 .items = { ITEM_FULL_RESTORE }, -#line 10285 +#line 10350 .doubleBattle = FALSE, -#line 10286 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, +#line 10351 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10288 +#line 10353 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10290 +#line 10355 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10289 +#line 10354 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10292 +#line 10357 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10294 +#line 10359 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10293 +#line 10358 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10296 +#line 10361 [TRAINER_JENNA] = { -#line 10297 +#line 10362 .trainerName = _("JENNA"), -#line 10298 +#line 10363 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10299 +#line 10364 .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = -#line 10300 +#line 10365 F_TRAINER_FEMALE | -#line 10301 +#line 10366 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10302 +#line 10367 .items = { ITEM_FULL_RESTORE }, -#line 10303 +#line 10368 .doubleBattle = FALSE, -#line 10304 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, +#line 10369 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 10306 +#line 10371 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10308 +#line 10373 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10307 +#line 10372 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10310 +#line 10375 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10312 +#line 10377 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10311 +#line 10376 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10314 +#line 10379 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10316 +#line 10381 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10315 +#line 10380 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10318 +#line 10383 [TRAINER_SOPHIA] = { -#line 10319 +#line 10384 .trainerName = _("SOPHIA"), -#line 10320 +#line 10385 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10321 +#line 10386 .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = -#line 10322 +#line 10387 F_TRAINER_FEMALE | -#line 10323 +#line 10388 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10324 +#line 10389 .items = { ITEM_FULL_RESTORE }, -#line 10325 +#line 10390 .doubleBattle = FALSE, -#line 10326 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 10391 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10328 +#line 10393 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10330 +#line 10395 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10329 +#line 10394 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10332 +#line 10397 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10334 +#line 10399 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10333 +#line 10398 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10336 +#line 10401 [TRAINER_CATHERINE_2] = { -#line 10337 +#line 10402 .trainerName = _("CATHERINE"), -#line 10338 +#line 10403 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10339 +#line 10404 .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = -#line 10340 +#line 10405 F_TRAINER_FEMALE | -#line 10341 +#line 10406 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10342 +#line 10407 .items = { ITEM_FULL_RESTORE }, -#line 10343 +#line 10408 .doubleBattle = FALSE, -#line 10344 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, +#line 10409 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10346 +#line 10411 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10348 +#line 10413 .iv = TRAINER_PARTY_IVS(7, 7, 7, 7, 7, 7), -#line 10347 +#line 10412 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10350 +#line 10415 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10352 +#line 10417 .iv = TRAINER_PARTY_IVS(7, 7, 7, 7, 7, 7), -#line 10351 +#line 10416 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10354 +#line 10419 [TRAINER_CATHERINE_3] = { -#line 10355 +#line 10420 .trainerName = _("CATHERINE"), -#line 10356 +#line 10421 .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10357 +#line 10422 .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = -#line 10358 +#line 10423 F_TRAINER_FEMALE | -#line 10359 +#line 10424 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10360 +#line 10425 .items = { ITEM_FULL_RESTORE }, -#line 10361 +#line 10426 .doubleBattle = FALSE, -#line 10362 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 10427 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10364 +#line 10429 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10366 +#line 10431 .iv = TRAINER_PARTY_IVS(8, 8, 8, 8, 8, 8), -#line 10365 +#line 10430 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10368 +#line 10433 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10370 +#line 10435 .iv = TRAINER_PARTY_IVS(8, 8, 8, 8, 8, 8), -#line 10369 +#line 10434 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10372 +#line 10437 [TRAINER_CATHERINE_4] = { -#line 10373 - .trainerName = _("CATHERINE"), -#line 10374 - .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10375 - .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, - .encounterMusic_gender = -#line 10376 -F_TRAINER_FEMALE | -#line 10377 - TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10378 - .items = { ITEM_FULL_RESTORE }, -#line 10379 - .doubleBattle = FALSE, -#line 10380 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 10382 - .species = SPECIES_GLOOM, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10384 - .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 10383 - .lvl = 36, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 10386 - .species = SPECIES_ROSELIA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10388 - .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 10387 - .lvl = 36, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 10390 - [TRAINER_CATHERINE_5] = - { -#line 10391 - .trainerName = _("CATHERINE"), -#line 10392 - .trainerClass = TRAINER_CLASS_PKMN_RANGER, -#line 10393 - .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, - .encounterMusic_gender = -#line 10394 -F_TRAINER_FEMALE | -#line 10395 - TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10396 - .items = { ITEM_FULL_RESTORE }, -#line 10397 - .doubleBattle = FALSE, -#line 10398 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 10400 - .species = SPECIES_BELLOSSOM, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10402 - .iv = TRAINER_PARTY_IVS(10, 10, 10, 10, 10, 10), -#line 10401 - .lvl = 39, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 10404 - .species = SPECIES_ROSELIA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10406 - .iv = TRAINER_PARTY_IVS(10, 10, 10, 10, 10, 10), -#line 10405 - .lvl = 39, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 10408 - [TRAINER_JULIO] = - { -#line 10409 - .trainerName = _("JULIO"), -#line 10410 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 10411 - .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, - .encounterMusic_gender = -#line 10413 - TRAINER_ENCOUNTER_MUSIC_MALE, -#line 10414 - .doubleBattle = FALSE, -#line 10415 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 10417 - .species = SPECIES_MAGNEMITE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10419 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10418 - .lvl = 21, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 10421 - [TRAINER_GRUNT_SEAFLOOR_CAVERN_5] = - { -#line 10422 - .trainerName = _("GRUNT"), -#line 10423 - .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 10424 - .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, - .encounterMusic_gender = -#line 10426 - TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 10427 - .doubleBattle = FALSE, -#line 10428 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 10430 - .species = SPECIES_MIGHTYENA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10432 - .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10431 - .lvl = 35, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 10434 - .species = SPECIES_GOLBAT, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10436 - .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10435 - .lvl = 35, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, #line 10438 - [TRAINER_GRUNT_UNUSED] = - { + .trainerName = _("CATHERINE"), #line 10439 - .trainerName = _("GRUNT"), + .trainerClass = TRAINER_CLASS_PKMN_RANGER, #line 10440 - .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 10441 - .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, + .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = -#line 10442 +#line 10441 F_TRAINER_FEMALE | +#line 10442 + TRAINER_ENCOUNTER_MUSIC_COOL, #line 10443 - TRAINER_ENCOUNTER_MUSIC_AQUA, + .items = { ITEM_FULL_RESTORE }, #line 10444 .doubleBattle = FALSE, #line 10445 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { { #line 10447 - .species = SPECIES_WAILMER, + .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, #line 10449 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), + .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), #line 10448 - .lvl = 31, + .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { #line 10451 - .species = SPECIES_ZUBAT, + .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, #line 10453 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), + .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), #line 10452 - .lvl = 31, + .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, #line 10455 - [TRAINER_GRUNT_MT_PYRE_4] = + [TRAINER_CATHERINE_5] = { #line 10456 - .trainerName = _("GRUNT"), + .trainerName = _("CATHERINE"), #line 10457 - .trainerClass = TRAINER_CLASS_TEAM_AQUA, + .trainerClass = TRAINER_CLASS_PKMN_RANGER, #line 10458 - .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, + .trainerPic = TRAINER_PIC_POKEMON_RANGER_F, .encounterMusic_gender = #line 10459 F_TRAINER_FEMALE | #line 10460 - TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 10461 - .doubleBattle = FALSE, -#line 10462 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 10464 - .species = SPECIES_WAILMER, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10466 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10465 - .lvl = 30, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 10468 - .species = SPECIES_ZUBAT, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10470 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10469 - .lvl = 30, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 10472 - [TRAINER_GRUNT_JAGGED_PASS] = - { -#line 10473 - .trainerName = _("GRUNT"), -#line 10474 - .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 10475 - .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, - .encounterMusic_gender = -#line 10477 - TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10478 - .doubleBattle = FALSE, -#line 10479 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 10481 - .species = SPECIES_POOCHYENA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10483 - .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10482 - .lvl = 22, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 10485 - .species = SPECIES_NUMEL, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10487 - .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10486 - .lvl = 22, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 10489 - [TRAINER_MARC] = - { -#line 10490 - .trainerName = _("MARC"), -#line 10491 - .trainerClass = TRAINER_CLASS_HIKER, -#line 10492 - .trainerPic = TRAINER_PIC_HIKER, - .encounterMusic_gender = -#line 10494 - TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 10495 - .doubleBattle = FALSE, -#line 10496 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 10498 - .species = SPECIES_GEODUDE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10500 - .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 10499 - .lvl = 8, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 10502 - .species = SPECIES_GEODUDE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10504 - .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 10503 - .lvl = 8, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 10506 - [TRAINER_BRENDEN] = - { -#line 10507 - .trainerName = _("BRENDEN"), -#line 10508 - .trainerClass = TRAINER_CLASS_SAILOR, -#line 10509 - .trainerPic = TRAINER_PIC_SAILOR, - .encounterMusic_gender = -#line 10511 - TRAINER_ENCOUNTER_MUSIC_MALE, -#line 10512 - .doubleBattle = FALSE, -#line 10513 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 10515 - .species = SPECIES_MACHOP, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10517 - .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 10516 - .lvl = 13, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 10519 - [TRAINER_LILITH] = - { -#line 10520 - .trainerName = _("LILITH"), -#line 10521 - .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 10522 - .trainerPic = TRAINER_PIC_BATTLE_GIRL, - .encounterMusic_gender = -#line 10523 -F_TRAINER_FEMALE | -#line 10524 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 10525 - .doubleBattle = FALSE, -#line 10526 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 10528 - .species = SPECIES_MEDITITE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10530 - .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 10529 - .lvl = 13, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 10532 - [TRAINER_CRISTIAN] = - { -#line 10533 - .trainerName = _("CRISTIAN"), -#line 10534 - .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 10535 - .trainerPic = TRAINER_PIC_BLACK_BELT, - .encounterMusic_gender = -#line 10537 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 10538 - .doubleBattle = FALSE, -#line 10539 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 10541 - .species = SPECIES_MAKUHITA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10543 - .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 10542 - .lvl = 13, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 10545 - [TRAINER_SYLVIA] = - { -#line 10546 - .trainerName = _("SYLVIA"), -#line 10547 - .trainerClass = TRAINER_CLASS_HEX_MANIAC, -#line 10548 - .trainerPic = TRAINER_PIC_HEX_MANIAC, - .encounterMusic_gender = -#line 10549 -F_TRAINER_FEMALE | -#line 10550 - TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 10551 - .doubleBattle = FALSE, -#line 10552 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 10554 - .species = SPECIES_MEDITITE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10556 - .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 10555 - .lvl = 36, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 10558 - [TRAINER_LEONARDO] = - { -#line 10559 - .trainerName = _("LEONARDO"), -#line 10560 - .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 10561 - .trainerPic = TRAINER_PIC_SWIMMER_M, - .encounterMusic_gender = -#line 10563 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 10564 - .doubleBattle = FALSE, -#line 10565 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 10567 - .species = SPECIES_CARVANHA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10569 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10568 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 10571 - [TRAINER_ATHENA] = - { -#line 10572 - .trainerName = _("ATHENA"), -#line 10573 - .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 10574 - .trainerPic = TRAINER_PIC_COOLTRAINER_F, - .encounterMusic_gender = -#line 10575 -F_TRAINER_FEMALE | -#line 10576 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10577 - .items = { ITEM_HYPER_POTION }, -#line 10578 +#line 10461 + .items = { ITEM_FULL_RESTORE }, +#line 10462 .doubleBattle = FALSE, -#line 10579 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 10463 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10581 - .species = SPECIES_MANECTRIC, +#line 10465 + .species = SPECIES_BELLOSSOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10583 - .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 10582 - .lvl = 32, +#line 10467 + .iv = TRAINER_PARTY_IVS(10, 10, 10, 10, 10, 10), +#line 10466 + .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 10584 - MOVE_THUNDER, - MOVE_THUNDER_WAVE, - MOVE_QUICK_ATTACK, - }, }, { -#line 10588 - .species = SPECIES_LINOONE, +#line 10469 + .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10590 - .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 10589 - .lvl = 32, +#line 10471 + .iv = TRAINER_PARTY_IVS(10, 10, 10, 10, 10, 10), +#line 10470 + .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, - .moves = { -#line 10591 - MOVE_SURF, - MOVE_THIEF, - }, }, }, }, -#line 10594 - [TRAINER_HARRISON] = +#line 10473 + [TRAINER_JULIO] = { -#line 10595 - .trainerName = _("HARRISON"), -#line 10596 - .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 10597 - .trainerPic = TRAINER_PIC_SWIMMER_M, +#line 10474 + .trainerName = _("JULIO"), +#line 10475 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 10476 + .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_M, .encounterMusic_gender = -#line 10599 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 10600 +#line 10478 + TRAINER_ENCOUNTER_MUSIC_MALE, +#line 10479 .doubleBattle = FALSE, -#line 10601 +#line 10480 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10603 - .species = SPECIES_TENTACRUEL, +#line 10482 + .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10605 +#line 10484 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10604 +#line 10483 + .lvl = 21, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10486 + [TRAINER_GRUNT_SEAFLOOR_CAVERN_5] = + { +#line 10487 + .trainerName = _("GRUNT"), +#line 10488 + .trainerClass = TRAINER_CLASS_TEAM_AQUA, +#line 10489 + .trainerPic = TRAINER_PIC_AQUA_GRUNT_M, + .encounterMusic_gender = +#line 10491 + TRAINER_ENCOUNTER_MUSIC_AQUA, +#line 10492 + .doubleBattle = FALSE, +#line 10493 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 10495 + .species = SPECIES_MIGHTYENA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10497 + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), +#line 10496 + .lvl = 35, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 10499 + .species = SPECIES_GOLBAT, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10501 + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), +#line 10500 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10607 - [TRAINER_GRUNT_MT_CHIMNEY_2] = +#line 10503 + [TRAINER_GRUNT_UNUSED] = { -#line 10608 +#line 10504 .trainerName = _("GRUNT"), -#line 10609 +#line 10505 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 10610 - .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, +#line 10506 + .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = -#line 10612 - TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10613 +#line 10507 +F_TRAINER_FEMALE | +#line 10508 + TRAINER_ENCOUNTER_MUSIC_AQUA, +#line 10509 .doubleBattle = FALSE, -#line 10614 +#line 10510 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, + .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10616 +#line 10512 + .species = SPECIES_WAILMER, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10514 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 10513 + .lvl = 31, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 10516 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10618 +#line 10518 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10617 - .lvl = 20, +#line 10517 + .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10620 - [TRAINER_CLARENCE] = +#line 10520 + [TRAINER_GRUNT_MT_PYRE_4] = { -#line 10621 - .trainerName = _("CLARENCE"), -#line 10622 - .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 10623 - .trainerPic = TRAINER_PIC_SWIMMER_M, +#line 10521 + .trainerName = _("GRUNT"), +#line 10522 + .trainerClass = TRAINER_CLASS_TEAM_AQUA, +#line 10523 + .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = -#line 10625 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 10626 - .doubleBattle = FALSE, -#line 10627 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 10629 - .species = SPECIES_SHARPEDO, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10631 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10630 - .lvl = 34, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 10633 - [TRAINER_TERRY] = - { -#line 10634 - .trainerName = _("TERRY"), -#line 10635 - .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 10636 - .trainerPic = TRAINER_PIC_PSYCHIC_F, - .encounterMusic_gender = -#line 10637 +#line 10524 F_TRAINER_FEMALE | -#line 10638 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 10639 +#line 10525 + TRAINER_ENCOUNTER_MUSIC_AQUA, +#line 10526 .doubleBattle = FALSE, -#line 10640 +#line 10527 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, + .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10642 - .species = SPECIES_GIRAFARIG, +#line 10529 + .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10644 +#line 10531 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10643 - .lvl = 37, +#line 10530 + .lvl = 30, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 10533 + .species = SPECIES_ZUBAT, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10535 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 10534 + .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10646 - [TRAINER_NATE] = +#line 10537 + [TRAINER_GRUNT_JAGGED_PASS] = { -#line 10647 - .trainerName = _("NATE"), -#line 10648 - .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 10649 - .trainerPic = TRAINER_PIC_GENTLEMAN, +#line 10538 + .trainerName = _("GRUNT"), +#line 10539 + .trainerClass = TRAINER_CLASS_TEAM_MAGMA, +#line 10540 + .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 10651 - TRAINER_ENCOUNTER_MUSIC_RICH, -#line 10652 +#line 10542 + TRAINER_ENCOUNTER_MUSIC_MAGMA, +#line 10543 .doubleBattle = FALSE, -#line 10653 +#line 10544 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 10546 + .species = SPECIES_POOCHYENA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10548 + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), +#line 10547 + .lvl = 22, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 10550 + .species = SPECIES_NUMEL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10552 + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), +#line 10551 + .lvl = 22, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10554 + [TRAINER_MARC] = + { +#line 10555 + .trainerName = _("MARC"), +#line 10556 + .trainerClass = TRAINER_CLASS_HIKER, +#line 10557 + .trainerPic = TRAINER_PIC_HIKER, + .encounterMusic_gender = +#line 10559 + TRAINER_ENCOUNTER_MUSIC_HIKER, +#line 10560 + .doubleBattle = FALSE, +#line 10561 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 10563 + .species = SPECIES_GEODUDE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10565 + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), +#line 10564 + .lvl = 8, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 10567 + .species = SPECIES_GEODUDE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10569 + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), +#line 10568 + .lvl = 8, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10571 + [TRAINER_BRENDEN] = + { +#line 10572 + .trainerName = _("BRENDEN"), +#line 10573 + .trainerClass = TRAINER_CLASS_SAILOR, +#line 10574 + .trainerPic = TRAINER_PIC_SAILOR, + .encounterMusic_gender = +#line 10576 + TRAINER_ENCOUNTER_MUSIC_MALE, +#line 10577 + .doubleBattle = FALSE, +#line 10578 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10655 - .species = SPECIES_SPOINK, +#line 10580 + .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10657 +#line 10582 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 10656 +#line 10581 + .lvl = 13, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10584 + [TRAINER_LILITH] = + { +#line 10585 + .trainerName = _("LILITH"), +#line 10586 + .trainerClass = TRAINER_CLASS_BATTLE_GIRL, +#line 10587 + .trainerPic = TRAINER_PIC_BATTLE_GIRL, + .encounterMusic_gender = +#line 10588 +F_TRAINER_FEMALE | +#line 10589 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 10590 + .doubleBattle = FALSE, +#line 10591 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 10593 + .species = SPECIES_MEDITITE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10595 + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), +#line 10594 + .lvl = 13, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10597 + [TRAINER_CRISTIAN] = + { +#line 10598 + .trainerName = _("CRISTIAN"), +#line 10599 + .trainerClass = TRAINER_CLASS_BLACK_BELT, +#line 10600 + .trainerPic = TRAINER_PIC_BLACK_BELT, + .encounterMusic_gender = +#line 10602 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 10603 + .doubleBattle = FALSE, +#line 10604 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 10606 + .species = SPECIES_MAKUHITA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10608 + .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), +#line 10607 + .lvl = 13, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10610 + [TRAINER_SYLVIA] = + { +#line 10611 + .trainerName = _("SYLVIA"), +#line 10612 + .trainerClass = TRAINER_CLASS_HEX_MANIAC, +#line 10613 + .trainerPic = TRAINER_PIC_HEX_MANIAC, + .encounterMusic_gender = +#line 10614 +F_TRAINER_FEMALE | +#line 10615 + TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, +#line 10616 + .doubleBattle = FALSE, +#line 10617 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 10619 + .species = SPECIES_MEDITITE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10621 + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), +#line 10620 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, +#line 10623 + [TRAINER_LEONARDO] = + { +#line 10624 + .trainerName = _("LEONARDO"), +#line 10625 + .trainerClass = TRAINER_CLASS_SWIMMER_M, +#line 10626 + .trainerPic = TRAINER_PIC_SWIMMER_M, + .encounterMusic_gender = +#line 10628 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 10629 + .doubleBattle = FALSE, +#line 10630 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 10632 + .species = SPECIES_CARVANHA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10634 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 10633 + .lvl = 34, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10636 + [TRAINER_ATHENA] = + { +#line 10637 + .trainerName = _("ATHENA"), +#line 10638 + .trainerClass = TRAINER_CLASS_COOLTRAINER, +#line 10639 + .trainerPic = TRAINER_PIC_COOLTRAINER_F, + .encounterMusic_gender = +#line 10640 +F_TRAINER_FEMALE | +#line 10641 + TRAINER_ENCOUNTER_MUSIC_COOL, +#line 10642 + .items = { ITEM_HYPER_POTION }, +#line 10643 + .doubleBattle = FALSE, +#line 10644 + .aiFlags = AI_FLAG_BASIC_TRAINER, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 10646 + .species = SPECIES_MANECTRIC, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10648 + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), +#line 10647 + .lvl = 32, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 10649 + MOVE_THUNDER, + MOVE_THUNDER_WAVE, + MOVE_QUICK_ATTACK, + }, + }, + { +#line 10653 + .species = SPECIES_LINOONE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10655 + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), +#line 10654 + .lvl = 32, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + .moves = { +#line 10656 + MOVE_SURF, + MOVE_THIEF, + }, + }, + }, + }, #line 10659 - [TRAINER_KATHLEEN] = + [TRAINER_HARRISON] = { #line 10660 - .trainerName = _("KATHLEEN"), + .trainerName = _("HARRISON"), #line 10661 - .trainerClass = TRAINER_CLASS_HEX_MANIAC, + .trainerClass = TRAINER_CLASS_SWIMMER_M, #line 10662 - .trainerPic = TRAINER_PIC_HEX_MANIAC, + .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 10663 -F_TRAINER_FEMALE | #line 10664 - TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, + TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 10665 .doubleBattle = FALSE, #line 10666 @@ -26900,29 +26736,29 @@ F_TRAINER_FEMALE | { { #line 10668 - .species = SPECIES_KADABRA, + .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, #line 10670 - .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 10669 - .lvl = 36, + .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, #line 10672 - [TRAINER_CLIFFORD] = + [TRAINER_GRUNT_MT_CHIMNEY_2] = { #line 10673 - .trainerName = _("CLIFFORD"), + .trainerName = _("GRUNT"), #line 10674 - .trainerClass = TRAINER_CLASS_GENTLEMAN, + .trainerClass = TRAINER_CLASS_TEAM_MAGMA, #line 10675 - .trainerPic = TRAINER_PIC_GENTLEMAN, + .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = #line 10677 - TRAINER_ENCOUNTER_MUSIC_RICH, + TRAINER_ENCOUNTER_MUSIC_MAGMA, #line 10678 .doubleBattle = FALSE, #line 10679 @@ -26932,29 +26768,29 @@ F_TRAINER_FEMALE | { { #line 10681 - .species = SPECIES_GIRAFARIG, + .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, #line 10683 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 10682 - .lvl = 36, + .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, #line 10685 - [TRAINER_NICHOLAS] = + [TRAINER_CLARENCE] = { #line 10686 - .trainerName = _("NICHOLAS"), + .trainerName = _("CLARENCE"), #line 10687 - .trainerClass = TRAINER_CLASS_PSYCHIC, + .trainerClass = TRAINER_CLASS_SWIMMER_M, #line 10688 - .trainerPic = TRAINER_PIC_PSYCHIC_M, + .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = #line 10690 - TRAINER_ENCOUNTER_MUSIC_INTENSE, + TRAINER_ENCOUNTER_MUSIC_SWIMMER, #line 10691 .doubleBattle = FALSE, #line 10692 @@ -26964,2872 +26800,3036 @@ F_TRAINER_FEMALE | { { #line 10694 - .species = SPECIES_WOBBUFFET, + .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, #line 10696 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 10695 - .lvl = 36, + .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, #line 10698 - [TRAINER_GRUNT_SPACE_CENTER_3] = + [TRAINER_TERRY] = { #line 10699 - .trainerName = _("GRUNT"), + .trainerName = _("TERRY"), #line 10700 - .trainerClass = TRAINER_CLASS_TEAM_MAGMA, + .trainerClass = TRAINER_CLASS_PSYCHIC, #line 10701 - .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, + .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = #line 10702 F_TRAINER_FEMALE | #line 10703 - TRAINER_ENCOUNTER_MUSIC_MAGMA, + TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 10704 .doubleBattle = FALSE, #line 10705 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 10707 + .species = SPECIES_GIRAFARIG, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10709 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 10708 + .lvl = 37, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10711 + [TRAINER_NATE] = + { +#line 10712 + .trainerName = _("NATE"), +#line 10713 + .trainerClass = TRAINER_CLASS_GENTLEMAN, +#line 10714 + .trainerPic = TRAINER_PIC_GENTLEMAN, + .encounterMusic_gender = +#line 10716 + TRAINER_ENCOUNTER_MUSIC_RICH, +#line 10717 + .doubleBattle = FALSE, +#line 10718 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 10720 + .species = SPECIES_SPOINK, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10722 + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), +#line 10721 + .lvl = 36, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10724 + [TRAINER_KATHLEEN] = + { +#line 10725 + .trainerName = _("KATHLEEN"), +#line 10726 + .trainerClass = TRAINER_CLASS_HEX_MANIAC, +#line 10727 + .trainerPic = TRAINER_PIC_HEX_MANIAC, + .encounterMusic_gender = +#line 10728 +F_TRAINER_FEMALE | +#line 10729 + TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, +#line 10730 + .doubleBattle = FALSE, +#line 10731 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 10733 + .species = SPECIES_KADABRA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10735 + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), +#line 10734 + .lvl = 36, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10737 + [TRAINER_CLIFFORD] = + { +#line 10738 + .trainerName = _("CLIFFORD"), +#line 10739 + .trainerClass = TRAINER_CLASS_GENTLEMAN, +#line 10740 + .trainerPic = TRAINER_PIC_GENTLEMAN, + .encounterMusic_gender = +#line 10742 + TRAINER_ENCOUNTER_MUSIC_RICH, +#line 10743 + .doubleBattle = FALSE, +#line 10744 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 10746 + .species = SPECIES_GIRAFARIG, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10748 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 10747 + .lvl = 36, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10750 + [TRAINER_NICHOLAS] = + { +#line 10751 + .trainerName = _("NICHOLAS"), +#line 10752 + .trainerClass = TRAINER_CLASS_PSYCHIC, +#line 10753 + .trainerPic = TRAINER_PIC_PSYCHIC_M, + .encounterMusic_gender = +#line 10755 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 10756 + .doubleBattle = FALSE, +#line 10757 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 10759 + .species = SPECIES_WOBBUFFET, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10761 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 10760 + .lvl = 36, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10763 + [TRAINER_GRUNT_SPACE_CENTER_3] = + { +#line 10764 + .trainerName = _("GRUNT"), +#line 10765 + .trainerClass = TRAINER_CLASS_TEAM_MAGMA, +#line 10766 + .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, + .encounterMusic_gender = +#line 10767 +F_TRAINER_FEMALE | +#line 10768 + TRAINER_ENCOUNTER_MUSIC_MAGMA, +#line 10769 + .doubleBattle = FALSE, +#line 10770 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10707 - .species = SPECIES_ZUBAT, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10709 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10708 - .lvl = 31, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 10711 - .species = SPECIES_POOCHYENA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10713 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10712 - .lvl = 31, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 10715 - [TRAINER_GRUNT_SPACE_CENTER_4] = - { -#line 10716 - .trainerName = _("GRUNT"), -#line 10717 - .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 10718 - .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, - .encounterMusic_gender = -#line 10720 - TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10721 - .doubleBattle = FALSE, -#line 10722 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 10724 - .species = SPECIES_BALTOY, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10726 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10725 - .lvl = 32, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 10728 - [TRAINER_GRUNT_SPACE_CENTER_5] = - { -#line 10729 - .trainerName = _("GRUNT"), -#line 10730 - .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 10731 - .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, - .encounterMusic_gender = -#line 10733 - TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10734 - .doubleBattle = FALSE, -#line 10735 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 10737 - .species = SPECIES_ZUBAT, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10739 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10738 - .lvl = 32, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 10741 - [TRAINER_GRUNT_SPACE_CENTER_6] = - { -#line 10742 - .trainerName = _("GRUNT"), -#line 10743 - .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 10744 - .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, - .encounterMusic_gender = -#line 10746 - TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10747 - .doubleBattle = FALSE, -#line 10748 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 10750 - .species = SPECIES_MIGHTYENA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10752 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10751 - .lvl = 32, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 10754 - [TRAINER_GRUNT_SPACE_CENTER_7] = - { -#line 10755 - .trainerName = _("GRUNT"), -#line 10756 - .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 10757 - .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, - .encounterMusic_gender = -#line 10759 - TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10760 - .doubleBattle = FALSE, -#line 10761 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 10763 - .species = SPECIES_BALTOY, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10765 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10764 - .lvl = 32, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 10767 - [TRAINER_MACEY] = - { -#line 10768 - .trainerName = _("MACEY"), -#line 10769 - .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 10770 - .trainerPic = TRAINER_PIC_PSYCHIC_F, - .encounterMusic_gender = -#line 10771 -F_TRAINER_FEMALE | #line 10772 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 10773 - .doubleBattle = FALSE, + .species = SPECIES_ZUBAT, + .gender = TRAINER_MON_RANDOM_GENDER, #line 10774 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 10773 + .lvl = 31, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, { #line 10776 - .species = SPECIES_NATU, + .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, #line 10778 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 10777 - .lvl = 36, + .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, #line 10780 - [TRAINER_BRENDAN_RUSTBORO_TREECKO] = + [TRAINER_GRUNT_SPACE_CENTER_4] = { #line 10781 - .trainerName = _("BRENDAN"), + .trainerName = _("GRUNT"), #line 10782 - .trainerClass = TRAINER_CLASS_RIVAL, + .trainerClass = TRAINER_CLASS_TEAM_MAGMA, #line 10783 - .trainerPic = TRAINER_PIC_BRENDAN, + .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = #line 10785 - TRAINER_ENCOUNTER_MUSIC_MALE, + TRAINER_ENCOUNTER_MUSIC_MAGMA, #line 10786 .doubleBattle = FALSE, #line 10787 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 10789 - .species = SPECIES_LOTAD, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10791 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10790 - .lvl = 13, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 10793 - .species = SPECIES_TORCHIC, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10795 - .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10794 - .lvl = 15, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 10797 - [TRAINER_BRENDAN_RUSTBORO_MUDKIP] = - { -#line 10798 - .trainerName = _("BRENDAN"), -#line 10799 - .trainerClass = TRAINER_CLASS_RIVAL, -#line 10800 - .trainerPic = TRAINER_PIC_BRENDAN, - .encounterMusic_gender = -#line 10802 - TRAINER_ENCOUNTER_MUSIC_MALE, -#line 10803 - .doubleBattle = FALSE, -#line 10804 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 10806 - .species = SPECIES_WINGULL, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10808 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10807 - .lvl = 13, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 10810 - .species = SPECIES_TREECKO, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10812 - .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10811 - .lvl = 15, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 10814 - [TRAINER_PAXTON] = - { -#line 10815 - .trainerName = _("PAXTON"), -#line 10816 - .trainerClass = TRAINER_CLASS_EXPERT, -#line 10817 - .trainerPic = TRAINER_PIC_EXPERT_M, - .encounterMusic_gender = -#line 10819 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 10820 - .doubleBattle = FALSE, -#line 10821 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 10823 - .species = SPECIES_SWELLOW, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10825 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10824 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 10827 - .species = SPECIES_BRELOOM, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 10829 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10828 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 10831 - [TRAINER_ISABELLA] = - { -#line 10832 - .trainerName = _("ISABELLA"), -#line 10833 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 10834 - .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, - .encounterMusic_gender = -#line 10835 -F_TRAINER_FEMALE | -#line 10836 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 10837 - .doubleBattle = FALSE, -#line 10838 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 10840 +#line 10789 + .species = SPECIES_BALTOY, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10791 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 10790 + .lvl = 32, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10793 + [TRAINER_GRUNT_SPACE_CENTER_5] = + { +#line 10794 + .trainerName = _("GRUNT"), +#line 10795 + .trainerClass = TRAINER_CLASS_TEAM_MAGMA, +#line 10796 + .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, + .encounterMusic_gender = +#line 10798 + TRAINER_ENCOUNTER_MUSIC_MAGMA, +#line 10799 + .doubleBattle = FALSE, +#line 10800 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 10802 + .species = SPECIES_ZUBAT, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10804 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 10803 + .lvl = 32, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10806 + [TRAINER_GRUNT_SPACE_CENTER_6] = + { +#line 10807 + .trainerName = _("GRUNT"), +#line 10808 + .trainerClass = TRAINER_CLASS_TEAM_MAGMA, +#line 10809 + .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, + .encounterMusic_gender = +#line 10811 + TRAINER_ENCOUNTER_MUSIC_MAGMA, +#line 10812 + .doubleBattle = FALSE, +#line 10813 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 10815 + .species = SPECIES_MIGHTYENA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10817 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 10816 + .lvl = 32, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10819 + [TRAINER_GRUNT_SPACE_CENTER_7] = + { +#line 10820 + .trainerName = _("GRUNT"), +#line 10821 + .trainerClass = TRAINER_CLASS_TEAM_MAGMA, +#line 10822 + .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, + .encounterMusic_gender = +#line 10824 + TRAINER_ENCOUNTER_MUSIC_MAGMA, +#line 10825 + .doubleBattle = FALSE, +#line 10826 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 10828 + .species = SPECIES_BALTOY, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10830 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 10829 + .lvl = 32, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10832 + [TRAINER_MACEY] = + { +#line 10833 + .trainerName = _("MACEY"), +#line 10834 + .trainerClass = TRAINER_CLASS_PSYCHIC, +#line 10835 + .trainerPic = TRAINER_PIC_PSYCHIC_F, + .encounterMusic_gender = +#line 10836 +F_TRAINER_FEMALE | +#line 10837 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 10838 + .doubleBattle = FALSE, +#line 10839 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 10841 + .species = SPECIES_NATU, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10843 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 10842 + .lvl = 36, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10845 + [TRAINER_BRENDAN_RUSTBORO_TREECKO] = + { +#line 10846 + .trainerName = _("BRENDAN"), +#line 10847 + .trainerClass = TRAINER_CLASS_RIVAL, +#line 10848 + .trainerPic = TRAINER_PIC_BRENDAN, + .encounterMusic_gender = +#line 10850 + TRAINER_ENCOUNTER_MUSIC_MALE, +#line 10851 + .doubleBattle = FALSE, +#line 10852 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 10854 + .species = SPECIES_LOTAD, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10856 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 10855 + .lvl = 13, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 10858 + .species = SPECIES_TORCHIC, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10860 + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), +#line 10859 + .lvl = 15, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10862 + [TRAINER_BRENDAN_RUSTBORO_MUDKIP] = + { +#line 10863 + .trainerName = _("BRENDAN"), +#line 10864 + .trainerClass = TRAINER_CLASS_RIVAL, +#line 10865 + .trainerPic = TRAINER_PIC_BRENDAN, + .encounterMusic_gender = +#line 10867 + TRAINER_ENCOUNTER_MUSIC_MALE, +#line 10868 + .doubleBattle = FALSE, +#line 10869 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 10871 + .species = SPECIES_WINGULL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10873 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 10872 + .lvl = 13, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 10875 + .species = SPECIES_TREECKO, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10877 + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), +#line 10876 + .lvl = 15, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10879 + [TRAINER_PAXTON] = + { +#line 10880 + .trainerName = _("PAXTON"), +#line 10881 + .trainerClass = TRAINER_CLASS_EXPERT, +#line 10882 + .trainerPic = TRAINER_PIC_EXPERT_M, + .encounterMusic_gender = +#line 10884 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 10885 + .doubleBattle = FALSE, +#line 10886 + .aiFlags = AI_FLAG_BASIC_TRAINER, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 10888 + .species = SPECIES_SWELLOW, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10890 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 10889 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 10892 + .species = SPECIES_BRELOOM, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 10894 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 10893 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 10896 + [TRAINER_ISABELLA] = + { +#line 10897 + .trainerName = _("ISABELLA"), +#line 10898 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 10899 + .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_F, + .encounterMusic_gender = +#line 10900 +F_TRAINER_FEMALE | +#line 10901 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 10902 + .doubleBattle = FALSE, +#line 10903 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 10905 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10842 +#line 10907 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10841 +#line 10906 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10844 +#line 10909 [TRAINER_GRUNT_WEATHER_INST_5] = { -#line 10845 +#line 10910 .trainerName = _("GRUNT"), -#line 10846 +#line 10911 .trainerClass = TRAINER_CLASS_TEAM_AQUA, -#line 10847 +#line 10912 .trainerPic = TRAINER_PIC_AQUA_GRUNT_F, .encounterMusic_gender = -#line 10848 +#line 10913 F_TRAINER_FEMALE | -#line 10849 +#line 10914 TRAINER_ENCOUNTER_MUSIC_AQUA, -#line 10850 +#line 10915 .doubleBattle = FALSE, -#line 10851 +#line 10916 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10853 +#line 10918 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10855 +#line 10920 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10854 +#line 10919 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10857 +#line 10922 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10859 +#line 10924 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10858 +#line 10923 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10861 +#line 10926 [TRAINER_TABITHA_MT_CHIMNEY] = { -#line 10862 +#line 10927 .trainerName = _("TABITHA"), -#line 10863 +#line 10928 .trainerClass = TRAINER_CLASS_MAGMA_ADMIN, -#line 10864 +#line 10929 .trainerPic = TRAINER_PIC_MAGMA_ADMIN, .encounterMusic_gender = -#line 10866 +#line 10931 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10867 +#line 10932 .doubleBattle = FALSE, -#line 10868 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 10933 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 10870 +#line 10935 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10872 +#line 10937 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10871 +#line 10936 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10874 +#line 10939 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10876 +#line 10941 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10875 +#line 10940 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10878 +#line 10943 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10880 +#line 10945 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10879 +#line 10944 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10882 +#line 10947 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10884 +#line 10949 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10883 +#line 10948 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10886 +#line 10951 [TRAINER_JONATHAN] = { -#line 10887 +#line 10952 .trainerName = _("JONATHAN"), -#line 10888 +#line 10953 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 10889 +#line 10954 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 10891 +#line 10956 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 10892 +#line 10957 .items = { ITEM_HYPER_POTION }, -#line 10893 +#line 10958 .doubleBattle = FALSE, -#line 10894 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, +#line 10959 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10896 +#line 10961 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10898 +#line 10963 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10897 +#line 10962 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10900 +#line 10965 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10902 +#line 10967 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10901 +#line 10966 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10904 +#line 10969 [TRAINER_BRENDAN_RUSTBORO_TORCHIC] = { -#line 10905 +#line 10970 .trainerName = _("BRENDAN"), -#line 10906 +#line 10971 .trainerClass = TRAINER_CLASS_RIVAL, -#line 10907 +#line 10972 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 10909 +#line 10974 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 10910 +#line 10975 .doubleBattle = FALSE, -#line 10911 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 10976 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10913 +#line 10978 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10915 +#line 10980 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10914 +#line 10979 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10917 +#line 10982 .species = SPECIES_MUDKIP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10919 +#line 10984 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10918 +#line 10983 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10921 +#line 10986 [TRAINER_MAY_RUSTBORO_MUDKIP] = { -#line 10922 +#line 10987 .trainerName = _("MAY"), -#line 10923 +#line 10988 .trainerClass = TRAINER_CLASS_RIVAL, -#line 10924 +#line 10989 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 10925 +#line 10990 F_TRAINER_FEMALE | -#line 10926 +#line 10991 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 10927 +#line 10992 .doubleBattle = FALSE, -#line 10928 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, +#line 10993 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10930 +#line 10995 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10932 +#line 10997 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 10931 +#line 10996 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10934 +#line 10999 .species = SPECIES_TREECKO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10936 +#line 11001 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 10935 +#line 11000 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10938 +#line 11003 [TRAINER_MAXIE_MAGMA_HIDEOUT] = { -#line 10939 +#line 11004 .trainerName = _("MAXIE"), -#line 10940 +#line 11005 .trainerClass = TRAINER_CLASS_MAGMA_LEADER, -#line 10941 +#line 11006 .trainerPic = TRAINER_PIC_MAGMA_LEADER_MAXIE, .encounterMusic_gender = -#line 10943 +#line 11008 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10944 +#line 11009 .items = { ITEM_SUPER_POTION, ITEM_SUPER_POTION }, -#line 10945 +#line 11010 .doubleBattle = FALSE, -#line 10946 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 11011 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 10948 +#line 11013 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10950 +#line 11015 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 10949 +#line 11014 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10952 +#line 11017 .species = SPECIES_CROBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10954 +#line 11019 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 10953 +#line 11018 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10956 +#line 11021 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10958 +#line 11023 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 10957 +#line 11022 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10960 +#line 11025 [TRAINER_MAXIE_MT_CHIMNEY] = { -#line 10961 +#line 11026 .trainerName = _("MAXIE"), -#line 10962 +#line 11027 .trainerClass = TRAINER_CLASS_MAGMA_LEADER, -#line 10963 +#line 11028 .trainerPic = TRAINER_PIC_MAGMA_LEADER_MAXIE, .encounterMusic_gender = -#line 10965 +#line 11030 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 10966 +#line 11031 .items = { ITEM_SUPER_POTION, ITEM_SUPER_POTION }, -#line 10967 +#line 11032 .doubleBattle = FALSE, -#line 10968 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 11033 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 10970 +#line 11035 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10972 +#line 11037 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 10971 +#line 11036 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10974 +#line 11039 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10976 +#line 11041 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 10975 +#line 11040 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10978 +#line 11043 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10980 +#line 11045 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 10979 +#line 11044 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10982 +#line 11047 [TRAINER_TIANA] = { -#line 10983 +#line 11048 .trainerName = _("TIANA"), -#line 10984 +#line 11049 .trainerClass = TRAINER_CLASS_LASS, -#line 10985 +#line 11050 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 10986 +#line 11051 F_TRAINER_FEMALE | -#line 10987 +#line 11052 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 10988 +#line 11053 .doubleBattle = FALSE, -#line 10989 +#line 11054 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 10991 +#line 11056 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10993 +#line 11058 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10992 +#line 11057 .lvl = 4, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 10995 +#line 11060 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 10997 +#line 11062 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 10996 +#line 11061 .lvl = 4, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 10999 +#line 11064 [TRAINER_HALEY_1] = { -#line 11000 +#line 11065 .trainerName = _("HALEY"), -#line 11001 +#line 11066 .trainerClass = TRAINER_CLASS_LASS, -#line 11002 +#line 11067 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11003 +#line 11068 F_TRAINER_FEMALE | -#line 11004 +#line 11069 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11005 +#line 11070 .doubleBattle = FALSE, -#line 11006 +#line 11071 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11008 +#line 11073 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11010 +#line 11075 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11009 +#line 11074 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11012 +#line 11077 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11014 +#line 11079 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11013 +#line 11078 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11016 +#line 11081 [TRAINER_JANICE] = { -#line 11017 +#line 11082 .trainerName = _("JANICE"), -#line 11018 +#line 11083 .trainerClass = TRAINER_CLASS_LASS, -#line 11019 +#line 11084 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11020 +#line 11085 F_TRAINER_FEMALE | -#line 11021 +#line 11086 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11022 +#line 11087 .doubleBattle = FALSE, -#line 11023 +#line 11088 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11025 +#line 11090 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11027 +#line 11092 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11026 +#line 11091 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11029 +#line 11094 [TRAINER_VIVI] = { -#line 11030 +#line 11095 .trainerName = _("VIVI"), -#line 11031 +#line 11096 .trainerClass = TRAINER_CLASS_WINSTRATE, -#line 11032 +#line 11097 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11033 +#line 11098 F_TRAINER_FEMALE | -#line 11034 +#line 11099 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11035 +#line 11100 .doubleBattle = FALSE, -#line 11036 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 11101 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11038 +#line 11103 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11040 +#line 11105 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11039 +#line 11104 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11042 +#line 11107 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11044 +#line 11109 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11043 +#line 11108 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11046 +#line 11111 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11048 +#line 11113 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11047 +#line 11112 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11050 +#line 11115 [TRAINER_HALEY_2] = { -#line 11051 +#line 11116 .trainerName = _("HALEY"), -#line 11052 +#line 11117 .trainerClass = TRAINER_CLASS_LASS, -#line 11053 +#line 11118 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11054 +#line 11119 F_TRAINER_FEMALE | -#line 11055 +#line 11120 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11056 +#line 11121 .doubleBattle = FALSE, -#line 11057 +#line 11122 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11059 +#line 11124 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11061 +#line 11126 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11060 +#line 11125 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11063 +#line 11128 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11065 +#line 11130 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11064 +#line 11129 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11067 +#line 11132 [TRAINER_HALEY_3] = { -#line 11068 +#line 11133 .trainerName = _("HALEY"), -#line 11069 +#line 11134 .trainerClass = TRAINER_CLASS_LASS, -#line 11070 +#line 11135 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11071 +#line 11136 F_TRAINER_FEMALE | -#line 11072 +#line 11137 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11073 +#line 11138 .doubleBattle = FALSE, -#line 11074 +#line 11139 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11076 +#line 11141 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11078 +#line 11143 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11077 +#line 11142 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11080 +#line 11145 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11082 +#line 11147 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11081 +#line 11146 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11084 +#line 11149 [TRAINER_HALEY_4] = { -#line 11085 +#line 11150 .trainerName = _("HALEY"), -#line 11086 +#line 11151 .trainerClass = TRAINER_CLASS_LASS, -#line 11087 +#line 11152 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11088 +#line 11153 F_TRAINER_FEMALE | -#line 11089 +#line 11154 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11090 +#line 11155 .doubleBattle = FALSE, -#line 11091 +#line 11156 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11093 +#line 11158 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11095 +#line 11160 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11094 +#line 11159 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11097 +#line 11162 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11099 +#line 11164 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11098 +#line 11163 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11101 +#line 11166 [TRAINER_HALEY_5] = { -#line 11102 +#line 11167 .trainerName = _("HALEY"), -#line 11103 +#line 11168 .trainerClass = TRAINER_CLASS_LASS, -#line 11104 +#line 11169 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11105 +#line 11170 F_TRAINER_FEMALE | -#line 11106 +#line 11171 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11107 +#line 11172 .doubleBattle = FALSE, -#line 11108 +#line 11173 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11110 +#line 11175 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11112 +#line 11177 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11111 +#line 11176 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11114 +#line 11179 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11116 +#line 11181 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11115 +#line 11180 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11118 +#line 11183 .species = SPECIES_BRELOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11120 +#line 11185 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11119 +#line 11184 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11122 +#line 11187 [TRAINER_SALLY] = { -#line 11123 +#line 11188 .trainerName = _("SALLY"), -#line 11124 +#line 11189 .trainerClass = TRAINER_CLASS_LASS, -#line 11125 +#line 11190 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11126 +#line 11191 F_TRAINER_FEMALE | -#line 11127 +#line 11192 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11128 +#line 11193 .doubleBattle = FALSE, -#line 11129 +#line 11194 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11131 +#line 11196 .species = SPECIES_ODDISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11133 +#line 11198 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11132 +#line 11197 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11135 +#line 11200 [TRAINER_ROBIN] = { -#line 11136 +#line 11201 .trainerName = _("ROBIN"), -#line 11137 +#line 11202 .trainerClass = TRAINER_CLASS_LASS, -#line 11138 +#line 11203 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11139 +#line 11204 F_TRAINER_FEMALE | -#line 11140 +#line 11205 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11141 +#line 11206 .doubleBattle = FALSE, -#line 11142 +#line 11207 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11144 +#line 11209 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11146 +#line 11211 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11145 +#line 11210 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11148 +#line 11213 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11150 +#line 11215 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11149 +#line 11214 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11152 +#line 11217 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11154 +#line 11219 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11153 +#line 11218 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11156 +#line 11221 [TRAINER_ANDREA] = { -#line 11157 +#line 11222 .trainerName = _("ANDREA"), -#line 11158 +#line 11223 .trainerClass = TRAINER_CLASS_LASS, -#line 11159 +#line 11224 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11160 +#line 11225 F_TRAINER_FEMALE | -#line 11161 +#line 11226 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11162 +#line 11227 .doubleBattle = FALSE, -#line 11163 +#line 11228 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11165 +#line 11230 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11167 +#line 11232 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11166 +#line 11231 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11169 +#line 11234 [TRAINER_CRISSY] = { -#line 11170 +#line 11235 .trainerName = _("CRISSY"), -#line 11171 +#line 11236 .trainerClass = TRAINER_CLASS_LASS, -#line 11172 +#line 11237 .trainerPic = TRAINER_PIC_LASS, .encounterMusic_gender = -#line 11173 +#line 11238 F_TRAINER_FEMALE | -#line 11174 +#line 11239 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11175 +#line 11240 .doubleBattle = FALSE, -#line 11176 +#line 11241 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11178 +#line 11243 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11180 +#line 11245 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11179 +#line 11244 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11182 +#line 11247 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11184 +#line 11249 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11183 +#line 11248 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11186 +#line 11251 [TRAINER_RICK] = { -#line 11187 +#line 11252 .trainerName = _("RICK"), -#line 11188 +#line 11253 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11189 +#line 11254 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11191 +#line 11256 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11192 +#line 11257 .doubleBattle = FALSE, -#line 11193 +#line 11258 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11195 +#line 11260 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11197 +#line 11262 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11196 +#line 11261 .lvl = 4, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11199 +#line 11264 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11201 +#line 11266 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11200 +#line 11265 .lvl = 4, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11203 +#line 11268 [TRAINER_LYLE] = { -#line 11204 +#line 11269 .trainerName = _("LYLE"), -#line 11205 +#line 11270 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11206 +#line 11271 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11208 +#line 11273 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11209 +#line 11274 .doubleBattle = FALSE, -#line 11210 +#line 11275 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 11212 +#line 11277 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11214 +#line 11279 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11213 +#line 11278 .lvl = 3, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11216 +#line 11281 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11218 +#line 11283 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11217 +#line 11282 .lvl = 3, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11220 +#line 11285 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11222 +#line 11287 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11221 +#line 11286 .lvl = 3, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11224 +#line 11289 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11226 +#line 11291 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11225 +#line 11290 .lvl = 3, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11228 +#line 11293 [TRAINER_JOSE] = { -#line 11229 +#line 11294 .trainerName = _("JOSE"), -#line 11230 +#line 11295 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11231 +#line 11296 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11233 +#line 11298 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11234 +#line 11299 .doubleBattle = FALSE, -#line 11235 +#line 11300 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11237 +#line 11302 .species = SPECIES_WURMPLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11239 +#line 11304 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 11238 +#line 11303 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11241 +#line 11306 .species = SPECIES_NINCADA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11243 +#line 11308 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 11242 +#line 11307 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11245 +#line 11310 [TRAINER_DOUG] = { -#line 11246 +#line 11311 .trainerName = _("DOUG"), -#line 11247 +#line 11312 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11248 +#line 11313 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11250 +#line 11315 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11251 +#line 11316 .doubleBattle = FALSE, -#line 11252 +#line 11317 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11254 +#line 11319 .species = SPECIES_NINCADA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11256 +#line 11321 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11255 +#line 11320 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11258 +#line 11323 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11260 +#line 11325 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11259 +#line 11324 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11262 +#line 11327 [TRAINER_GREG] = { -#line 11263 +#line 11328 .trainerName = _("GREG"), -#line 11264 +#line 11329 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11265 +#line 11330 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11267 +#line 11332 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11268 +#line 11333 .doubleBattle = FALSE, -#line 11269 +#line 11334 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11271 +#line 11336 .species = SPECIES_VOLBEAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11273 +#line 11338 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11272 +#line 11337 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11275 +#line 11340 .species = SPECIES_ILLUMISE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11277 +#line 11342 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11276 +#line 11341 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11279 +#line 11344 [TRAINER_KENT] = { -#line 11280 +#line 11345 .trainerName = _("KENT"), -#line 11281 +#line 11346 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11282 +#line 11347 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11284 +#line 11349 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11285 +#line 11350 .doubleBattle = FALSE, -#line 11286 +#line 11351 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11288 +#line 11353 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11290 +#line 11355 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11289 +#line 11354 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11292 +#line 11357 [TRAINER_JAMES_1] = { -#line 11293 +#line 11358 .trainerName = _("JAMES"), -#line 11294 +#line 11359 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11295 +#line 11360 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11297 +#line 11362 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11298 +#line 11363 .doubleBattle = FALSE, -#line 11299 +#line 11364 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11301 +#line 11366 .species = SPECIES_NINCADA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11303 +#line 11368 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11302 +#line 11367 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11305 +#line 11370 .species = SPECIES_NINCADA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11307 +#line 11372 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11306 +#line 11371 .lvl = 6, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11309 +#line 11374 [TRAINER_JAMES_2] = { -#line 11310 +#line 11375 .trainerName = _("JAMES"), -#line 11311 +#line 11376 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11312 +#line 11377 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11314 +#line 11379 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11315 +#line 11380 .doubleBattle = FALSE, -#line 11316 +#line 11381 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11318 +#line 11383 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11320 +#line 11385 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11319 +#line 11384 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11322 +#line 11387 [TRAINER_JAMES_3] = { -#line 11323 +#line 11388 .trainerName = _("JAMES"), -#line 11324 +#line 11389 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11325 +#line 11390 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11327 +#line 11392 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11328 +#line 11393 .doubleBattle = FALSE, -#line 11329 +#line 11394 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11331 +#line 11396 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11333 +#line 11398 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11332 +#line 11397 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11335 +#line 11400 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11337 +#line 11402 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11336 +#line 11401 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11339 +#line 11404 [TRAINER_JAMES_4] = { -#line 11340 +#line 11405 .trainerName = _("JAMES"), -#line 11341 +#line 11406 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11342 +#line 11407 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11344 +#line 11409 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11345 +#line 11410 .doubleBattle = FALSE, -#line 11346 +#line 11411 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11348 +#line 11413 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11350 +#line 11415 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11349 +#line 11414 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11352 +#line 11417 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11354 +#line 11419 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11353 +#line 11418 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11356 +#line 11421 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11358 +#line 11423 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11357 +#line 11422 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11360 +#line 11425 [TRAINER_JAMES_5] = { -#line 11361 +#line 11426 .trainerName = _("JAMES"), -#line 11362 +#line 11427 .trainerClass = TRAINER_CLASS_BUG_CATCHER, -#line 11363 +#line 11428 .trainerPic = TRAINER_PIC_BUG_CATCHER, .encounterMusic_gender = -#line 11365 +#line 11430 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11366 +#line 11431 .doubleBattle = FALSE, -#line 11367 +#line 11432 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 11369 +#line 11434 .species = SPECIES_SURSKIT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11371 +#line 11436 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11370 +#line 11435 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11373 +#line 11438 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11375 +#line 11440 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11374 +#line 11439 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11377 +#line 11442 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11379 +#line 11444 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11378 +#line 11443 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11381 +#line 11446 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11383 +#line 11448 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11382 +#line 11447 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11385 +#line 11450 [TRAINER_BRICE] = { -#line 11386 +#line 11451 .trainerName = _("BRICE"), -#line 11387 +#line 11452 .trainerClass = TRAINER_CLASS_HIKER, -#line 11388 +#line 11453 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11390 +#line 11455 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11391 +#line 11456 .doubleBattle = FALSE, -#line 11392 +#line 11457 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11394 +#line 11459 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11396 +#line 11461 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11395 +#line 11460 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11398 +#line 11463 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11400 +#line 11465 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11399 +#line 11464 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11402 +#line 11467 [TRAINER_TRENT_1] = { -#line 11403 +#line 11468 .trainerName = _("TRENT"), -#line 11404 +#line 11469 .trainerClass = TRAINER_CLASS_HIKER, -#line 11405 +#line 11470 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11407 +#line 11472 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11408 +#line 11473 .doubleBattle = FALSE, -#line 11409 +#line 11474 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11411 +#line 11476 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11413 +#line 11478 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11412 +#line 11477 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11415 +#line 11480 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11417 +#line 11482 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11416 +#line 11481 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11419 +#line 11484 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11421 +#line 11486 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11420 +#line 11485 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11423 +#line 11488 [TRAINER_LENNY] = { -#line 11424 +#line 11489 .trainerName = _("LENNY"), -#line 11425 +#line 11490 .trainerClass = TRAINER_CLASS_HIKER, -#line 11426 +#line 11491 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11428 +#line 11493 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11429 +#line 11494 .doubleBattle = FALSE, -#line 11430 +#line 11495 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11432 +#line 11497 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11434 +#line 11499 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11433 +#line 11498 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11436 +#line 11501 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11438 +#line 11503 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11437 +#line 11502 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11440 +#line 11505 [TRAINER_LUCAS_1] = { -#line 11441 +#line 11506 .trainerName = _("LUCAS"), -#line 11442 +#line 11507 .trainerClass = TRAINER_CLASS_HIKER, -#line 11443 +#line 11508 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11445 +#line 11510 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11446 +#line 11511 .doubleBattle = FALSE, -#line 11447 +#line 11512 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11449 +#line 11514 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11451 +#line 11516 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11450 +#line 11515 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11453 +#line 11518 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11455 +#line 11520 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11454 +#line 11519 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11457 +#line 11522 [TRAINER_ALAN] = { -#line 11458 +#line 11523 .trainerName = _("ALAN"), -#line 11459 +#line 11524 .trainerClass = TRAINER_CLASS_HIKER, -#line 11460 +#line 11525 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11462 +#line 11527 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11463 +#line 11528 .doubleBattle = FALSE, -#line 11464 +#line 11529 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11466 +#line 11531 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11468 +#line 11533 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11467 +#line 11532 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11470 +#line 11535 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11472 +#line 11537 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11471 +#line 11536 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11474 +#line 11539 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11476 +#line 11541 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11475 +#line 11540 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11478 +#line 11543 [TRAINER_CLARK] = { -#line 11479 +#line 11544 .trainerName = _("CLARK"), -#line 11480 +#line 11545 .trainerClass = TRAINER_CLASS_HIKER, -#line 11481 +#line 11546 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11483 +#line 11548 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11484 +#line 11549 .doubleBattle = FALSE, -#line 11485 +#line 11550 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11487 +#line 11552 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11489 +#line 11554 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11488 +#line 11553 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11491 +#line 11556 [TRAINER_ERIC] = { -#line 11492 +#line 11557 .trainerName = _("ERIC"), -#line 11493 +#line 11558 .trainerClass = TRAINER_CLASS_HIKER, -#line 11494 +#line 11559 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11496 +#line 11561 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11497 +#line 11562 .doubleBattle = FALSE, -#line 11498 +#line 11563 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11500 +#line 11565 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11502 +#line 11567 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11501 +#line 11566 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11504 +#line 11569 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11506 +#line 11571 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11505 +#line 11570 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11508 +#line 11573 [TRAINER_LUCAS_2] = { -#line 11509 +#line 11574 .trainerName = _("LUCAS"), -#line 11510 +#line 11575 .trainerClass = TRAINER_CLASS_HIKER, -#line 11511 +#line 11576 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11513 +#line 11578 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11514 +#line 11579 .doubleBattle = FALSE, -#line 11515 +#line 11580 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11517 +#line 11582 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11519 +#line 11584 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11518 +#line 11583 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11520 +#line 11585 MOVE_SPLASH, MOVE_WATER_GUN, }, }, }, }, -#line 11523 +#line 11588 [TRAINER_MIKE_1] = { -#line 11524 +#line 11589 .trainerName = _("MIKE"), -#line 11525 +#line 11590 .trainerClass = TRAINER_CLASS_HIKER, -#line 11526 +#line 11591 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11528 +#line 11593 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11529 +#line 11594 .doubleBattle = FALSE, -#line 11530 +#line 11595 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11532 +#line 11597 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11534 +#line 11599 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11533 +#line 11598 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11535 +#line 11600 MOVE_GUST, MOVE_GROWL, }, }, { -#line 11538 +#line 11603 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11540 +#line 11605 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11539 +#line 11604 .lvl = 10, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11541 +#line 11606 MOVE_BITE, MOVE_SCARY_FACE, }, }, }, }, -#line 11544 +#line 11609 [TRAINER_MIKE_2] = { -#line 11545 +#line 11610 .trainerName = _("MIKE"), -#line 11546 +#line 11611 .trainerClass = TRAINER_CLASS_HIKER, -#line 11547 +#line 11612 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11549 +#line 11614 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11550 +#line 11615 .doubleBattle = FALSE, -#line 11551 +#line 11616 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11553 +#line 11618 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11555 +#line 11620 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11554 +#line 11619 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11557 +#line 11622 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11559 +#line 11624 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11558 +#line 11623 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11561 +#line 11626 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11563 +#line 11628 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11562 +#line 11627 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11565 +#line 11630 [TRAINER_TRENT_2] = { -#line 11566 +#line 11631 .trainerName = _("TRENT"), -#line 11567 +#line 11632 .trainerClass = TRAINER_CLASS_HIKER, -#line 11568 +#line 11633 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11570 +#line 11635 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11571 +#line 11636 .doubleBattle = FALSE, -#line 11572 +#line 11637 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 11574 +#line 11639 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11576 +#line 11641 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11575 +#line 11640 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11578 +#line 11643 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11580 +#line 11645 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11579 +#line 11644 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11582 +#line 11647 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11584 +#line 11649 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11583 +#line 11648 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11586 +#line 11651 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11588 +#line 11653 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11587 +#line 11652 .lvl = 24, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11590 +#line 11655 [TRAINER_TRENT_3] = { -#line 11591 +#line 11656 .trainerName = _("TRENT"), -#line 11592 +#line 11657 .trainerClass = TRAINER_CLASS_HIKER, -#line 11593 +#line 11658 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11595 +#line 11660 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11596 +#line 11661 .doubleBattle = FALSE, -#line 11597 +#line 11662 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 11599 +#line 11664 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11601 +#line 11666 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11600 +#line 11665 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11603 +#line 11668 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11605 +#line 11670 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11604 +#line 11669 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11607 +#line 11672 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11609 +#line 11674 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11608 +#line 11673 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11611 +#line 11676 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11613 +#line 11678 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11612 +#line 11677 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11615 +#line 11680 [TRAINER_TRENT_4] = { -#line 11616 +#line 11681 .trainerName = _("TRENT"), -#line 11617 +#line 11682 .trainerClass = TRAINER_CLASS_HIKER, -#line 11618 +#line 11683 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11620 +#line 11685 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11621 +#line 11686 .doubleBattle = FALSE, -#line 11622 +#line 11687 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 11624 +#line 11689 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11626 +#line 11691 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11625 +#line 11690 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11628 +#line 11693 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11630 +#line 11695 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11629 +#line 11694 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11632 +#line 11697 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11634 +#line 11699 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11633 +#line 11698 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11636 +#line 11701 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11638 +#line 11703 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11637 +#line 11702 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11640 +#line 11705 [TRAINER_TRENT_5] = { -#line 11641 +#line 11706 .trainerName = _("TRENT"), -#line 11642 +#line 11707 .trainerClass = TRAINER_CLASS_HIKER, -#line 11643 +#line 11708 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 11645 +#line 11710 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 11646 +#line 11711 .doubleBattle = FALSE, -#line 11647 +#line 11712 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 11649 +#line 11714 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11651 +#line 11716 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11650 +#line 11715 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11653 +#line 11718 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11655 +#line 11720 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11654 +#line 11719 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11657 +#line 11722 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11659 +#line 11724 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11658 +#line 11723 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11661 +#line 11726 .species = SPECIES_GOLEM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11663 +#line 11728 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11662 +#line 11727 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11665 +#line 11730 [TRAINER_DEZ_AND_LUKE] = { -#line 11666 +#line 11731 .trainerName = _("DEZ & LUKE"), -#line 11667 +#line 11732 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 11668 +#line 11733 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 11670 +#line 11735 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11671 +#line 11736 .doubleBattle = TRUE, -#line 11672 +#line 11737 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11674 +#line 11739 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11676 +#line 11741 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11675 +#line 11740 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11678 +#line 11743 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11680 +#line 11745 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11679 +#line 11744 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11682 +#line 11747 [TRAINER_LEA_AND_JED] = { -#line 11683 +#line 11748 .trainerName = _("LEA & JED"), -#line 11684 +#line 11749 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 11685 +#line 11750 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 11687 +#line 11752 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11688 +#line 11753 .doubleBattle = TRUE, -#line 11689 +#line 11754 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11691 +#line 11756 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11693 +#line 11758 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11692 +#line 11757 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11695 +#line 11760 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11697 +#line 11762 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11696 +#line 11761 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11699 +#line 11764 [TRAINER_KIRA_AND_DAN_1] = { -#line 11700 +#line 11765 .trainerName = _("KIRA & DAN"), -#line 11701 +#line 11766 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 11702 +#line 11767 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 11704 +#line 11769 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11705 +#line 11770 .doubleBattle = TRUE, -#line 11706 +#line 11771 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11708 +#line 11773 .species = SPECIES_VOLBEAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11710 +#line 11775 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11709 +#line 11774 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11712 +#line 11777 .species = SPECIES_ILLUMISE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11714 +#line 11779 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11713 +#line 11778 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11716 +#line 11781 [TRAINER_KIRA_AND_DAN_2] = { -#line 11717 +#line 11782 .trainerName = _("KIRA & DAN"), -#line 11718 +#line 11783 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 11719 +#line 11784 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 11721 +#line 11786 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11722 +#line 11787 .doubleBattle = TRUE, -#line 11723 +#line 11788 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11725 +#line 11790 .species = SPECIES_VOLBEAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11727 +#line 11792 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11726 +#line 11791 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11729 +#line 11794 .species = SPECIES_ILLUMISE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11731 +#line 11796 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 11730 +#line 11795 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11733 +#line 11798 [TRAINER_KIRA_AND_DAN_3] = { -#line 11734 +#line 11799 .trainerName = _("KIRA & DAN"), -#line 11735 +#line 11800 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 11736 +#line 11801 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 11738 +#line 11803 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11739 +#line 11804 .doubleBattle = TRUE, -#line 11740 +#line 11805 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11742 +#line 11807 .species = SPECIES_VOLBEAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11744 +#line 11809 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11743 +#line 11808 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11746 +#line 11811 .species = SPECIES_ILLUMISE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11748 +#line 11813 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 11747 +#line 11812 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11750 +#line 11815 [TRAINER_KIRA_AND_DAN_4] = { -#line 11751 +#line 11816 .trainerName = _("KIRA & DAN"), -#line 11752 +#line 11817 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 11753 +#line 11818 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 11755 +#line 11820 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11756 +#line 11821 .doubleBattle = TRUE, -#line 11757 +#line 11822 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11759 +#line 11824 .species = SPECIES_VOLBEAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11761 +#line 11826 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11760 +#line 11825 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11763 +#line 11828 .species = SPECIES_ILLUMISE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11765 +#line 11830 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11764 +#line 11829 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11767 +#line 11832 [TRAINER_KIRA_AND_DAN_5] = { -#line 11768 +#line 11833 .trainerName = _("KIRA & DAN"), -#line 11769 +#line 11834 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 11770 +#line 11835 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 11772 +#line 11837 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11773 +#line 11838 .doubleBattle = TRUE, -#line 11774 +#line 11839 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11776 +#line 11841 .species = SPECIES_VOLBEAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11778 +#line 11843 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11777 +#line 11842 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11780 +#line 11845 .species = SPECIES_ILLUMISE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11782 +#line 11847 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 11781 +#line 11846 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11784 +#line 11849 [TRAINER_JOHANNA] = { -#line 11785 +#line 11850 .trainerName = _("JOHANNA"), -#line 11786 +#line 11851 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 11787 +#line 11852 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 11788 +#line 11853 F_TRAINER_FEMALE | -#line 11789 +#line 11854 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 11790 +#line 11855 .doubleBattle = FALSE, -#line 11791 +#line 11856 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11793 +#line 11858 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11795 +#line 11860 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11794 +#line 11859 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11797 +#line 11862 [TRAINER_GERALD] = { -#line 11798 +#line 11863 .trainerName = _("GERALD"), -#line 11799 +#line 11864 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 11800 +#line 11865 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 11802 +#line 11867 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 11803 +#line 11868 .items = { ITEM_HYPER_POTION }, -#line 11804 +#line 11869 .doubleBattle = FALSE, -#line 11805 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 11870 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11807 +#line 11872 .species = SPECIES_KECLEON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11809 +#line 11874 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11808 +#line 11873 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11810 +#line 11875 MOVE_FLAMETHROWER, MOVE_FURY_SWIPES, MOVE_FEINT_ATTACK, @@ -29838,39 +29838,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 11815 +#line 11880 [TRAINER_VIVIAN] = { -#line 11816 +#line 11881 .trainerName = _("VIVIAN"), -#line 11817 +#line 11882 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 11818 +#line 11883 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 11819 +#line 11884 F_TRAINER_FEMALE | -#line 11820 +#line 11885 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 11821 +#line 11886 .doubleBattle = FALSE, -#line 11822 +#line 11887 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11824 +#line 11889 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11826 +#line 11891 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11825 +#line 11890 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11827 +#line 11892 MOVE_BIDE, MOVE_DETECT, MOVE_CONFUSION, @@ -29878,17 +29878,17 @@ F_TRAINER_FEMALE | }, }, { -#line 11832 +#line 11897 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11834 +#line 11899 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11833 +#line 11898 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11835 +#line 11900 MOVE_THUNDER_PUNCH, MOVE_DETECT, MOVE_CONFUSION, @@ -29897,39 +29897,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 11840 +#line 11905 [TRAINER_DANIELLE] = { -#line 11841 +#line 11906 .trainerName = _("DANIELLE"), -#line 11842 +#line 11907 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 11843 +#line 11908 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 11844 +#line 11909 F_TRAINER_FEMALE | -#line 11845 +#line 11910 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 11846 +#line 11911 .doubleBattle = FALSE, -#line 11847 +#line 11912 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11849 +#line 11914 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11851 +#line 11916 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11850 +#line 11915 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11852 +#line 11917 MOVE_BIDE, MOVE_DETECT, MOVE_CONFUSION, @@ -29938,37 +29938,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 11857 +#line 11922 [TRAINER_HIDEO] = { -#line 11858 +#line 11923 .trainerName = _("HIDEO"), -#line 11859 +#line 11924 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 11860 +#line 11925 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 11862 +#line 11927 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 11863 +#line 11928 .doubleBattle = FALSE, -#line 11864 +#line 11929 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11866 +#line 11931 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11868 +#line 11933 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11867 +#line 11932 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11869 +#line 11934 MOVE_TACKLE, MOVE_SELF_DESTRUCT, MOVE_SLUDGE, @@ -29976,17 +29976,17 @@ F_TRAINER_FEMALE | }, }, { -#line 11874 +#line 11939 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11876 +#line 11941 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11875 +#line 11940 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11877 +#line 11942 MOVE_TACKLE, MOVE_POISON_GAS, MOVE_SLUDGE, @@ -29995,37 +29995,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 11882 +#line 11947 [TRAINER_KEIGO] = { -#line 11883 +#line 11948 .trainerName = _("KEIGO"), -#line 11884 +#line 11949 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 11885 +#line 11950 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 11887 +#line 11952 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 11888 +#line 11953 .doubleBattle = FALSE, -#line 11889 +#line 11954 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11891 +#line 11956 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11893 +#line 11958 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11892 +#line 11957 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11894 +#line 11959 MOVE_POISON_GAS, MOVE_SELF_DESTRUCT, MOVE_SLUDGE, @@ -30033,17 +30033,17 @@ F_TRAINER_FEMALE | }, }, { -#line 11899 +#line 11964 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11901 +#line 11966 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11900 +#line 11965 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11902 +#line 11967 MOVE_SAND_ATTACK, MOVE_DOUBLE_TEAM, MOVE_FURY_CUTTER, @@ -30052,37 +30052,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 11907 +#line 11972 [TRAINER_RILEY] = { -#line 11908 +#line 11973 .trainerName = _("RILEY"), -#line 11909 +#line 11974 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 11910 +#line 11975 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 11912 +#line 11977 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 11913 +#line 11978 .doubleBattle = FALSE, -#line 11914 +#line 11979 .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11916 +#line 11981 .species = SPECIES_NINCADA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11918 +#line 11983 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11917 +#line 11982 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11919 +#line 11984 MOVE_LEECH_LIFE, MOVE_FURY_SWIPES, MOVE_MIND_READER, @@ -30090,17 +30090,17 @@ F_TRAINER_FEMALE | }, }, { -#line 11924 +#line 11989 .species = SPECIES_KOFFING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11926 +#line 11991 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 11925 +#line 11990 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11927 +#line 11992 MOVE_TACKLE, MOVE_SELF_DESTRUCT, MOVE_SLUDGE, @@ -30109,170 +30109,170 @@ F_TRAINER_FEMALE | }, }, }, -#line 11932 +#line 11997 [TRAINER_FLINT] = { -#line 11933 +#line 11998 .trainerName = _("FLINT"), -#line 11934 +#line 11999 .trainerClass = TRAINER_CLASS_CAMPER, -#line 11935 +#line 12000 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 11937 +#line 12002 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11938 +#line 12003 .doubleBattle = FALSE, -#line 11939 +#line 12004 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 11941 +#line 12006 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11943 +#line 12008 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 11942 +#line 12007 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11945 +#line 12010 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11947 +#line 12012 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 11946 +#line 12011 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11949 +#line 12014 [TRAINER_ASHLEY] = { -#line 11950 +#line 12015 .trainerName = _("ASHLEY"), -#line 11951 +#line 12016 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 11952 +#line 12017 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 11953 +#line 12018 F_TRAINER_FEMALE | -#line 11954 +#line 12019 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 11955 +#line 12020 .doubleBattle = FALSE, -#line 11956 +#line 12021 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 11958 +#line 12023 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11960 +#line 12025 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11959 +#line 12024 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11962 +#line 12027 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11964 +#line 12029 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11963 +#line 12028 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 11966 +#line 12031 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11968 +#line 12033 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 11967 +#line 12032 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11970 +#line 12035 [TRAINER_WALLY_MAUVILLE] = { -#line 11971 +#line 12036 .trainerName = _("WALLY"), -#line 11972 +#line 12037 .trainerClass = TRAINER_CLASS_RIVAL, -#line 11973 +#line 12038 .trainerPic = TRAINER_PIC_WALLY, .encounterMusic_gender = -#line 11975 +#line 12040 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11976 +#line 12041 .doubleBattle = FALSE, -#line 11977 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 12042 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 11979 +#line 12044 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11981 +#line 12046 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 11980 +#line 12045 .lvl = 16, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 11983 +#line 12048 [TRAINER_WALLY_VR_2] = { -#line 11984 +#line 12049 .trainerName = _("WALLY"), -#line 11985 +#line 12050 .trainerClass = TRAINER_CLASS_RIVAL, -#line 11986 +#line 12051 .trainerPic = TRAINER_PIC_WALLY, .encounterMusic_gender = -#line 11988 +#line 12053 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 11989 +#line 12054 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 11990 +#line 12055 .doubleBattle = FALSE, -#line 11991 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 12056 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 11993 +#line 12058 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 11995 +#line 12060 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 11994 +#line 12059 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 11996 +#line 12061 MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, @@ -30280,17 +30280,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12001 +#line 12066 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12003 +#line 12068 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12002 +#line 12067 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12004 +#line 12069 MOVE_SING, MOVE_ASSIST, MOVE_CHARM, @@ -30298,17 +30298,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12009 +#line 12074 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12011 +#line 12076 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12010 +#line 12075 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12012 +#line 12077 MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, @@ -30316,17 +30316,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12017 +#line 12082 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12019 +#line 12084 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12018 +#line 12083 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12020 +#line 12085 MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, @@ -30334,17 +30334,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12025 +#line 12090 .species = SPECIES_GARDEVOIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12027 +#line 12092 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 12026 +#line 12091 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12028 +#line 12093 MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, @@ -30353,39 +30353,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 12033 +#line 12098 [TRAINER_WALLY_VR_3] = { -#line 12034 +#line 12099 .trainerName = _("WALLY"), -#line 12035 +#line 12100 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12036 +#line 12101 .trainerPic = TRAINER_PIC_WALLY, .encounterMusic_gender = -#line 12038 +#line 12103 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 12039 +#line 12104 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 12040 +#line 12105 .doubleBattle = FALSE, -#line 12041 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 12106 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 12043 +#line 12108 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12045 +#line 12110 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12044 +#line 12109 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12046 +#line 12111 MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, @@ -30393,17 +30393,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12051 +#line 12116 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12053 +#line 12118 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12052 +#line 12117 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12054 +#line 12119 MOVE_SING, MOVE_ASSIST, MOVE_CHARM, @@ -30411,17 +30411,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12059 +#line 12124 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12061 +#line 12126 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12060 +#line 12125 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12062 +#line 12127 MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, @@ -30429,17 +30429,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12067 +#line 12132 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12069 +#line 12134 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12068 +#line 12133 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12070 +#line 12135 MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, @@ -30447,17 +30447,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12075 +#line 12140 .species = SPECIES_GARDEVOIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12077 +#line 12142 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 12076 +#line 12141 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12078 +#line 12143 MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, @@ -30466,39 +30466,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 12083 +#line 12148 [TRAINER_WALLY_VR_4] = { -#line 12084 +#line 12149 .trainerName = _("WALLY"), -#line 12085 +#line 12150 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12086 +#line 12151 .trainerPic = TRAINER_PIC_WALLY, .encounterMusic_gender = -#line 12088 +#line 12153 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 12089 +#line 12154 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 12090 +#line 12155 .doubleBattle = FALSE, -#line 12091 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 12156 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 12093 +#line 12158 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12095 +#line 12160 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12094 +#line 12159 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12096 +#line 12161 MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, @@ -30506,17 +30506,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12101 +#line 12166 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12103 +#line 12168 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12102 +#line 12167 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12104 +#line 12169 MOVE_SING, MOVE_ASSIST, MOVE_CHARM, @@ -30524,17 +30524,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12109 +#line 12174 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12111 +#line 12176 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12110 +#line 12175 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12112 +#line 12177 MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, @@ -30542,17 +30542,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12117 +#line 12182 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12119 +#line 12184 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12118 +#line 12183 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12120 +#line 12185 MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, @@ -30560,17 +30560,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12125 +#line 12190 .species = SPECIES_GARDEVOIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12127 +#line 12192 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 12126 +#line 12191 .lvl = 54, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12128 +#line 12193 MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, @@ -30579,39 +30579,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 12133 +#line 12198 [TRAINER_WALLY_VR_5] = { -#line 12134 +#line 12199 .trainerName = _("WALLY"), -#line 12135 +#line 12200 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12136 +#line 12201 .trainerPic = TRAINER_PIC_WALLY, .encounterMusic_gender = -#line 12138 +#line 12203 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 12139 +#line 12204 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 12140 +#line 12205 .doubleBattle = FALSE, -#line 12141 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 12206 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 12143 +#line 12208 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12145 +#line 12210 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12144 +#line 12209 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12146 +#line 12211 MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, @@ -30619,17 +30619,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12151 +#line 12216 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12153 +#line 12218 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12152 +#line 12217 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12154 +#line 12219 MOVE_SING, MOVE_ASSIST, MOVE_CHARM, @@ -30637,17 +30637,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12159 +#line 12224 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12161 +#line 12226 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12160 +#line 12225 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12162 +#line 12227 MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, @@ -30655,17 +30655,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12167 +#line 12232 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12169 +#line 12234 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12168 +#line 12233 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12170 +#line 12235 MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, @@ -30673,17 +30673,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12175 +#line 12240 .species = SPECIES_GARDEVOIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12177 +#line 12242 .iv = TRAINER_PARTY_IVS(30, 30, 30, 30, 30, 30), -#line 12176 +#line 12241 .lvl = 57, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12178 +#line 12243 MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, @@ -30692,925 +30692,925 @@ F_TRAINER_FEMALE | }, }, }, -#line 12183 +#line 12248 [TRAINER_BRENDAN_LILYCOVE_MUDKIP] = { -#line 12184 +#line 12249 .trainerName = _("BRENDAN"), -#line 12185 +#line 12250 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12186 +#line 12251 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 12188 +#line 12253 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 12189 +#line 12254 .doubleBattle = FALSE, -#line 12190 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 12255 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 12192 +#line 12257 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12194 +#line 12259 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12193 +#line 12258 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12196 +#line 12261 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12198 +#line 12263 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12197 +#line 12262 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12200 +#line 12265 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12202 +#line 12267 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12201 +#line 12266 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12204 +#line 12269 .species = SPECIES_GROVYLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12206 +#line 12271 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12205 +#line 12270 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12208 +#line 12273 [TRAINER_BRENDAN_LILYCOVE_TREECKO] = { -#line 12209 +#line 12274 .trainerName = _("BRENDAN"), -#line 12210 +#line 12275 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12211 +#line 12276 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 12213 +#line 12278 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 12214 +#line 12279 .doubleBattle = FALSE, -#line 12215 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 12280 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 12217 +#line 12282 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12219 +#line 12284 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12218 +#line 12283 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12221 +#line 12286 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12223 +#line 12288 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12222 +#line 12287 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12225 +#line 12290 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12227 +#line 12292 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12226 +#line 12291 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12229 +#line 12294 .species = SPECIES_COMBUSKEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12231 +#line 12296 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12230 +#line 12295 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12233 +#line 12298 [TRAINER_BRENDAN_LILYCOVE_TORCHIC] = { -#line 12234 +#line 12299 .trainerName = _("BRENDAN"), -#line 12235 +#line 12300 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12236 +#line 12301 .trainerPic = TRAINER_PIC_BRENDAN, .encounterMusic_gender = -#line 12238 +#line 12303 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 12239 +#line 12304 .doubleBattle = FALSE, -#line 12240 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 12305 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 12242 +#line 12307 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12244 +#line 12309 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12243 +#line 12308 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12246 +#line 12311 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12248 +#line 12313 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12247 +#line 12312 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12250 +#line 12315 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12252 +#line 12317 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12251 +#line 12316 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12254 +#line 12319 .species = SPECIES_MARSHTOMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12256 +#line 12321 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12255 +#line 12320 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12258 +#line 12323 [TRAINER_MAY_LILYCOVE_MUDKIP] = { -#line 12259 +#line 12324 .trainerName = _("MAY"), -#line 12260 +#line 12325 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12261 +#line 12326 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 12262 +#line 12327 F_TRAINER_FEMALE | -#line 12263 +#line 12328 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 12264 +#line 12329 .doubleBattle = FALSE, -#line 12265 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 12330 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 12267 +#line 12332 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12269 +#line 12334 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12268 +#line 12333 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12271 +#line 12336 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12273 +#line 12338 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12272 +#line 12337 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12275 +#line 12340 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12277 +#line 12342 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12276 +#line 12341 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12279 +#line 12344 .species = SPECIES_GROVYLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12281 +#line 12346 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12280 +#line 12345 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12283 +#line 12348 [TRAINER_MAY_LILYCOVE_TREECKO] = { -#line 12284 +#line 12349 .trainerName = _("MAY"), -#line 12285 +#line 12350 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12286 +#line 12351 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 12287 +#line 12352 F_TRAINER_FEMALE | -#line 12288 +#line 12353 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 12289 +#line 12354 .doubleBattle = FALSE, -#line 12290 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 12355 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 12292 +#line 12357 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12294 +#line 12359 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12293 +#line 12358 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12296 +#line 12361 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12298 +#line 12363 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12297 +#line 12362 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12300 +#line 12365 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12302 +#line 12367 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12301 +#line 12366 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12304 +#line 12369 .species = SPECIES_COMBUSKEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12306 +#line 12371 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12305 +#line 12370 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12308 +#line 12373 [TRAINER_MAY_LILYCOVE_TORCHIC] = { -#line 12309 +#line 12374 .trainerName = _("MAY"), -#line 12310 +#line 12375 .trainerClass = TRAINER_CLASS_RIVAL, -#line 12311 +#line 12376 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 12312 +#line 12377 F_TRAINER_FEMALE | -#line 12313 +#line 12378 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 12314 +#line 12379 .doubleBattle = FALSE, -#line 12315 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 12380 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 12317 +#line 12382 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12319 +#line 12384 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12318 +#line 12383 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12321 +#line 12386 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12323 +#line 12388 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12322 +#line 12387 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12325 +#line 12390 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12327 +#line 12392 .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 12326 +#line 12391 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12329 +#line 12394 .species = SPECIES_MARSHTOMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12331 +#line 12396 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12330 +#line 12395 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12333 +#line 12398 [TRAINER_JONAH] = { -#line 12334 +#line 12399 .trainerName = _("JONAH"), -#line 12335 +#line 12400 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 12336 +#line 12401 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 12338 +#line 12403 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 12339 +#line 12404 .doubleBattle = FALSE, -#line 12340 +#line 12405 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 12342 +#line 12407 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12344 +#line 12409 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12343 +#line 12408 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12346 +#line 12411 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12348 +#line 12413 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12347 +#line 12412 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12350 +#line 12415 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12352 +#line 12417 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12351 +#line 12416 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12354 +#line 12419 [TRAINER_HENRY] = { -#line 12355 +#line 12420 .trainerName = _("HENRY"), -#line 12356 +#line 12421 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 12357 +#line 12422 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 12359 +#line 12424 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 12360 +#line 12425 .doubleBattle = FALSE, -#line 12361 +#line 12426 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12363 +#line 12428 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12365 +#line 12430 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12364 +#line 12429 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12367 +#line 12432 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12369 +#line 12434 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12368 +#line 12433 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12371 +#line 12436 [TRAINER_ROGER] = { -#line 12372 +#line 12437 .trainerName = _("ROGER"), -#line 12373 +#line 12438 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 12374 +#line 12439 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 12376 +#line 12441 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 12377 +#line 12442 .doubleBattle = FALSE, -#line 12378 +#line 12443 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 12380 +#line 12445 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12382 +#line 12447 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12381 +#line 12446 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12384 +#line 12449 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12386 +#line 12451 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12385 +#line 12450 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12388 +#line 12453 .species = SPECIES_GYARADOS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12390 +#line 12455 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12389 +#line 12454 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12392 +#line 12457 [TRAINER_ALEXA] = { -#line 12393 +#line 12458 .trainerName = _("ALEXA"), -#line 12394 +#line 12459 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 12395 +#line 12460 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 12396 +#line 12461 F_TRAINER_FEMALE | -#line 12397 +#line 12462 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 12398 +#line 12463 .items = { ITEM_FULL_RESTORE }, -#line 12399 +#line 12464 .doubleBattle = FALSE, -#line 12400 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 12465 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12402 +#line 12467 .species = SPECIES_GLOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12404 +#line 12469 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 12403 +#line 12468 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12406 +#line 12471 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12408 +#line 12473 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 12407 +#line 12472 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12410 +#line 12475 [TRAINER_RUBEN] = { -#line 12411 +#line 12476 .trainerName = _("RUBEN"), -#line 12412 +#line 12477 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 12413 +#line 12478 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 12415 +#line 12480 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 12416 +#line 12481 .items = { ITEM_HYPER_POTION }, -#line 12417 +#line 12482 .doubleBattle = FALSE, -#line 12418 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 12483 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12420 +#line 12485 .species = SPECIES_SHIFTRY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12422 +#line 12487 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 12421 +#line 12486 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12424 +#line 12489 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12426 +#line 12491 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 12425 +#line 12490 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12428 +#line 12493 [TRAINER_KOJI_1] = { -#line 12429 +#line 12494 .trainerName = _("KOJI"), -#line 12430 +#line 12495 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 12431 +#line 12496 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 12433 +#line 12498 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 12434 +#line 12499 .doubleBattle = FALSE, -#line 12435 +#line 12500 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 12437 +#line 12502 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12439 +#line 12504 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12438 +#line 12503 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12441 +#line 12506 [TRAINER_WAYNE] = { -#line 12442 +#line 12507 .trainerName = _("WAYNE"), -#line 12443 +#line 12508 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 12444 +#line 12509 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 12446 +#line 12511 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 12447 +#line 12512 .doubleBattle = FALSE, -#line 12448 +#line 12513 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 12450 +#line 12515 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12452 +#line 12517 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12451 +#line 12516 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12454 +#line 12519 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12456 +#line 12521 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12455 +#line 12520 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12458 +#line 12523 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12460 +#line 12525 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12459 +#line 12524 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12462 +#line 12527 [TRAINER_AIDAN] = { -#line 12463 +#line 12528 .trainerName = _("AIDAN"), -#line 12464 +#line 12529 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 12465 +#line 12530 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 12467 +#line 12532 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 12468 +#line 12533 .doubleBattle = FALSE, -#line 12469 +#line 12534 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12471 +#line 12536 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12473 +#line 12538 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12472 +#line 12537 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12475 +#line 12540 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12477 +#line 12542 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12476 +#line 12541 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12479 +#line 12544 [TRAINER_REED] = { -#line 12480 +#line 12545 .trainerName = _("REED"), -#line 12481 +#line 12546 .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 12482 +#line 12547 .trainerPic = TRAINER_PIC_SWIMMER_M, .encounterMusic_gender = -#line 12484 +#line 12549 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12485 +#line 12550 .doubleBattle = FALSE, -#line 12486 +#line 12551 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12488 +#line 12553 .species = SPECIES_SPHEAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12490 +#line 12555 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12489 +#line 12554 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12492 +#line 12557 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12494 +#line 12559 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12493 +#line 12558 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12496 +#line 12561 [TRAINER_TISHA] = { -#line 12497 +#line 12562 .trainerName = _("TISHA"), -#line 12498 +#line 12563 .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 12499 +#line 12564 .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 12500 +#line 12565 F_TRAINER_FEMALE | -#line 12501 +#line 12566 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12502 +#line 12567 .doubleBattle = FALSE, -#line 12503 +#line 12568 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 12505 +#line 12570 .species = SPECIES_CHINCHOU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12507 +#line 12572 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12506 +#line 12571 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12509 +#line 12574 [TRAINER_TORI_AND_TIA] = { -#line 12510 +#line 12575 .trainerName = _("TORI & TIA"), -#line 12511 +#line 12576 .trainerClass = TRAINER_CLASS_TWINS, -#line 12512 +#line 12577 .trainerPic = TRAINER_PIC_TWINS, .encounterMusic_gender = -#line 12514 +#line 12579 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 12515 +#line 12580 .doubleBattle = TRUE, -#line 12516 +#line 12581 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12518 +#line 12583 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12520 +#line 12585 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12519 +#line 12584 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12522 +#line 12587 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12524 +#line 12589 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12523 +#line 12588 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12526 +#line 12591 [TRAINER_KIM_AND_IRIS] = { -#line 12527 +#line 12592 .trainerName = _("KIM & IRIS"), -#line 12528 +#line 12593 .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 12529 +#line 12594 .trainerPic = TRAINER_PIC_SR_AND_JR, .encounterMusic_gender = -#line 12531 +#line 12596 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 12532 +#line 12597 .doubleBattle = TRUE, -#line 12533 +#line 12598 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12535 +#line 12600 .species = SPECIES_SWABLU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12537 +#line 12602 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12536 +#line 12601 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12538 +#line 12603 MOVE_SING, MOVE_FURY_ATTACK, MOVE_SAFEGUARD, @@ -31618,17 +31618,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12543 +#line 12608 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12545 +#line 12610 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12544 +#line 12609 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12546 +#line 12611 MOVE_FLAMETHROWER, MOVE_TAKE_DOWN, MOVE_REST, @@ -31637,37 +31637,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 12551 +#line 12616 [TRAINER_TYRA_AND_IVY] = { -#line 12552 +#line 12617 .trainerName = _("TYRA & IVY"), -#line 12553 +#line 12618 .trainerClass = TRAINER_CLASS_SR_AND_JR, -#line 12554 +#line 12619 .trainerPic = TRAINER_PIC_SR_AND_JR, .encounterMusic_gender = -#line 12556 +#line 12621 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 12557 +#line 12622 .doubleBattle = TRUE, -#line 12558 +#line 12623 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12560 +#line 12625 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12562 +#line 12627 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12561 +#line 12626 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12563 +#line 12628 MOVE_GROWTH, MOVE_STUN_SPORE, MOVE_MEGA_DRAIN, @@ -31675,17 +31675,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12568 +#line 12633 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12570 +#line 12635 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12569 +#line 12634 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12571 +#line 12636 MOVE_DEFENSE_CURL, MOVE_ROLLOUT, MOVE_MUD_SPORT, @@ -31694,37 +31694,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 12576 +#line 12641 [TRAINER_MEL_AND_PAUL] = { -#line 12577 +#line 12642 .trainerName = _("MEL & PAUL"), -#line 12578 +#line 12643 .trainerClass = TRAINER_CLASS_YOUNG_COUPLE, -#line 12579 +#line 12644 .trainerPic = TRAINER_PIC_YOUNG_COUPLE, .encounterMusic_gender = -#line 12581 +#line 12646 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 12582 +#line 12647 .doubleBattle = TRUE, -#line 12583 +#line 12648 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12585 +#line 12650 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12587 +#line 12652 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12586 +#line 12651 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12588 +#line 12653 MOVE_GUST, MOVE_PSYBEAM, MOVE_TOXIC, @@ -31732,17 +31732,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12593 +#line 12658 .species = SPECIES_BEAUTIFLY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12595 +#line 12660 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12594 +#line 12659 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12596 +#line 12661 MOVE_GUST, MOVE_MEGA_DRAIN, MOVE_ATTRACT, @@ -31751,37 +31751,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 12601 +#line 12666 [TRAINER_JOHN_AND_JAY_1] = { -#line 12602 +#line 12667 .trainerName = _("JOHN & JAY"), -#line 12603 +#line 12668 .trainerClass = TRAINER_CLASS_OLD_COUPLE, -#line 12604 +#line 12669 .trainerPic = TRAINER_PIC_OLD_COUPLE, .encounterMusic_gender = -#line 12606 +#line 12671 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 12607 +#line 12672 .doubleBattle = TRUE, -#line 12608 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 12673 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12610 +#line 12675 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12612 +#line 12677 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12611 +#line 12676 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12613 +#line 12678 MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, @@ -31789,17 +31789,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12618 +#line 12683 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12620 +#line 12685 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 12619 +#line 12684 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12621 +#line 12686 MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, @@ -31808,37 +31808,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 12626 +#line 12691 [TRAINER_JOHN_AND_JAY_2] = { -#line 12627 +#line 12692 .trainerName = _("JOHN & JAY"), -#line 12628 +#line 12693 .trainerClass = TRAINER_CLASS_OLD_COUPLE, -#line 12629 +#line 12694 .trainerPic = TRAINER_PIC_OLD_COUPLE, .encounterMusic_gender = -#line 12631 +#line 12696 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 12632 +#line 12697 .doubleBattle = TRUE, -#line 12633 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 12698 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12635 +#line 12700 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12637 +#line 12702 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 12636 +#line 12701 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12638 +#line 12703 MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, @@ -31846,17 +31846,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12643 +#line 12708 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12645 +#line 12710 .iv = TRAINER_PARTY_IVS(25, 25, 25, 25, 25, 25), -#line 12644 +#line 12709 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12646 +#line 12711 MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, @@ -31865,37 +31865,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 12651 +#line 12716 [TRAINER_JOHN_AND_JAY_3] = { -#line 12652 +#line 12717 .trainerName = _("JOHN & JAY"), -#line 12653 +#line 12718 .trainerClass = TRAINER_CLASS_OLD_COUPLE, -#line 12654 +#line 12719 .trainerPic = TRAINER_PIC_OLD_COUPLE, .encounterMusic_gender = -#line 12656 +#line 12721 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 12657 +#line 12722 .doubleBattle = TRUE, -#line 12658 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 12723 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12660 +#line 12725 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12662 +#line 12727 .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), -#line 12661 +#line 12726 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12663 +#line 12728 MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, @@ -31903,17 +31903,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12668 +#line 12733 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12670 +#line 12735 .iv = TRAINER_PARTY_IVS(26, 26, 26, 26, 26, 26), -#line 12669 +#line 12734 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12671 +#line 12736 MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, @@ -31922,37 +31922,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 12676 +#line 12741 [TRAINER_JOHN_AND_JAY_4] = { -#line 12677 +#line 12742 .trainerName = _("JOHN & JAY"), -#line 12678 +#line 12743 .trainerClass = TRAINER_CLASS_OLD_COUPLE, -#line 12679 +#line 12744 .trainerPic = TRAINER_PIC_OLD_COUPLE, .encounterMusic_gender = -#line 12681 +#line 12746 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 12682 +#line 12747 .doubleBattle = TRUE, -#line 12683 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SETUP_FIRST_TURN, +#line 12748 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_FORCE_SETUP_FIRST_TURN, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12685 +#line 12750 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12687 +#line 12752 .iv = TRAINER_PARTY_IVS(27, 27, 27, 27, 27, 27), -#line 12686 +#line 12751 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12688 +#line 12753 MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, @@ -31960,17 +31960,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12693 +#line 12758 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12695 +#line 12760 .iv = TRAINER_PARTY_IVS(27, 27, 27, 27, 27, 27), -#line 12694 +#line 12759 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12696 +#line 12761 MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, @@ -31979,37 +31979,37 @@ F_TRAINER_FEMALE | }, }, }, -#line 12701 +#line 12766 [TRAINER_JOHN_AND_JAY_5] = { -#line 12702 +#line 12767 .trainerName = _("JOHN & JAY"), -#line 12703 +#line 12768 .trainerClass = TRAINER_CLASS_OLD_COUPLE, -#line 12704 +#line 12769 .trainerPic = TRAINER_PIC_OLD_COUPLE, .encounterMusic_gender = -#line 12706 +#line 12771 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 12707 +#line 12772 .doubleBattle = TRUE, -#line 12708 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 12773 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12710 +#line 12775 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12712 +#line 12777 .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), -#line 12711 +#line 12776 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12713 +#line 12778 MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, @@ -32017,17 +32017,17 @@ F_TRAINER_FEMALE | }, }, { -#line 12718 +#line 12783 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12720 +#line 12785 .iv = TRAINER_PARTY_IVS(29, 29, 29, 29, 29, 29), -#line 12719 +#line 12784 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 12721 +#line 12786 MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, @@ -32036,843 +32036,679 @@ F_TRAINER_FEMALE | }, }, }, -#line 12726 +#line 12791 [TRAINER_RELI_AND_IAN] = { -#line 12727 +#line 12792 .trainerName = _("RELI & IAN"), -#line 12728 +#line 12793 .trainerClass = TRAINER_CLASS_SIS_AND_BRO, -#line 12729 +#line 12794 .trainerPic = TRAINER_PIC_SIS_AND_BRO, .encounterMusic_gender = -#line 12731 +#line 12796 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12732 +#line 12797 .doubleBattle = TRUE, -#line 12733 +#line 12798 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12735 +#line 12800 .species = SPECIES_AZUMARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12737 +#line 12802 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12736 +#line 12801 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12739 +#line 12804 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12741 +#line 12806 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12740 +#line 12805 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12743 +#line 12808 [TRAINER_LILA_AND_ROY_1] = { -#line 12744 +#line 12809 .trainerName = _("LILA & ROY"), -#line 12745 +#line 12810 .trainerClass = TRAINER_CLASS_SIS_AND_BRO, -#line 12746 +#line 12811 .trainerPic = TRAINER_PIC_SIS_AND_BRO, .encounterMusic_gender = -#line 12748 +#line 12813 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12749 +#line 12814 .doubleBattle = TRUE, -#line 12750 +#line 12815 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12752 +#line 12817 .species = SPECIES_CHINCHOU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12754 +#line 12819 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12753 +#line 12818 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12756 +#line 12821 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12758 +#line 12823 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12757 +#line 12822 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12760 +#line 12825 [TRAINER_LILA_AND_ROY_2] = { -#line 12761 +#line 12826 .trainerName = _("LILA & ROY"), -#line 12762 +#line 12827 .trainerClass = TRAINER_CLASS_SIS_AND_BRO, -#line 12763 +#line 12828 .trainerPic = TRAINER_PIC_SIS_AND_BRO, .encounterMusic_gender = -#line 12765 +#line 12830 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12766 +#line 12831 .doubleBattle = TRUE, -#line 12767 +#line 12832 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12769 +#line 12834 .species = SPECIES_CHINCHOU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12771 +#line 12836 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12770 +#line 12835 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12773 +#line 12838 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12775 +#line 12840 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12774 +#line 12839 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12777 +#line 12842 [TRAINER_LILA_AND_ROY_3] = { -#line 12778 +#line 12843 .trainerName = _("LILA & ROY"), -#line 12779 +#line 12844 .trainerClass = TRAINER_CLASS_SIS_AND_BRO, -#line 12780 +#line 12845 .trainerPic = TRAINER_PIC_SIS_AND_BRO, .encounterMusic_gender = -#line 12782 +#line 12847 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12783 +#line 12848 .doubleBattle = TRUE, -#line 12784 +#line 12849 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12786 +#line 12851 .species = SPECIES_LANTURN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12788 +#line 12853 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12787 +#line 12852 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12790 +#line 12855 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12792 +#line 12857 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12791 +#line 12856 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12794 +#line 12859 [TRAINER_LILA_AND_ROY_4] = { -#line 12795 +#line 12860 .trainerName = _("LILA & ROY"), -#line 12796 +#line 12861 .trainerClass = TRAINER_CLASS_SIS_AND_BRO, -#line 12797 +#line 12862 .trainerPic = TRAINER_PIC_SIS_AND_BRO, .encounterMusic_gender = -#line 12799 +#line 12864 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12800 +#line 12865 .doubleBattle = TRUE, -#line 12801 +#line 12866 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12803 +#line 12868 .species = SPECIES_LANTURN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12805 +#line 12870 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12804 +#line 12869 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12807 +#line 12872 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12809 +#line 12874 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12808 +#line 12873 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12811 +#line 12876 [TRAINER_LILA_AND_ROY_5] = { -#line 12812 +#line 12877 .trainerName = _("LILA & ROY"), -#line 12813 +#line 12878 .trainerClass = TRAINER_CLASS_SIS_AND_BRO, -#line 12814 +#line 12879 .trainerPic = TRAINER_PIC_SIS_AND_BRO, .encounterMusic_gender = -#line 12816 +#line 12881 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12817 +#line 12882 .doubleBattle = TRUE, -#line 12818 +#line 12883 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12820 +#line 12885 .species = SPECIES_LANTURN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12822 +#line 12887 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12821 +#line 12886 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12824 +#line 12889 .species = SPECIES_SHARPEDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12826 +#line 12891 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12825 +#line 12890 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12828 +#line 12893 [TRAINER_LISA_AND_RAY] = { -#line 12829 +#line 12894 .trainerName = _("LISA & RAY"), -#line 12830 +#line 12895 .trainerClass = TRAINER_CLASS_SIS_AND_BRO, -#line 12831 +#line 12896 .trainerPic = TRAINER_PIC_SIS_AND_BRO, .encounterMusic_gender = -#line 12833 +#line 12898 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 12834 +#line 12899 .doubleBattle = TRUE, -#line 12835 +#line 12900 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12837 +#line 12902 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12839 +#line 12904 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12838 +#line 12903 .lvl = 27, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12841 +#line 12906 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12843 +#line 12908 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12842 +#line 12907 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12845 +#line 12910 [TRAINER_CHRIS] = { -#line 12846 +#line 12911 .trainerName = _("CHRIS"), -#line 12847 +#line 12912 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 12848 +#line 12913 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 12850 +#line 12915 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 12851 +#line 12916 .doubleBattle = FALSE, -#line 12852 +#line 12917 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 12854 +#line 12919 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12856 +#line 12921 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12855 +#line 12920 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12858 +#line 12923 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12860 +#line 12925 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12859 +#line 12924 .lvl = 20, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12862 +#line 12927 .species = SPECIES_FEEBAS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12864 +#line 12929 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12863 +#line 12928 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12866 +#line 12931 .species = SPECIES_CARVANHA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12868 +#line 12933 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12867 +#line 12932 .lvl = 23, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12870 +#line 12935 [TRAINER_DAWSON] = { -#line 12871 +#line 12936 .trainerName = _("DAWSON"), -#line 12872 +#line 12937 .trainerClass = TRAINER_CLASS_RICH_BOY, -#line 12873 +#line 12938 .trainerPic = TRAINER_PIC_RICH_BOY, .encounterMusic_gender = -#line 12875 +#line 12940 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 12876 +#line 12941 .doubleBattle = FALSE, -#line 12877 +#line 12942 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12879 +#line 12944 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12879 +#line 12944 .heldItem = ITEM_NUGGET, -#line 12881 +#line 12946 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12880 +#line 12945 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12883 +#line 12948 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12885 +#line 12950 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12884 +#line 12949 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12887 +#line 12952 [TRAINER_SARAH] = { -#line 12888 +#line 12953 .trainerName = _("SARAH"), -#line 12889 +#line 12954 .trainerClass = TRAINER_CLASS_LADY, -#line 12890 +#line 12955 .trainerPic = TRAINER_PIC_LADY, .encounterMusic_gender = -#line 12891 +#line 12956 F_TRAINER_FEMALE | -#line 12892 +#line 12957 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 12893 +#line 12958 .items = { ITEM_FULL_RESTORE }, -#line 12894 +#line 12959 .doubleBattle = FALSE, -#line 12895 +#line 12960 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12897 +#line 12962 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12899 +#line 12964 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12898 +#line 12963 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12901 +#line 12966 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12901 +#line 12966 .heldItem = ITEM_NUGGET, -#line 12903 +#line 12968 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12902 +#line 12967 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12905 +#line 12970 [TRAINER_DARIAN] = { -#line 12906 +#line 12971 .trainerName = _("DARIAN"), -#line 12907 +#line 12972 .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 12908 +#line 12973 .trainerPic = TRAINER_PIC_FISHERMAN, .encounterMusic_gender = -#line 12910 +#line 12975 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 12911 +#line 12976 .doubleBattle = FALSE, -#line 12912 +#line 12977 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 12914 +#line 12979 .species = SPECIES_MAGIKARP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12916 +#line 12981 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12915 +#line 12980 .lvl = 9, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12918 +#line 12983 [TRAINER_HAILEY] = { -#line 12919 +#line 12984 .trainerName = _("HAILEY"), -#line 12920 +#line 12985 .trainerClass = TRAINER_CLASS_TUBER_F, -#line 12921 +#line 12986 .trainerPic = TRAINER_PIC_TUBER_F, .encounterMusic_gender = -#line 12922 +#line 12987 F_TRAINER_FEMALE | -#line 12923 +#line 12988 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 12924 +#line 12989 .doubleBattle = FALSE, -#line 12925 +#line 12990 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 12927 +#line 12992 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12929 +#line 12994 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12928 +#line 12993 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12931 +#line 12996 [TRAINER_CHANDLER] = { -#line 12932 +#line 12997 .trainerName = _("CHANDLER"), -#line 12933 +#line 12998 .trainerClass = TRAINER_CLASS_TUBER_M, -#line 12934 +#line 12999 .trainerPic = TRAINER_PIC_TUBER_M, .encounterMusic_gender = -#line 12936 +#line 13001 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 12937 +#line 13002 .doubleBattle = FALSE, -#line 12938 +#line 13003 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12940 +#line 13005 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12942 +#line 13007 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12941 +#line 13006 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12944 +#line 13009 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12946 +#line 13011 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12945 +#line 13010 .lvl = 12, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12948 +#line 13013 [TRAINER_KALEB] = { -#line 12949 +#line 13014 .trainerName = _("KALEB"), -#line 12950 +#line 13015 .trainerClass = TRAINER_CLASS_POKEFAN, -#line 12951 +#line 13016 .trainerPic = TRAINER_PIC_POKEFAN_M, .encounterMusic_gender = -#line 12953 +#line 13018 TRAINER_ENCOUNTER_MUSIC_TWINS, -#line 12954 +#line 13019 .doubleBattle = FALSE, -#line 12955 +#line 13020 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12957 +#line 13022 .species = SPECIES_MINUN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12957 +#line 13022 .heldItem = ITEM_ORAN_BERRY, -#line 12959 +#line 13024 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12958 +#line 13023 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 12961 +#line 13026 .species = SPECIES_PLUSLE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12961 +#line 13026 .heldItem = ITEM_ORAN_BERRY, -#line 12963 +#line 13028 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12962 +#line 13027 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 12965 +#line 13030 [TRAINER_JOSEPH] = { -#line 12966 +#line 13031 .trainerName = _("JOSEPH"), -#line 12967 +#line 13032 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 12968 +#line 13033 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 12970 +#line 13035 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 12971 +#line 13036 .doubleBattle = FALSE, -#line 12972 +#line 13037 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 12974 +#line 13039 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 12976 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12975 - .lvl = 14, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 12978 - .species = SPECIES_VOLTORB, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 12980 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12979 - .lvl = 14, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 12982 - [TRAINER_ALYSSA] = - { -#line 12983 - .trainerName = _("ALYSSA"), -#line 12984 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 12985 - .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, - .encounterMusic_gender = -#line 12986 -F_TRAINER_FEMALE | -#line 12987 - TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 12988 - .doubleBattle = FALSE, -#line 12989 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 12991 - .species = SPECIES_MAGNEMITE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 12993 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 12992 - .lvl = 15, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 12995 - [TRAINER_MARCOS] = - { -#line 12996 - .trainerName = _("MARCOS"), -#line 12997 - .trainerClass = TRAINER_CLASS_GUITARIST, -#line 12998 - .trainerPic = TRAINER_PIC_GUITARIST, - .encounterMusic_gender = -#line 13000 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13001 - .doubleBattle = FALSE, -#line 13002 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 13004 - .species = SPECIES_VOLTORB, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13006 - .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 13005 - .lvl = 15, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 13008 - [TRAINER_RHETT] = - { -#line 13009 - .trainerName = _("RHETT"), -#line 13010 - .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 13011 - .trainerPic = TRAINER_PIC_BLACK_BELT, - .encounterMusic_gender = -#line 13013 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13014 - .doubleBattle = FALSE, -#line 13015 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 13017 - .species = SPECIES_MAKUHITA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13019 - .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 13018 - .lvl = 15, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 13021 - [TRAINER_TYRON] = - { -#line 13022 - .trainerName = _("TYRON"), -#line 13023 - .trainerClass = TRAINER_CLASS_CAMPER, -#line 13024 - .trainerPic = TRAINER_PIC_CAMPER, - .encounterMusic_gender = -#line 13026 - TRAINER_ENCOUNTER_MUSIC_MALE, -#line 13027 - .doubleBattle = FALSE, -#line 13028 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 13030 - .species = SPECIES_SANDSHREW, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13032 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13031 - .lvl = 19, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 13034 - [TRAINER_CELINA] = - { -#line 13035 - .trainerName = _("CELINA"), -#line 13036 - .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 13037 - .trainerPic = TRAINER_PIC_AROMA_LADY, - .encounterMusic_gender = -#line 13038 -F_TRAINER_FEMALE | -#line 13039 - TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 13040 - .doubleBattle = FALSE, #line 13041 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13040 + .lvl = 14, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, { #line 13043 - .species = SPECIES_ROSELIA, + .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, #line 13045 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 13044 - .lvl = 18, + .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, #line 13047 - [TRAINER_BIANCA] = + [TRAINER_ALYSSA] = { #line 13048 - .trainerName = _("BIANCA"), + .trainerName = _("ALYSSA"), #line 13049 - .trainerClass = TRAINER_CLASS_PICNICKER, + .trainerClass = TRAINER_CLASS_TRIATHLETE, #line 13050 - .trainerPic = TRAINER_PIC_PICNICKER, + .trainerPic = TRAINER_PIC_CYCLING_TRIATHLETE_F, .encounterMusic_gender = #line 13051 F_TRAINER_FEMALE | #line 13052 - TRAINER_ENCOUNTER_MUSIC_GIRL, + TRAINER_ENCOUNTER_MUSIC_FEMALE, #line 13053 .doubleBattle = FALSE, #line 13054 @@ -32882,29 +32718,29 @@ F_TRAINER_FEMALE | { { #line 13056 - .species = SPECIES_SHROOMISH, + .species = SPECIES_MAGNEMITE, .gender = TRAINER_MON_RANDOM_GENDER, #line 13058 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 13057 - .lvl = 18, + .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, #line 13060 - [TRAINER_HAYDEN] = + [TRAINER_MARCOS] = { #line 13061 - .trainerName = _("HAYDEN"), + .trainerName = _("MARCOS"), #line 13062 - .trainerClass = TRAINER_CLASS_KINDLER, + .trainerClass = TRAINER_CLASS_GUITARIST, #line 13063 - .trainerPic = TRAINER_PIC_KINDLER, + .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = #line 13065 - TRAINER_ENCOUNTER_MUSIC_HIKER, + TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 13066 .doubleBattle = FALSE, #line 13067 @@ -32914,700 +32750,704 @@ F_TRAINER_FEMALE | { { #line 13069 - .species = SPECIES_NUMEL, + .species = SPECIES_VOLTORB, .gender = TRAINER_MON_RANDOM_GENDER, #line 13071 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), #line 13070 - .lvl = 18, + .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, #line 13073 - [TRAINER_SOPHIE] = + [TRAINER_RHETT] = { #line 13074 - .trainerName = _("SOPHIE"), + .trainerName = _("RHETT"), #line 13075 - .trainerClass = TRAINER_CLASS_PICNICKER, + .trainerClass = TRAINER_CLASS_BLACK_BELT, #line 13076 - .trainerPic = TRAINER_PIC_PICNICKER, + .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 13077 -F_TRAINER_FEMALE | #line 13078 - TRAINER_ENCOUNTER_MUSIC_GIRL, + TRAINER_ENCOUNTER_MUSIC_INTENSE, #line 13079 .doubleBattle = FALSE, #line 13080 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, + .partySize = 1, .party = (const struct TrainerMon[]) { { #line 13082 - .species = SPECIES_MARILL, + .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, #line 13084 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), #line 13083 - .lvl = 17, + .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, - { + }, + }, #line 13086 - .species = SPECIES_LOMBRE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13088 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), + [TRAINER_TYRON] = + { #line 13087 - .lvl = 19, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 13090 - [TRAINER_COBY] = - { -#line 13091 - .trainerName = _("COBY"), -#line 13092 - .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 13093 - .trainerPic = TRAINER_PIC_BIRD_KEEPER, - .encounterMusic_gender = -#line 13095 - TRAINER_ENCOUNTER_MUSIC_COOL, -#line 13096 - .doubleBattle = FALSE, -#line 13097 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 13099 - .species = SPECIES_SKARMORY, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13101 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13100 - .lvl = 17, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 13103 - .species = SPECIES_SWELLOW, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13105 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13104 - .lvl = 19, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 13107 - [TRAINER_LAWRENCE] = - { -#line 13108 - .trainerName = _("LAWRENCE"), -#line 13109 + .trainerName = _("TYRON"), +#line 13088 .trainerClass = TRAINER_CLASS_CAMPER, -#line 13110 +#line 13089 .trainerPic = TRAINER_PIC_CAMPER, .encounterMusic_gender = -#line 13112 +#line 13091 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 13113 +#line 13092 .doubleBattle = FALSE, -#line 13114 +#line 13093 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, + .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13116 - .species = SPECIES_BALTOY, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13118 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13117 - .lvl = 18, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 13120 +#line 13095 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13122 +#line 13097 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13121 - .lvl = 18, +#line 13096 + .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13124 - [TRAINER_WYATT] = +#line 13099 + [TRAINER_CELINA] = { -#line 13125 - .trainerName = _("WYATT"), -#line 13126 - .trainerClass = TRAINER_CLASS_POKEMANIAC, -#line 13127 - .trainerPic = TRAINER_PIC_POKEMANIAC, +#line 13100 + .trainerName = _("CELINA"), +#line 13101 + .trainerClass = TRAINER_CLASS_AROMA_LADY, +#line 13102 + .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 13129 - TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 13130 +#line 13103 +F_TRAINER_FEMALE | +#line 13104 + TRAINER_ENCOUNTER_MUSIC_FEMALE, +#line 13105 .doubleBattle = FALSE, -#line 13131 +#line 13106 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, + .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13133 - .species = SPECIES_ARON, +#line 13108 + .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13135 +#line 13110 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13134 - .lvl = 18, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 13137 - .species = SPECIES_ARON, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13139 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13138 +#line 13109 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13141 - [TRAINER_ANGELINA] = +#line 13112 + [TRAINER_BIANCA] = { -#line 13142 - .trainerName = _("ANGELINA"), -#line 13143 +#line 13113 + .trainerName = _("BIANCA"), +#line 13114 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 13144 +#line 13115 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 13145 +#line 13116 F_TRAINER_FEMALE | -#line 13146 +#line 13117 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 13147 +#line 13118 .doubleBattle = FALSE, -#line 13148 +#line 13119 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 13121 + .species = SPECIES_SHROOMISH, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13123 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13122 + .lvl = 18, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 13125 + [TRAINER_HAYDEN] = + { +#line 13126 + .trainerName = _("HAYDEN"), +#line 13127 + .trainerClass = TRAINER_CLASS_KINDLER, +#line 13128 + .trainerPic = TRAINER_PIC_KINDLER, + .encounterMusic_gender = +#line 13130 + TRAINER_ENCOUNTER_MUSIC_HIKER, +#line 13131 + .doubleBattle = FALSE, +#line 13132 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 13134 + .species = SPECIES_NUMEL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13136 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13135 + .lvl = 18, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 13138 + [TRAINER_SOPHIE] = + { +#line 13139 + .trainerName = _("SOPHIE"), +#line 13140 + .trainerClass = TRAINER_CLASS_PICNICKER, +#line 13141 + .trainerPic = TRAINER_PIC_PICNICKER, + .encounterMusic_gender = +#line 13142 +F_TRAINER_FEMALE | +#line 13143 + TRAINER_ENCOUNTER_MUSIC_GIRL, +#line 13144 + .doubleBattle = FALSE, +#line 13145 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13150 - .species = SPECIES_LOMBRE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13152 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13151 - .lvl = 18, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 13154 +#line 13147 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13156 +#line 13149 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13148 + .lvl = 17, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 13151 + .species = SPECIES_LOMBRE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13153 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13152 + .lvl = 19, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, #line 13155 + [TRAINER_COBY] = + { +#line 13156 + .trainerName = _("COBY"), +#line 13157 + .trainerClass = TRAINER_CLASS_BIRD_KEEPER, +#line 13158 + .trainerPic = TRAINER_PIC_BIRD_KEEPER, + .encounterMusic_gender = +#line 13160 + TRAINER_ENCOUNTER_MUSIC_COOL, +#line 13161 + .doubleBattle = FALSE, +#line 13162 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 13164 + .species = SPECIES_SKARMORY, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13166 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13165 + .lvl = 17, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 13168 + .species = SPECIES_SWELLOW, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13170 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13169 + .lvl = 19, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 13172 + [TRAINER_LAWRENCE] = + { +#line 13173 + .trainerName = _("LAWRENCE"), +#line 13174 + .trainerClass = TRAINER_CLASS_CAMPER, +#line 13175 + .trainerPic = TRAINER_PIC_CAMPER, + .encounterMusic_gender = +#line 13177 + TRAINER_ENCOUNTER_MUSIC_MALE, +#line 13178 + .doubleBattle = FALSE, +#line 13179 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 13181 + .species = SPECIES_BALTOY, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13183 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13182 + .lvl = 18, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 13185 + .species = SPECIES_SANDSHREW, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13187 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13186 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13158 - [TRAINER_KAI] = +#line 13189 + [TRAINER_WYATT] = { -#line 13159 - .trainerName = _("KAI"), -#line 13160 - .trainerClass = TRAINER_CLASS_FISHERMAN, -#line 13161 - .trainerPic = TRAINER_PIC_FISHERMAN, +#line 13190 + .trainerName = _("WYATT"), +#line 13191 + .trainerClass = TRAINER_CLASS_POKEMANIAC, +#line 13192 + .trainerPic = TRAINER_PIC_POKEMANIAC, .encounterMusic_gender = -#line 13163 - TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 13164 +#line 13194 + TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, +#line 13195 .doubleBattle = FALSE, -#line 13165 +#line 13196 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, + .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13167 - .species = SPECIES_BARBOACH, +#line 13198 + .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13169 +#line 13200 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13168 - .lvl = 19, +#line 13199 + .lvl = 18, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 13202 + .species = SPECIES_ARON, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13204 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13203 + .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13171 - [TRAINER_CHARLOTTE] = +#line 13206 + [TRAINER_ANGELINA] = { -#line 13172 - .trainerName = _("CHARLOTTE"), -#line 13173 +#line 13207 + .trainerName = _("ANGELINA"), +#line 13208 .trainerClass = TRAINER_CLASS_PICNICKER, -#line 13174 +#line 13209 .trainerPic = TRAINER_PIC_PICNICKER, .encounterMusic_gender = -#line 13175 +#line 13210 F_TRAINER_FEMALE | -#line 13176 +#line 13211 TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 13177 +#line 13212 .doubleBattle = FALSE, -#line 13178 +#line 13213 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 13215 + .species = SPECIES_LOMBRE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13217 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13216 + .lvl = 18, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 13219 + .species = SPECIES_MARILL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13221 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13220 + .lvl = 18, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 13223 + [TRAINER_KAI] = + { +#line 13224 + .trainerName = _("KAI"), +#line 13225 + .trainerClass = TRAINER_CLASS_FISHERMAN, +#line 13226 + .trainerPic = TRAINER_PIC_FISHERMAN, + .encounterMusic_gender = +#line 13228 + TRAINER_ENCOUNTER_MUSIC_HIKER, +#line 13229 + .doubleBattle = FALSE, +#line 13230 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13180 - .species = SPECIES_NUZLEAF, +#line 13232 + .species = SPECIES_BARBOACH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13182 +#line 13234 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13181 +#line 13233 .lvl = 19, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13184 +#line 13236 + [TRAINER_CHARLOTTE] = + { +#line 13237 + .trainerName = _("CHARLOTTE"), +#line 13238 + .trainerClass = TRAINER_CLASS_PICNICKER, +#line 13239 + .trainerPic = TRAINER_PIC_PICNICKER, + .encounterMusic_gender = +#line 13240 +F_TRAINER_FEMALE | +#line 13241 + TRAINER_ENCOUNTER_MUSIC_GIRL, +#line 13242 + .doubleBattle = FALSE, +#line 13243 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 13245 + .species = SPECIES_NUZLEAF, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13247 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13246 + .lvl = 19, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 13249 [TRAINER_DEANDRE] = { -#line 13185 +#line 13250 .trainerName = _("DEANDRE"), -#line 13186 +#line 13251 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 13187 +#line 13252 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 13189 +#line 13254 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 13190 +#line 13255 .doubleBattle = FALSE, -#line 13191 +#line 13256 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 13193 +#line 13258 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13195 +#line 13260 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13194 +#line 13259 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13197 +#line 13262 .species = SPECIES_ARON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13199 +#line 13264 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13198 +#line 13263 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13201 +#line 13266 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13203 +#line 13268 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13202 +#line 13267 .lvl = 14, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13205 +#line 13270 [TRAINER_GRUNT_MAGMA_HIDEOUT_1] = { -#line 13206 +#line 13271 .trainerName = _("GRUNT"), -#line 13207 +#line 13272 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13208 +#line 13273 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13210 +#line 13275 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13211 +#line 13276 .doubleBattle = FALSE, -#line 13212 +#line 13277 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13214 +#line 13279 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13216 +#line 13281 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13215 +#line 13280 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13218 +#line 13283 [TRAINER_GRUNT_MAGMA_HIDEOUT_2] = { -#line 13219 +#line 13284 .trainerName = _("GRUNT"), -#line 13220 +#line 13285 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13221 +#line 13286 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13223 +#line 13288 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13224 +#line 13289 .doubleBattle = FALSE, -#line 13225 +#line 13290 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13227 +#line 13292 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13229 +#line 13294 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13228 +#line 13293 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13231 +#line 13296 [TRAINER_GRUNT_MAGMA_HIDEOUT_3] = { -#line 13232 +#line 13297 .trainerName = _("GRUNT"), -#line 13233 +#line 13298 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13234 +#line 13299 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13236 +#line 13301 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13237 +#line 13302 .doubleBattle = FALSE, -#line 13238 +#line 13303 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13240 +#line 13305 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13242 +#line 13307 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13241 +#line 13306 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13244 +#line 13309 [TRAINER_GRUNT_MAGMA_HIDEOUT_4] = { -#line 13245 +#line 13310 .trainerName = _("GRUNT"), -#line 13246 +#line 13311 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13247 +#line 13312 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13249 +#line 13314 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13250 +#line 13315 .doubleBattle = FALSE, -#line 13251 +#line 13316 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13253 +#line 13318 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13255 +#line 13320 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13254 +#line 13319 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13257 +#line 13322 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13259 +#line 13324 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13258 +#line 13323 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13261 +#line 13326 [TRAINER_GRUNT_MAGMA_HIDEOUT_5] = { -#line 13262 +#line 13327 .trainerName = _("GRUNT"), -#line 13263 +#line 13328 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13264 +#line 13329 .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13266 +#line 13331 TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13267 +#line 13332 .doubleBattle = FALSE, -#line 13268 +#line 13333 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13270 +#line 13335 .species = SPECIES_BALTOY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13272 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13271 - .lvl = 28, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 13274 - .species = SPECIES_NUMEL, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13276 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13275 - .lvl = 28, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 13278 - [TRAINER_GRUNT_MAGMA_HIDEOUT_6] = - { -#line 13279 - .trainerName = _("GRUNT"), -#line 13280 - .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13281 - .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, - .encounterMusic_gender = -#line 13283 - TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13284 - .doubleBattle = FALSE, -#line 13285 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 13287 - .species = SPECIES_MIGHTYENA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13289 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13288 - .lvl = 29, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 13291 - [TRAINER_GRUNT_MAGMA_HIDEOUT_7] = - { -#line 13292 - .trainerName = _("GRUNT"), -#line 13293 - .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13294 - .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, - .encounterMusic_gender = -#line 13296 - TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13297 - .doubleBattle = FALSE, -#line 13298 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 13300 - .species = SPECIES_ZUBAT, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13302 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13301 - .lvl = 29, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 13304 - [TRAINER_GRUNT_MAGMA_HIDEOUT_8] = - { -#line 13305 - .trainerName = _("GRUNT"), -#line 13306 - .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13307 - .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, - .encounterMusic_gender = -#line 13309 - TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13310 - .doubleBattle = FALSE, -#line 13311 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 13313 - .species = SPECIES_POOCHYENA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13315 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13314 - .lvl = 29, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 13317 - [TRAINER_GRUNT_MAGMA_HIDEOUT_9] = - { -#line 13318 - .trainerName = _("GRUNT"), -#line 13319 - .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13320 - .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, - .encounterMusic_gender = -#line 13322 - TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13323 - .doubleBattle = FALSE, -#line 13324 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 13326 - .species = SPECIES_ZUBAT, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13328 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13327 - .lvl = 29, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 13330 - [TRAINER_GRUNT_MAGMA_HIDEOUT_10] = - { -#line 13331 - .trainerName = _("GRUNT"), -#line 13332 - .trainerClass = TRAINER_CLASS_TEAM_MAGMA, -#line 13333 - .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, - .encounterMusic_gender = -#line 13335 - TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13336 - .doubleBattle = FALSE, #line 13337 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13336 + .lvl = 28, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, { #line 13339 - .species = SPECIES_MIGHTYENA, + .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, #line 13341 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 13340 - .lvl = 29, + .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, #line 13343 - [TRAINER_GRUNT_MAGMA_HIDEOUT_11] = + [TRAINER_GRUNT_MAGMA_HIDEOUT_6] = { #line 13344 .trainerName = _("GRUNT"), @@ -33627,7 +33467,7 @@ F_TRAINER_FEMALE | { { #line 13352 - .species = SPECIES_BALTOY, + .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, #line 13354 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), @@ -33639,7 +33479,7 @@ F_TRAINER_FEMALE | }, }, #line 13356 - [TRAINER_GRUNT_MAGMA_HIDEOUT_12] = + [TRAINER_GRUNT_MAGMA_HIDEOUT_7] = { #line 13357 .trainerName = _("GRUNT"), @@ -33659,7 +33499,7 @@ F_TRAINER_FEMALE | { { #line 13365 - .species = SPECIES_NUMEL, + .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, #line 13367 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), @@ -33671,7 +33511,7 @@ F_TRAINER_FEMALE | }, }, #line 13369 - [TRAINER_GRUNT_MAGMA_HIDEOUT_13] = + [TRAINER_GRUNT_MAGMA_HIDEOUT_8] = { #line 13370 .trainerName = _("GRUNT"), @@ -33691,7 +33531,7 @@ F_TRAINER_FEMALE | { { #line 13378 - .species = SPECIES_ZUBAT, + .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, #line 13380 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), @@ -33703,17 +33543,15 @@ F_TRAINER_FEMALE | }, }, #line 13382 - [TRAINER_GRUNT_MAGMA_HIDEOUT_14] = + [TRAINER_GRUNT_MAGMA_HIDEOUT_9] = { #line 13383 .trainerName = _("GRUNT"), #line 13384 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, #line 13385 - .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, + .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13386 -F_TRAINER_FEMALE | #line 13387 TRAINER_ENCOUNTER_MUSIC_MAGMA, #line 13388 @@ -33725,7 +33563,7 @@ F_TRAINER_FEMALE | { { #line 13391 - .species = SPECIES_MIGHTYENA, + .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, #line 13393 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), @@ -33737,17 +33575,15 @@ F_TRAINER_FEMALE | }, }, #line 13395 - [TRAINER_GRUNT_MAGMA_HIDEOUT_15] = + [TRAINER_GRUNT_MAGMA_HIDEOUT_10] = { #line 13396 .trainerName = _("GRUNT"), #line 13397 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, #line 13398 - .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, + .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13399 -F_TRAINER_FEMALE | #line 13400 TRAINER_ENCOUNTER_MUSIC_MAGMA, #line 13401 @@ -33759,7 +33595,7 @@ F_TRAINER_FEMALE | { { #line 13404 - .species = SPECIES_NUMEL, + .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, #line 13406 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), @@ -33771,17 +33607,15 @@ F_TRAINER_FEMALE | }, }, #line 13408 - [TRAINER_GRUNT_MAGMA_HIDEOUT_16] = + [TRAINER_GRUNT_MAGMA_HIDEOUT_11] = { #line 13409 .trainerName = _("GRUNT"), #line 13410 .trainerClass = TRAINER_CLASS_TEAM_MAGMA, #line 13411 - .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, + .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = -#line 13412 -F_TRAINER_FEMALE | #line 13413 TRAINER_ENCOUNTER_MUSIC_MAGMA, #line 13414 @@ -33805,14 +33639,14 @@ F_TRAINER_FEMALE | }, }, #line 13421 - [TRAINER_TABITHA_MAGMA_HIDEOUT] = + [TRAINER_GRUNT_MAGMA_HIDEOUT_12] = { #line 13422 - .trainerName = _("TABITHA"), + .trainerName = _("GRUNT"), #line 13423 - .trainerClass = TRAINER_CLASS_MAGMA_ADMIN, + .trainerClass = TRAINER_CLASS_TEAM_MAGMA, #line 13424 - .trainerPic = TRAINER_PIC_MAGMA_ADMIN, + .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, .encounterMusic_gender = #line 13426 TRAINER_ENCOUNTER_MUSIC_MAGMA, @@ -33820,7 +33654,7 @@ F_TRAINER_FEMALE | .doubleBattle = FALSE, #line 13428 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 4, + .partySize = 1, .party = (const struct TrainerMon[]) { { @@ -33828,1306 +33662,1472 @@ F_TRAINER_FEMALE | .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, #line 13432 - .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 13431 + .lvl = 29, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 13434 + [TRAINER_GRUNT_MAGMA_HIDEOUT_13] = + { +#line 13435 + .trainerName = _("GRUNT"), +#line 13436 + .trainerClass = TRAINER_CLASS_TEAM_MAGMA, +#line 13437 + .trainerPic = TRAINER_PIC_MAGMA_GRUNT_M, + .encounterMusic_gender = +#line 13439 + TRAINER_ENCOUNTER_MUSIC_MAGMA, +#line 13440 + .doubleBattle = FALSE, +#line 13441 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 13443 + .species = SPECIES_ZUBAT, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13445 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13444 + .lvl = 29, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 13447 + [TRAINER_GRUNT_MAGMA_HIDEOUT_14] = + { +#line 13448 + .trainerName = _("GRUNT"), +#line 13449 + .trainerClass = TRAINER_CLASS_TEAM_MAGMA, +#line 13450 + .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, + .encounterMusic_gender = +#line 13451 +F_TRAINER_FEMALE | +#line 13452 + TRAINER_ENCOUNTER_MUSIC_MAGMA, +#line 13453 + .doubleBattle = FALSE, +#line 13454 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 13456 + .species = SPECIES_MIGHTYENA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13458 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13457 + .lvl = 29, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 13460 + [TRAINER_GRUNT_MAGMA_HIDEOUT_15] = + { +#line 13461 + .trainerName = _("GRUNT"), +#line 13462 + .trainerClass = TRAINER_CLASS_TEAM_MAGMA, +#line 13463 + .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, + .encounterMusic_gender = +#line 13464 +F_TRAINER_FEMALE | +#line 13465 + TRAINER_ENCOUNTER_MUSIC_MAGMA, +#line 13466 + .doubleBattle = FALSE, +#line 13467 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 13469 + .species = SPECIES_NUMEL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13471 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13470 + .lvl = 29, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 13473 + [TRAINER_GRUNT_MAGMA_HIDEOUT_16] = + { +#line 13474 + .trainerName = _("GRUNT"), +#line 13475 + .trainerClass = TRAINER_CLASS_TEAM_MAGMA, +#line 13476 + .trainerPic = TRAINER_PIC_MAGMA_GRUNT_F, + .encounterMusic_gender = +#line 13477 +F_TRAINER_FEMALE | +#line 13478 + TRAINER_ENCOUNTER_MUSIC_MAGMA, +#line 13479 + .doubleBattle = FALSE, +#line 13480 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 13482 + .species = SPECIES_BALTOY, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13484 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13483 + .lvl = 29, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 13486 + [TRAINER_TABITHA_MAGMA_HIDEOUT] = + { +#line 13487 + .trainerName = _("TABITHA"), +#line 13488 + .trainerClass = TRAINER_CLASS_MAGMA_ADMIN, +#line 13489 + .trainerPic = TRAINER_PIC_MAGMA_ADMIN, + .encounterMusic_gender = +#line 13491 + TRAINER_ENCOUNTER_MUSIC_MAGMA, +#line 13492 + .doubleBattle = FALSE, +#line 13493 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 4, + .party = (const struct TrainerMon[]) + { + { +#line 13495 + .species = SPECIES_NUMEL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13497 + .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), +#line 13496 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13434 +#line 13499 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13436 +#line 13501 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 13435 +#line 13500 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13438 +#line 13503 .species = SPECIES_ZUBAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13440 +#line 13505 .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 13439 +#line 13504 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13442 - .species = SPECIES_CAMERUPT, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13444 - .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), -#line 13443 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 13446 - [TRAINER_DARCY] = - { -#line 13447 - .trainerName = _("DARCY"), -#line 13448 - .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 13449 - .trainerPic = TRAINER_PIC_COOLTRAINER_F, - .encounterMusic_gender = -#line 13450 -F_TRAINER_FEMALE | -#line 13451 - TRAINER_ENCOUNTER_MUSIC_COOL, -#line 13452 - .items = { ITEM_HYPER_POTION }, -#line 13453 - .doubleBattle = FALSE, -#line 13454 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 13456 - .species = SPECIES_PELIPPER, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13458 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13457 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 13460 - .species = SPECIES_CAMERUPT, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13462 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13461 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 13464 - [TRAINER_MAXIE_MOSSDEEP] = - { -#line 13465 - .trainerName = _("MAXIE"), -#line 13466 - .trainerClass = TRAINER_CLASS_MAGMA_LEADER, -#line 13467 - .trainerPic = TRAINER_PIC_MAGMA_LEADER_MAXIE, - .encounterMusic_gender = -#line 13469 - TRAINER_ENCOUNTER_MUSIC_MAGMA, -#line 13470 - .doubleBattle = FALSE, -#line 13471 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 3, - .party = (const struct TrainerMon[]) - { - { -#line 13473 - .species = SPECIES_MIGHTYENA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13475 - .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 13474 - .lvl = 42, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 13477 - .species = SPECIES_CROBAT, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13479 - .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 13478 - .lvl = 43, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 13481 - .species = SPECIES_CAMERUPT, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13483 - .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), -#line 13482 - .lvl = 44, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 13485 - [TRAINER_PETE] = - { -#line 13486 - .trainerName = _("PETE"), -#line 13487 - .trainerClass = TRAINER_CLASS_SWIMMER_M, -#line 13488 - .trainerPic = TRAINER_PIC_SWIMMER_M, - .encounterMusic_gender = -#line 13490 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 13491 - .doubleBattle = FALSE, -#line 13492 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 13494 - .species = SPECIES_TENTACOOL, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13496 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13495 - .lvl = 15, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 13498 - [TRAINER_ISABELLE] = - { -#line 13499 - .trainerName = _("ISABELLE"), -#line 13500 - .trainerClass = TRAINER_CLASS_SWIMMER_F, -#line 13501 - .trainerPic = TRAINER_PIC_SWIMMER_F, - .encounterMusic_gender = -#line 13502 -F_TRAINER_FEMALE | -#line 13503 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 13504 - .doubleBattle = FALSE, -#line 13505 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { #line 13507 - .species = SPECIES_MARILL, + .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, #line 13509 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), + .iv = TRAINER_PARTY_IVS(9, 9, 9, 9, 9, 9), #line 13508 - .lvl = 15, + .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, #line 13511 - [TRAINER_ANDRES_1] = + [TRAINER_DARCY] = { #line 13512 - .trainerName = _("ANDRES"), + .trainerName = _("DARCY"), #line 13513 - .trainerClass = TRAINER_CLASS_RUIN_MANIAC, + .trainerClass = TRAINER_CLASS_COOLTRAINER, #line 13514 - .trainerPic = TRAINER_PIC_RUIN_MANIAC, + .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = +#line 13515 +F_TRAINER_FEMALE | #line 13516 - TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 13517 - .doubleBattle = FALSE, -#line 13518 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 13520 - .species = SPECIES_SANDSHREW, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13522 - .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 13521 - .lvl = 25, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 13524 - .species = SPECIES_SANDSHREW, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13526 - .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 13525 - .lvl = 25, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 13528 - [TRAINER_JOSUE] = - { -#line 13529 - .trainerName = _("JOSUE"), -#line 13530 - .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 13531 - .trainerPic = TRAINER_PIC_BIRD_KEEPER, - .encounterMusic_gender = -#line 13533 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 13534 +#line 13517 + .items = { ITEM_HYPER_POTION }, +#line 13518 .doubleBattle = FALSE, -#line 13535 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, +#line 13519 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13537 - .species = SPECIES_TAILLOW, +#line 13521 + .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13539 - .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 13538 - .lvl = 25, +#line 13523 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13522 + .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13541 - .species = SPECIES_WINGULL, +#line 13525 + .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13543 - .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 13542 - .lvl = 25, +#line 13527 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13526 + .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13545 - [TRAINER_CAMRON] = +#line 13529 + [TRAINER_MAXIE_MOSSDEEP] = { -#line 13546 - .trainerName = _("CAMRON"), -#line 13547 - .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 13548 - .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, +#line 13530 + .trainerName = _("MAXIE"), +#line 13531 + .trainerClass = TRAINER_CLASS_MAGMA_LEADER, +#line 13532 + .trainerPic = TRAINER_PIC_MAGMA_LEADER_MAXIE, .encounterMusic_gender = -#line 13550 - TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 13551 +#line 13534 + TRAINER_ENCOUNTER_MUSIC_MAGMA, +#line 13535 .doubleBattle = FALSE, +#line 13536 + .aiFlags = AI_FLAG_BASIC_TRAINER, + .partySize = 3, + .party = (const struct TrainerMon[]) + { + { +#line 13538 + .species = SPECIES_MIGHTYENA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13540 + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), +#line 13539 + .lvl = 42, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 13542 + .species = SPECIES_CROBAT, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13544 + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), +#line 13543 + .lvl = 43, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 13546 + .species = SPECIES_CAMERUPT, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13548 + .iv = TRAINER_PARTY_IVS(18, 18, 18, 18, 18, 18), +#line 13547 + .lvl = 44, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 13550 + [TRAINER_PETE] = + { +#line 13551 + .trainerName = _("PETE"), #line 13552 + .trainerClass = TRAINER_CLASS_SWIMMER_M, +#line 13553 + .trainerPic = TRAINER_PIC_SWIMMER_M, + .encounterMusic_gender = +#line 13555 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 13556 + .doubleBattle = FALSE, +#line 13557 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13554 - .species = SPECIES_STARYU, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13556 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13555 - .lvl = 26, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 13558 - [TRAINER_CORY_1] = - { #line 13559 - .trainerName = _("CORY"), -#line 13560 - .trainerClass = TRAINER_CLASS_SAILOR, -#line 13561 - .trainerPic = TRAINER_PIC_SAILOR, - .encounterMusic_gender = -#line 13563 - TRAINER_ENCOUNTER_MUSIC_MALE, -#line 13564 - .doubleBattle = FALSE, -#line 13565 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 3, - .party = (const struct TrainerMon[]) - { - { -#line 13567 - .species = SPECIES_WINGULL, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13569 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13568 - .lvl = 24, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 13571 - .species = SPECIES_MACHOP, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13573 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13572 - .lvl = 24, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 13575 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13577 +#line 13561 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13576 - .lvl = 24, +#line 13560 + .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13579 - [TRAINER_CAROLINA] = +#line 13563 + [TRAINER_ISABELLE] = { -#line 13580 - .trainerName = _("CAROLINA"), -#line 13581 - .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 13582 - .trainerPic = TRAINER_PIC_COOLTRAINER_F, +#line 13564 + .trainerName = _("ISABELLE"), +#line 13565 + .trainerClass = TRAINER_CLASS_SWIMMER_F, +#line 13566 + .trainerPic = TRAINER_PIC_SWIMMER_F, .encounterMusic_gender = -#line 13583 +#line 13567 F_TRAINER_FEMALE | -#line 13584 - TRAINER_ENCOUNTER_MUSIC_COOL, -#line 13585 - .items = { ITEM_HYPER_POTION }, -#line 13586 +#line 13568 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 13569 .doubleBattle = FALSE, -#line 13587 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 3, +#line 13570 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, .party = (const struct TrainerMon[]) { { +#line 13572 + .species = SPECIES_MARILL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13574 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13573 + .lvl = 15, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 13576 + [TRAINER_ANDRES_1] = + { +#line 13577 + .trainerName = _("ANDRES"), +#line 13578 + .trainerClass = TRAINER_CLASS_RUIN_MANIAC, +#line 13579 + .trainerPic = TRAINER_PIC_RUIN_MANIAC, + .encounterMusic_gender = +#line 13581 + TRAINER_ENCOUNTER_MUSIC_HIKER, +#line 13582 + .doubleBattle = FALSE, +#line 13583 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 13585 + .species = SPECIES_SANDSHREW, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13587 + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), +#line 13586 + .lvl = 25, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { #line 13589 - .species = SPECIES_MANECTRIC, + .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, #line 13591 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), #line 13590 - .lvl = 24, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 13593 - .species = SPECIES_SWELLOW, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13595 - .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 13594 - .lvl = 24, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 13597 - .species = SPECIES_MANECTRIC, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13599 - .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 13598 - .lvl = 24, + .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13601 - [TRAINER_ELIJAH] = +#line 13593 + [TRAINER_JOSUE] = { -#line 13602 - .trainerName = _("ELIJAH"), -#line 13603 +#line 13594 + .trainerName = _("JOSUE"), +#line 13595 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 13604 +#line 13596 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 13606 +#line 13598 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 13607 +#line 13599 .doubleBattle = FALSE, -#line 13608 +#line 13600 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13610 - .species = SPECIES_SKARMORY, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13612 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13611 - .lvl = 25, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 13614 - .species = SPECIES_SKARMORY, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13616 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13615 - .lvl = 25, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 13618 - [TRAINER_CELIA] = - { -#line 13619 - .trainerName = _("CELIA"), -#line 13620 - .trainerClass = TRAINER_CLASS_PICNICKER, -#line 13621 - .trainerPic = TRAINER_PIC_PICNICKER, - .encounterMusic_gender = -#line 13622 -F_TRAINER_FEMALE | -#line 13623 - TRAINER_ENCOUNTER_MUSIC_GIRL, -#line 13624 - .doubleBattle = FALSE, -#line 13625 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 13627 - .species = SPECIES_MARILL, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13629 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13628 - .lvl = 22, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 13631 - .species = SPECIES_LOMBRE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13633 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13632 - .lvl = 22, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 13635 - [TRAINER_BRYAN] = - { -#line 13636 - .trainerName = _("BRYAN"), -#line 13637 - .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 13638 - .trainerPic = TRAINER_PIC_RUIN_MANIAC, - .encounterMusic_gender = -#line 13640 - TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 13641 - .doubleBattle = FALSE, -#line 13642 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 13644 - .species = SPECIES_SANDSHREW, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13646 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13645 - .lvl = 22, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 13648 - .species = SPECIES_SANDSLASH, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 13650 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13649 - .lvl = 22, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 13652 - [TRAINER_BRANDEN] = - { -#line 13653 - .trainerName = _("BRANDEN"), -#line 13654 - .trainerClass = TRAINER_CLASS_CAMPER, -#line 13655 - .trainerPic = TRAINER_PIC_CAMPER, - .encounterMusic_gender = -#line 13657 - TRAINER_ENCOUNTER_MUSIC_MALE, -#line 13658 - .doubleBattle = FALSE, -#line 13659 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 13661 +#line 13602 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13663 +#line 13604 + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), +#line 13603 + .lvl = 25, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 13606 + .species = SPECIES_WINGULL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13608 + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), +#line 13607 + .lvl = 25, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 13610 + [TRAINER_CAMRON] = + { +#line 13611 + .trainerName = _("CAMRON"), +#line 13612 + .trainerClass = TRAINER_CLASS_TRIATHLETE, +#line 13613 + .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, + .encounterMusic_gender = +#line 13615 + TRAINER_ENCOUNTER_MUSIC_SWIMMER, +#line 13616 + .doubleBattle = FALSE, +#line 13617 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 13619 + .species = SPECIES_STARYU, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13621 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13620 + .lvl = 26, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 13623 + [TRAINER_CORY_1] = + { +#line 13624 + .trainerName = _("CORY"), +#line 13625 + .trainerClass = TRAINER_CLASS_SAILOR, +#line 13626 + .trainerPic = TRAINER_PIC_SAILOR, + .encounterMusic_gender = +#line 13628 + TRAINER_ENCOUNTER_MUSIC_MALE, +#line 13629 + .doubleBattle = FALSE, +#line 13630 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 3, + .party = (const struct TrainerMon[]) + { + { +#line 13632 + .species = SPECIES_WINGULL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13634 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13633 + .lvl = 24, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 13636 + .species = SPECIES_MACHOP, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13638 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13637 + .lvl = 24, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 13640 + .species = SPECIES_TENTACOOL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13642 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13641 + .lvl = 24, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 13644 + [TRAINER_CAROLINA] = + { +#line 13645 + .trainerName = _("CAROLINA"), +#line 13646 + .trainerClass = TRAINER_CLASS_COOLTRAINER, +#line 13647 + .trainerPic = TRAINER_PIC_COOLTRAINER_F, + .encounterMusic_gender = +#line 13648 +F_TRAINER_FEMALE | +#line 13649 + TRAINER_ENCOUNTER_MUSIC_COOL, +#line 13650 + .items = { ITEM_HYPER_POTION }, +#line 13651 + .doubleBattle = FALSE, +#line 13652 + .aiFlags = AI_FLAG_BASIC_TRAINER, + .partySize = 3, + .party = (const struct TrainerMon[]) + { + { +#line 13654 + .species = SPECIES_MANECTRIC, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13656 + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), +#line 13655 + .lvl = 24, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 13658 + .species = SPECIES_SWELLOW, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13660 + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), +#line 13659 + .lvl = 24, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { #line 13662 + .species = SPECIES_MANECTRIC, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13664 + .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), +#line 13663 + .lvl = 24, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 13666 + [TRAINER_ELIJAH] = + { +#line 13667 + .trainerName = _("ELIJAH"), +#line 13668 + .trainerClass = TRAINER_CLASS_BIRD_KEEPER, +#line 13669 + .trainerPic = TRAINER_PIC_BIRD_KEEPER, + .encounterMusic_gender = +#line 13671 + TRAINER_ENCOUNTER_MUSIC_COOL, +#line 13672 + .doubleBattle = FALSE, +#line 13673 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 13675 + .species = SPECIES_SKARMORY, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13677 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13676 + .lvl = 25, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 13679 + .species = SPECIES_SKARMORY, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13681 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13680 + .lvl = 25, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 13683 + [TRAINER_CELIA] = + { +#line 13684 + .trainerName = _("CELIA"), +#line 13685 + .trainerClass = TRAINER_CLASS_PICNICKER, +#line 13686 + .trainerPic = TRAINER_PIC_PICNICKER, + .encounterMusic_gender = +#line 13687 +F_TRAINER_FEMALE | +#line 13688 + TRAINER_ENCOUNTER_MUSIC_GIRL, +#line 13689 + .doubleBattle = FALSE, +#line 13690 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 13692 + .species = SPECIES_MARILL, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13694 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13693 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13665 +#line 13696 + .species = SPECIES_LOMBRE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13698 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13697 + .lvl = 22, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 13700 + [TRAINER_BRYAN] = + { +#line 13701 + .trainerName = _("BRYAN"), +#line 13702 + .trainerClass = TRAINER_CLASS_RUIN_MANIAC, +#line 13703 + .trainerPic = TRAINER_PIC_RUIN_MANIAC, + .encounterMusic_gender = +#line 13705 + TRAINER_ENCOUNTER_MUSIC_HIKER, +#line 13706 + .doubleBattle = FALSE, +#line 13707 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 13709 + .species = SPECIES_SANDSHREW, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13711 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13710 + .lvl = 22, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 13713 + .species = SPECIES_SANDSLASH, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13715 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13714 + .lvl = 22, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 13717 + [TRAINER_BRANDEN] = + { +#line 13718 + .trainerName = _("BRANDEN"), +#line 13719 + .trainerClass = TRAINER_CLASS_CAMPER, +#line 13720 + .trainerPic = TRAINER_PIC_CAMPER, + .encounterMusic_gender = +#line 13722 + TRAINER_ENCOUNTER_MUSIC_MALE, +#line 13723 + .doubleBattle = FALSE, +#line 13724 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 13726 + .species = SPECIES_TAILLOW, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 13728 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 13727 + .lvl = 22, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 13730 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13667 +#line 13732 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13666 +#line 13731 .lvl = 22, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13669 +#line 13734 [TRAINER_BRYANT] = { -#line 13670 +#line 13735 .trainerName = _("BRYANT"), -#line 13671 +#line 13736 .trainerClass = TRAINER_CLASS_KINDLER, -#line 13672 +#line 13737 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 13674 +#line 13739 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 13675 +#line 13740 .doubleBattle = FALSE, -#line 13676 +#line 13741 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13678 +#line 13743 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13680 +#line 13745 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13679 +#line 13744 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13682 +#line 13747 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13684 +#line 13749 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13683 +#line 13748 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13686 +#line 13751 [TRAINER_SHAYLA] = { -#line 13687 +#line 13752 .trainerName = _("SHAYLA"), -#line 13688 +#line 13753 .trainerClass = TRAINER_CLASS_AROMA_LADY, -#line 13689 +#line 13754 .trainerPic = TRAINER_PIC_AROMA_LADY, .encounterMusic_gender = -#line 13690 +#line 13755 F_TRAINER_FEMALE | -#line 13691 +#line 13756 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 13692 +#line 13757 .doubleBattle = FALSE, -#line 13693 +#line 13758 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13695 +#line 13760 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13697 +#line 13762 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13696 +#line 13761 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13699 +#line 13764 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13701 +#line 13766 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13700 +#line 13765 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13703 +#line 13768 [TRAINER_KYRA] = { -#line 13704 +#line 13769 .trainerName = _("KYRA"), -#line 13705 +#line 13770 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 13706 +#line 13771 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = -#line 13707 +#line 13772 F_TRAINER_FEMALE | -#line 13708 +#line 13773 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 13709 +#line 13774 .doubleBattle = FALSE, -#line 13710 +#line 13775 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13712 +#line 13777 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13714 +#line 13779 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13713 +#line 13778 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13716 +#line 13781 .species = SPECIES_DODRIO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13718 +#line 13783 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13717 +#line 13782 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13720 +#line 13785 [TRAINER_JAIDEN] = { -#line 13721 +#line 13786 .trainerName = _("JAIDEN"), -#line 13722 +#line 13787 .trainerClass = TRAINER_CLASS_NINJA_BOY, -#line 13723 +#line 13788 .trainerPic = TRAINER_PIC_NINJA_BOY, .encounterMusic_gender = -#line 13725 +#line 13790 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 13726 +#line 13791 .doubleBattle = FALSE, -#line 13727 +#line 13792 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13729 +#line 13794 .species = SPECIES_NINJASK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13731 +#line 13796 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13730 +#line 13795 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13733 +#line 13798 .species = SPECIES_GULPIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13735 +#line 13800 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13734 +#line 13799 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13737 +#line 13802 [TRAINER_ALIX] = { -#line 13738 +#line 13803 .trainerName = _("ALIX"), -#line 13739 +#line 13804 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 13740 +#line 13805 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 13741 +#line 13806 F_TRAINER_FEMALE | -#line 13742 +#line 13807 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13743 +#line 13808 .doubleBattle = FALSE, -#line 13744 +#line 13809 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13746 +#line 13811 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13748 +#line 13813 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13747 +#line 13812 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13750 +#line 13815 .species = SPECIES_KIRLIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13752 +#line 13817 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13751 +#line 13816 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13754 +#line 13819 [TRAINER_HELENE] = { -#line 13755 +#line 13820 .trainerName = _("HELENE"), -#line 13756 +#line 13821 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 13757 +#line 13822 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 13758 +#line 13823 F_TRAINER_FEMALE | -#line 13759 +#line 13824 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13760 +#line 13825 .doubleBattle = FALSE, -#line 13761 +#line 13826 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13763 +#line 13828 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13765 +#line 13830 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13764 +#line 13829 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13767 +#line 13832 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13769 +#line 13834 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13768 +#line 13833 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13771 +#line 13836 [TRAINER_MARLENE] = { -#line 13772 +#line 13837 .trainerName = _("MARLENE"), -#line 13773 +#line 13838 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 13774 +#line 13839 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 13775 +#line 13840 F_TRAINER_FEMALE | -#line 13776 +#line 13841 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13777 +#line 13842 .doubleBattle = FALSE, -#line 13778 +#line 13843 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13780 +#line 13845 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13782 +#line 13847 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13781 +#line 13846 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13784 +#line 13849 .species = SPECIES_SPOINK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13786 +#line 13851 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13785 +#line 13850 .lvl = 18, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13788 +#line 13853 [TRAINER_DEVAN] = { -#line 13789 +#line 13854 .trainerName = _("DEVAN"), -#line 13790 +#line 13855 .trainerClass = TRAINER_CLASS_HIKER, -#line 13791 +#line 13856 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 13793 +#line 13858 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 13794 +#line 13859 .doubleBattle = FALSE, -#line 13795 +#line 13860 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13797 +#line 13862 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13799 +#line 13864 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13798 +#line 13863 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13801 +#line 13866 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13803 +#line 13868 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13802 +#line 13867 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13805 +#line 13870 [TRAINER_JOHNSON] = { -#line 13806 +#line 13871 .trainerName = _("JOHNSON"), -#line 13807 +#line 13872 .trainerClass = TRAINER_CLASS_YOUNGSTER, -#line 13808 +#line 13873 .trainerPic = TRAINER_PIC_YOUNGSTER, .encounterMusic_gender = -#line 13810 +#line 13875 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 13811 +#line 13876 .doubleBattle = FALSE, -#line 13812 +#line 13877 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13814 +#line 13879 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13816 +#line 13881 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13815 +#line 13880 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13818 +#line 13883 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13820 +#line 13885 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13819 +#line 13884 .lvl = 8, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13822 +#line 13887 [TRAINER_MELINA] = { -#line 13823 +#line 13888 .trainerName = _("MELINA"), -#line 13824 +#line 13889 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 13825 +#line 13890 .trainerPic = TRAINER_PIC_RUNNING_TRIATHLETE_F, .encounterMusic_gender = -#line 13826 +#line 13891 F_TRAINER_FEMALE | -#line 13827 +#line 13892 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 13828 +#line 13893 .doubleBattle = FALSE, -#line 13829 +#line 13894 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13831 +#line 13896 .species = SPECIES_DODUO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13833 +#line 13898 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13832 +#line 13897 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13835 +#line 13900 [TRAINER_BRANDI] = { -#line 13836 +#line 13901 .trainerName = _("BRANDI"), -#line 13837 +#line 13902 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 13838 +#line 13903 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 13839 +#line 13904 F_TRAINER_FEMALE | -#line 13840 +#line 13905 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13841 +#line 13906 .doubleBattle = FALSE, -#line 13842 +#line 13907 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13844 +#line 13909 .species = SPECIES_RALTS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13846 +#line 13911 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13845 +#line 13910 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13848 +#line 13913 [TRAINER_AISHA] = { -#line 13849 +#line 13914 .trainerName = _("AISHA"), -#line 13850 +#line 13915 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 13851 +#line 13916 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 13852 +#line 13917 F_TRAINER_FEMALE | -#line 13853 +#line 13918 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13854 +#line 13919 .doubleBattle = FALSE, -#line 13855 +#line 13920 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13857 +#line 13922 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13859 +#line 13924 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13858 +#line 13923 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13861 +#line 13926 [TRAINER_MAKAYLA] = { -#line 13862 +#line 13927 .trainerName = _("MAKAYLA"), -#line 13863 +#line 13928 .trainerClass = TRAINER_CLASS_EXPERT, -#line 13864 +#line 13929 .trainerPic = TRAINER_PIC_EXPERT_F, .encounterMusic_gender = -#line 13865 +#line 13930 F_TRAINER_FEMALE | -#line 13866 +#line 13931 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13867 +#line 13932 .items = { ITEM_HYPER_POTION }, -#line 13868 +#line 13933 .doubleBattle = FALSE, -#line 13869 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 13934 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13871 +#line 13936 .species = SPECIES_ROSELIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13873 +#line 13938 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13872 +#line 13937 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13875 +#line 13940 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13877 +#line 13942 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13876 +#line 13941 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13879 +#line 13944 [TRAINER_FABIAN] = { -#line 13880 +#line 13945 .trainerName = _("FABIAN"), -#line 13881 +#line 13946 .trainerClass = TRAINER_CLASS_GUITARIST, -#line 13882 +#line 13947 .trainerPic = TRAINER_PIC_GUITARIST, .encounterMusic_gender = -#line 13884 +#line 13949 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13885 +#line 13950 .doubleBattle = FALSE, -#line 13886 +#line 13951 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13888 +#line 13953 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13890 +#line 13955 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13889 +#line 13954 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13892 +#line 13957 [TRAINER_DAYTON] = { -#line 13893 +#line 13958 .trainerName = _("DAYTON"), -#line 13894 +#line 13959 .trainerClass = TRAINER_CLASS_KINDLER, -#line 13895 +#line 13960 .trainerPic = TRAINER_PIC_KINDLER, .encounterMusic_gender = -#line 13897 +#line 13962 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 13898 +#line 13963 .doubleBattle = FALSE, -#line 13899 +#line 13964 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13901 +#line 13966 .species = SPECIES_SLUGMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13903 +#line 13968 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13902 +#line 13967 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13905 +#line 13970 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13907 +#line 13972 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13906 +#line 13971 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13909 +#line 13974 [TRAINER_RACHEL] = { -#line 13910 +#line 13975 .trainerName = _("RACHEL"), -#line 13911 +#line 13976 .trainerClass = TRAINER_CLASS_PARASOL_LADY, -#line 13912 +#line 13977 .trainerPic = TRAINER_PIC_PARASOL_LADY, .encounterMusic_gender = -#line 13913 +#line 13978 F_TRAINER_FEMALE | -#line 13914 +#line 13979 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 13915 +#line 13980 .doubleBattle = FALSE, -#line 13916 +#line 13981 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13918 +#line 13983 .species = SPECIES_GOLDEEN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13920 +#line 13985 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13919 +#line 13984 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13922 +#line 13987 [TRAINER_LEONEL] = { -#line 13923 +#line 13988 .trainerName = _("LEONEL"), -#line 13924 +#line 13989 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 13925 +#line 13990 .trainerPic = TRAINER_PIC_COOLTRAINER_M, .encounterMusic_gender = -#line 13927 +#line 13992 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 13928 +#line 13993 .items = { ITEM_HYPER_POTION }, -#line 13929 +#line 13994 .doubleBattle = FALSE, -#line 13930 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 13995 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 13932 +#line 13997 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13934 +#line 13999 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 13933 +#line 13998 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 13935 +#line 14000 MOVE_THUNDER, MOVE_QUICK_ATTACK, MOVE_THUNDER_WAVE, @@ -35135,442 +35135,442 @@ F_TRAINER_FEMALE | }, }, }, -#line 13939 +#line 14004 [TRAINER_CALLIE] = { -#line 13940 +#line 14005 .trainerName = _("CALLIE"), -#line 13941 +#line 14006 .trainerClass = TRAINER_CLASS_BATTLE_GIRL, -#line 13942 +#line 14007 .trainerPic = TRAINER_PIC_BATTLE_GIRL, .encounterMusic_gender = -#line 13943 +#line 14008 F_TRAINER_FEMALE | -#line 13944 +#line 14009 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 13945 +#line 14010 .doubleBattle = FALSE, -#line 13946 +#line 14011 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13948 +#line 14013 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13950 +#line 14015 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13949 +#line 14014 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13952 +#line 14017 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13954 +#line 14019 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13953 +#line 14018 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13956 +#line 14021 [TRAINER_CALE] = { -#line 13957 +#line 14022 .trainerName = _("CALE"), -#line 13958 +#line 14023 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 13959 +#line 14024 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 13961 +#line 14026 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 13962 +#line 14027 .doubleBattle = FALSE, -#line 13963 +#line 14028 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 13965 +#line 14030 .species = SPECIES_DUSTOX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13967 +#line 14032 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13966 +#line 14031 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13969 +#line 14034 .species = SPECIES_BEAUTIFLY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13971 +#line 14036 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 13970 +#line 14035 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 13973 +#line 14038 [TRAINER_MYLES] = { -#line 13974 +#line 14039 .trainerName = _("MYLES"), -#line 13975 +#line 14040 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 13976 +#line 14041 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_M, .encounterMusic_gender = -#line 13978 +#line 14043 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 13979 +#line 14044 .doubleBattle = FALSE, -#line 13980 +#line 14045 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 13982 +#line 14047 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13984 +#line 14049 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 13983 +#line 14048 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13986 +#line 14051 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13988 +#line 14053 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 13987 +#line 14052 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13990 +#line 14055 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13992 +#line 14057 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 13991 +#line 14056 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13994 +#line 14059 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 13996 +#line 14061 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 13995 +#line 14060 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 13998 +#line 14063 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14000 +#line 14065 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 13999 +#line 14064 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14002 +#line 14067 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14004 +#line 14069 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 14003 +#line 14068 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 14006 +#line 14071 [TRAINER_PAT] = { -#line 14007 +#line 14072 .trainerName = _("PAT"), -#line 14008 +#line 14073 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 14009 +#line 14074 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 14010 +#line 14075 F_TRAINER_FEMALE | -#line 14011 +#line 14076 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14012 +#line 14077 .doubleBattle = FALSE, -#line 14013 +#line 14078 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 14015 +#line 14080 .species = SPECIES_POOCHYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14017 +#line 14082 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 14016 +#line 14081 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14019 +#line 14084 .species = SPECIES_SHROOMISH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14021 +#line 14086 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 14020 +#line 14085 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14023 +#line 14088 .species = SPECIES_ELECTRIKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14025 +#line 14090 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 14024 +#line 14089 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14027 +#line 14092 .species = SPECIES_MARILL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14029 +#line 14094 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 14028 +#line 14093 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14031 +#line 14096 .species = SPECIES_SANDSHREW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14033 +#line 14098 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 14032 +#line 14097 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14035 +#line 14100 .species = SPECIES_GULPIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14037 +#line 14102 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 14036 +#line 14101 .lvl = 25, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 14039 +#line 14104 [TRAINER_CRISTIN_1] = { -#line 14040 +#line 14105 .trainerName = _("CRISTIN"), -#line 14041 +#line 14106 .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 14042 +#line 14107 .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = -#line 14043 +#line 14108 F_TRAINER_FEMALE | -#line 14044 +#line 14109 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 14045 +#line 14110 .items = { ITEM_HYPER_POTION }, -#line 14046 +#line 14111 .doubleBattle = FALSE, -#line 14047 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 14112 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 14049 +#line 14114 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14051 +#line 14116 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 14050 +#line 14115 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14053 +#line 14118 .species = SPECIES_VIGOROTH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14055 +#line 14120 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 14054 +#line 14119 .lvl = 29, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 14057 +#line 14122 [TRAINER_MAY_RUSTBORO_TREECKO] = { -#line 14058 +#line 14123 .trainerName = _("MAY"), -#line 14059 +#line 14124 .trainerClass = TRAINER_CLASS_RIVAL, -#line 14060 +#line 14125 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 14061 +#line 14126 F_TRAINER_FEMALE | -#line 14062 +#line 14127 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14063 +#line 14128 .doubleBattle = FALSE, -#line 14064 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 14129 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 14066 +#line 14131 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14068 +#line 14133 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 14067 +#line 14132 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14070 +#line 14135 .species = SPECIES_TORCHIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14072 +#line 14137 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 14071 +#line 14136 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 14074 +#line 14139 [TRAINER_MAY_RUSTBORO_TORCHIC] = { -#line 14075 +#line 14140 .trainerName = _("MAY"), -#line 14076 +#line 14141 .trainerClass = TRAINER_CLASS_RIVAL, -#line 14077 +#line 14142 .trainerPic = TRAINER_PIC_MAY, .encounterMusic_gender = -#line 14078 +#line 14143 F_TRAINER_FEMALE | -#line 14079 +#line 14144 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14080 +#line 14145 .doubleBattle = FALSE, -#line 14081 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 14146 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 14083 +#line 14148 .species = SPECIES_TORKOAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14085 +#line 14150 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 14084 +#line 14149 .lvl = 13, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 14087 +#line 14152 .species = SPECIES_MUDKIP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14089 +#line 14154 .iv = TRAINER_PARTY_IVS(6, 6, 6, 6, 6, 6), -#line 14088 +#line 14153 .lvl = 15, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 14091 +#line 14156 [TRAINER_ROXANNE_2] = { -#line 14092 +#line 14157 .trainerName = _("ROXANNE"), -#line 14093 +#line 14158 .trainerClass = TRAINER_CLASS_LEADER, -#line 14094 +#line 14159 .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .encounterMusic_gender = -#line 14095 +#line 14160 F_TRAINER_FEMALE | -#line 14096 +#line 14161 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14097 +#line 14162 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14098 +#line 14163 .doubleBattle = TRUE, -#line 14099 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 14164 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 14101 +#line 14166 .species = SPECIES_GOLEM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14103 +#line 14168 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14102 +#line 14167 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14104 +#line 14169 MOVE_PROTECT, MOVE_ROLLOUT, MOVE_MAGNITUDE, @@ -35578,19 +35578,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14109 +#line 14174 .species = SPECIES_KABUTO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14109 +#line 14174 .heldItem = ITEM_SITRUS_BERRY, -#line 14111 +#line 14176 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14110 +#line 14175 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14112 +#line 14177 MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, @@ -35598,17 +35598,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14117 +#line 14182 .species = SPECIES_ONIX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14119 +#line 14184 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14118 +#line 14183 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14120 +#line 14185 MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, @@ -35616,19 +35616,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14125 +#line 14190 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14125 +#line 14190 .heldItem = ITEM_SITRUS_BERRY, -#line 14127 +#line 14192 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14126 +#line 14191 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14128 +#line 14193 MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, @@ -35637,41 +35637,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14133 +#line 14198 [TRAINER_ROXANNE_3] = { -#line 14134 +#line 14199 .trainerName = _("ROXANNE"), -#line 14135 +#line 14200 .trainerClass = TRAINER_CLASS_LEADER, -#line 14136 +#line 14201 .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .encounterMusic_gender = -#line 14137 +#line 14202 F_TRAINER_FEMALE | -#line 14138 +#line 14203 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14139 +#line 14204 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14140 +#line 14205 .doubleBattle = TRUE, -#line 14141 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 14206 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14143 +#line 14208 .species = SPECIES_OMANYTE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14145 +#line 14210 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14144 +#line 14209 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14146 +#line 14211 MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, @@ -35679,17 +35679,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14151 +#line 14216 .species = SPECIES_GOLEM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14153 +#line 14218 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14152 +#line 14217 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14154 +#line 14219 MOVE_PROTECT, MOVE_ROLLOUT, MOVE_MAGNITUDE, @@ -35697,19 +35697,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14159 +#line 14224 .species = SPECIES_KABUTOPS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14159 +#line 14224 .heldItem = ITEM_SITRUS_BERRY, -#line 14161 +#line 14226 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14160 +#line 14225 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14162 +#line 14227 MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, @@ -35717,17 +35717,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14167 +#line 14232 .species = SPECIES_ONIX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14169 +#line 14234 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14168 +#line 14233 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14170 +#line 14235 MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, @@ -35735,19 +35735,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14175 +#line 14240 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14175 +#line 14240 .heldItem = ITEM_SITRUS_BERRY, -#line 14177 +#line 14242 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14176 +#line 14241 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14178 +#line 14243 MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, @@ -35756,41 +35756,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14183 +#line 14248 [TRAINER_ROXANNE_4] = { -#line 14184 +#line 14249 .trainerName = _("ROXANNE"), -#line 14185 +#line 14250 .trainerClass = TRAINER_CLASS_LEADER, -#line 14186 +#line 14251 .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .encounterMusic_gender = -#line 14187 +#line 14252 F_TRAINER_FEMALE | -#line 14188 +#line 14253 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14189 +#line 14254 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14190 +#line 14255 .doubleBattle = TRUE, -#line 14191 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 14256 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14193 +#line 14258 .species = SPECIES_OMASTAR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14195 +#line 14260 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14194 +#line 14259 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14196 +#line 14261 MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, @@ -35798,17 +35798,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14201 +#line 14266 .species = SPECIES_GOLEM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14203 +#line 14268 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14202 +#line 14267 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14204 +#line 14269 MOVE_PROTECT, MOVE_ROLLOUT, MOVE_EARTHQUAKE, @@ -35816,19 +35816,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14209 +#line 14274 .species = SPECIES_KABUTOPS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14209 +#line 14274 .heldItem = ITEM_SITRUS_BERRY, -#line 14211 +#line 14276 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14210 +#line 14275 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14212 +#line 14277 MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, @@ -35836,17 +35836,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14217 +#line 14282 .species = SPECIES_ONIX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14219 +#line 14284 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14218 +#line 14283 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14220 +#line 14285 MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, @@ -35854,19 +35854,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14225 +#line 14290 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14225 +#line 14290 .heldItem = ITEM_SITRUS_BERRY, -#line 14227 +#line 14292 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14226 +#line 14291 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14228 +#line 14293 MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, @@ -35875,41 +35875,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14233 +#line 14298 [TRAINER_ROXANNE_5] = { -#line 14234 +#line 14299 .trainerName = _("ROXANNE"), -#line 14235 +#line 14300 .trainerClass = TRAINER_CLASS_LEADER, -#line 14236 +#line 14301 .trainerPic = TRAINER_PIC_LEADER_ROXANNE, .encounterMusic_gender = -#line 14237 +#line 14302 F_TRAINER_FEMALE | -#line 14238 +#line 14303 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14239 +#line 14304 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14240 +#line 14305 .doubleBattle = TRUE, -#line 14241 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 14306 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 14243 +#line 14308 .species = SPECIES_AERODACTYL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14245 +#line 14310 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14244 +#line 14309 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14246 +#line 14311 MOVE_ROCK_SLIDE, MOVE_HYPER_BEAM, MOVE_SUPERSONIC, @@ -35917,17 +35917,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14251 +#line 14316 .species = SPECIES_GOLEM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14253 +#line 14318 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14252 +#line 14317 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14254 +#line 14319 MOVE_FOCUS_PUNCH, MOVE_ROLLOUT, MOVE_EARTHQUAKE, @@ -35935,17 +35935,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14259 +#line 14324 .species = SPECIES_OMASTAR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14261 +#line 14326 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14260 +#line 14325 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14262 +#line 14327 MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, @@ -35953,19 +35953,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14267 +#line 14332 .species = SPECIES_KABUTOPS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14267 +#line 14332 .heldItem = ITEM_SITRUS_BERRY, -#line 14269 +#line 14334 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14268 +#line 14333 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14270 +#line 14335 MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, @@ -35973,17 +35973,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14275 +#line 14340 .species = SPECIES_STEELIX, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14277 +#line 14342 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14276 +#line 14341 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14278 +#line 14343 MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, @@ -35991,19 +35991,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14283 +#line 14348 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14283 +#line 14348 .heldItem = ITEM_SITRUS_BERRY, -#line 14285 +#line 14350 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14284 +#line 14349 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14286 +#line 14351 MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, @@ -36012,41 +36012,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14291 +#line 14356 [TRAINER_BRAWLY_2] = { -#line 14292 +#line 14357 .trainerName = _("BRAWLY"), -#line 14293 +#line 14358 .trainerClass = TRAINER_CLASS_LEADER, -#line 14294 +#line 14359 .trainerPic = TRAINER_PIC_LEADER_BRAWLY, .encounterMusic_gender = -#line 14296 +#line 14361 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14297 +#line 14362 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14298 +#line 14363 .doubleBattle = TRUE, -#line 14299 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 14364 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 14301 +#line 14366 .species = SPECIES_MACHAMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14301 +#line 14366 .heldItem = ITEM_SITRUS_BERRY, -#line 14303 +#line 14368 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14302 +#line 14367 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14304 +#line 14369 MOVE_KARATE_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, @@ -36054,17 +36054,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14309 +#line 14374 .species = SPECIES_MEDITITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14311 +#line 14376 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14310 +#line 14375 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14312 +#line 14377 MOVE_PSYCHIC, MOVE_LIGHT_SCREEN, MOVE_REFLECT, @@ -36072,17 +36072,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14317 +#line 14382 .species = SPECIES_HITMONTOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14319 +#line 14384 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14318 +#line 14383 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14320 +#line 14385 MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, @@ -36090,19 +36090,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14325 +#line 14390 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14325 +#line 14390 .heldItem = ITEM_SITRUS_BERRY, -#line 14327 +#line 14392 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14326 +#line 14391 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14328 +#line 14393 MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, @@ -36111,41 +36111,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14333 +#line 14398 [TRAINER_BRAWLY_3] = { -#line 14334 +#line 14399 .trainerName = _("BRAWLY"), -#line 14335 +#line 14400 .trainerClass = TRAINER_CLASS_LEADER, -#line 14336 +#line 14401 .trainerPic = TRAINER_PIC_LEADER_BRAWLY, .encounterMusic_gender = -#line 14338 +#line 14403 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14339 +#line 14404 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14340 +#line 14405 .doubleBattle = TRUE, -#line 14341 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 14406 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 14343 +#line 14408 .species = SPECIES_MACHAMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14343 +#line 14408 .heldItem = ITEM_SITRUS_BERRY, -#line 14345 +#line 14410 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14344 +#line 14409 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14346 +#line 14411 MOVE_KARATE_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, @@ -36153,17 +36153,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14351 +#line 14416 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14353 +#line 14418 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14352 +#line 14417 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14354 +#line 14419 MOVE_PSYCHIC, MOVE_LIGHT_SCREEN, MOVE_REFLECT, @@ -36171,17 +36171,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14359 +#line 14424 .species = SPECIES_HITMONTOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14361 +#line 14426 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14360 +#line 14425 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14362 +#line 14427 MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, @@ -36189,19 +36189,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14367 +#line 14432 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14367 +#line 14432 .heldItem = ITEM_SITRUS_BERRY, -#line 14369 +#line 14434 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14368 +#line 14433 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14370 +#line 14435 MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, @@ -36210,39 +36210,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 14375 +#line 14440 [TRAINER_BRAWLY_4] = { -#line 14376 +#line 14441 .trainerName = _("BRAWLY"), -#line 14377 +#line 14442 .trainerClass = TRAINER_CLASS_LEADER, -#line 14378 +#line 14443 .trainerPic = TRAINER_PIC_LEADER_BRAWLY, .encounterMusic_gender = -#line 14380 +#line 14445 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14381 +#line 14446 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14382 +#line 14447 .doubleBattle = TRUE, -#line 14383 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 14448 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14385 +#line 14450 .species = SPECIES_HITMONCHAN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14387 +#line 14452 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14386 +#line 14451 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14388 +#line 14453 MOVE_SKY_UPPERCUT, MOVE_PROTECT, MOVE_FIRE_PUNCH, @@ -36250,19 +36250,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14393 +#line 14458 .species = SPECIES_MACHAMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14393 +#line 14458 .heldItem = ITEM_SITRUS_BERRY, -#line 14395 +#line 14460 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14394 +#line 14459 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14396 +#line 14461 MOVE_KARATE_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, @@ -36270,17 +36270,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14401 +#line 14466 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14403 +#line 14468 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14402 +#line 14467 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14404 +#line 14469 MOVE_FOCUS_PUNCH, MOVE_LIGHT_SCREEN, MOVE_REFLECT, @@ -36288,17 +36288,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14409 +#line 14474 .species = SPECIES_HITMONTOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14411 +#line 14476 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14410 +#line 14475 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14412 +#line 14477 MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, @@ -36306,19 +36306,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14417 +#line 14482 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14417 +#line 14482 .heldItem = ITEM_SITRUS_BERRY, -#line 14419 +#line 14484 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14418 +#line 14483 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14420 +#line 14485 MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, @@ -36327,39 +36327,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 14425 +#line 14490 [TRAINER_BRAWLY_5] = { -#line 14426 +#line 14491 .trainerName = _("BRAWLY"), -#line 14427 +#line 14492 .trainerClass = TRAINER_CLASS_LEADER, -#line 14428 +#line 14493 .trainerPic = TRAINER_PIC_LEADER_BRAWLY, .encounterMusic_gender = -#line 14430 +#line 14495 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14431 +#line 14496 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14432 +#line 14497 .doubleBattle = TRUE, -#line 14433 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 14498 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 14435 +#line 14500 .species = SPECIES_HITMONLEE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14437 +#line 14502 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14436 +#line 14501 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14438 +#line 14503 MOVE_MEGA_KICK, MOVE_FOCUS_PUNCH, MOVE_EARTHQUAKE, @@ -36367,17 +36367,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14443 +#line 14508 .species = SPECIES_HITMONCHAN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14445 +#line 14510 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14444 +#line 14509 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14446 +#line 14511 MOVE_SKY_UPPERCUT, MOVE_PROTECT, MOVE_FIRE_PUNCH, @@ -36385,19 +36385,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14451 +#line 14516 .species = SPECIES_MACHAMP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14451 +#line 14516 .heldItem = ITEM_SITRUS_BERRY, -#line 14453 +#line 14518 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14452 +#line 14517 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14454 +#line 14519 MOVE_CROSS_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, @@ -36405,17 +36405,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14459 +#line 14524 .species = SPECIES_MEDICHAM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14461 +#line 14526 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14460 +#line 14525 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14462 +#line 14527 MOVE_FOCUS_PUNCH, MOVE_LIGHT_SCREEN, MOVE_REFLECT, @@ -36423,17 +36423,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14467 +#line 14532 .species = SPECIES_HITMONTOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14469 +#line 14534 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14468 +#line 14533 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14470 +#line 14535 MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, @@ -36441,19 +36441,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14475 +#line 14540 .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14475 +#line 14540 .heldItem = ITEM_SITRUS_BERRY, -#line 14477 +#line 14542 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14476 +#line 14541 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14478 +#line 14543 MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, @@ -36462,39 +36462,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 14483 +#line 14548 [TRAINER_WATTSON_2] = { -#line 14484 +#line 14549 .trainerName = _("WATTSON"), -#line 14485 +#line 14550 .trainerClass = TRAINER_CLASS_LEADER, -#line 14486 +#line 14551 .trainerPic = TRAINER_PIC_LEADER_WATTSON, .encounterMusic_gender = -#line 14488 +#line 14553 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14489 +#line 14554 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14490 +#line 14555 .doubleBattle = TRUE, -#line 14491 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 14556 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 14493 +#line 14558 .species = SPECIES_MAREEP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14495 +#line 14560 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14494 +#line 14559 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14496 +#line 14561 MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, @@ -36502,17 +36502,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14501 +#line 14566 .species = SPECIES_ELECTRODE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14503 +#line 14568 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14502 +#line 14567 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14504 +#line 14569 MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, @@ -36520,19 +36520,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14509 +#line 14574 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14509 +#line 14574 .heldItem = ITEM_SITRUS_BERRY, -#line 14511 +#line 14576 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14510 +#line 14575 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14512 +#line 14577 MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, @@ -36540,19 +36540,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14517 +#line 14582 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14517 +#line 14582 .heldItem = ITEM_SITRUS_BERRY, -#line 14519 +#line 14584 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14518 +#line 14583 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14520 +#line 14585 MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, @@ -36561,39 +36561,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 14525 +#line 14590 [TRAINER_WATTSON_3] = { -#line 14526 +#line 14591 .trainerName = _("WATTSON"), -#line 14527 +#line 14592 .trainerClass = TRAINER_CLASS_LEADER, -#line 14528 +#line 14593 .trainerPic = TRAINER_PIC_LEADER_WATTSON, .encounterMusic_gender = -#line 14530 +#line 14595 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14531 +#line 14596 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14532 +#line 14597 .doubleBattle = TRUE, -#line 14533 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 14598 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14535 +#line 14600 .species = SPECIES_PIKACHU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14537 +#line 14602 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14536 +#line 14601 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14538 +#line 14603 MOVE_THUNDER, MOVE_SLAM, MOVE_RAIN_DANCE, @@ -36601,17 +36601,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14543 +#line 14608 .species = SPECIES_FLAAFFY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14545 +#line 14610 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14544 +#line 14609 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14546 +#line 14611 MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, @@ -36619,17 +36619,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14551 +#line 14616 .species = SPECIES_ELECTRODE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14553 +#line 14618 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14552 +#line 14617 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14554 +#line 14619 MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, @@ -36637,19 +36637,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14559 +#line 14624 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14559 +#line 14624 .heldItem = ITEM_SITRUS_BERRY, -#line 14561 +#line 14626 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14560 +#line 14625 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14562 +#line 14627 MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, @@ -36657,19 +36657,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14567 +#line 14632 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14567 +#line 14632 .heldItem = ITEM_SITRUS_BERRY, -#line 14569 +#line 14634 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14568 +#line 14633 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14570 +#line 14635 MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, @@ -36678,39 +36678,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 14575 +#line 14640 [TRAINER_WATTSON_4] = { -#line 14576 +#line 14641 .trainerName = _("WATTSON"), -#line 14577 +#line 14642 .trainerClass = TRAINER_CLASS_LEADER, -#line 14578 +#line 14643 .trainerPic = TRAINER_PIC_LEADER_WATTSON, .encounterMusic_gender = -#line 14580 +#line 14645 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14581 +#line 14646 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14582 +#line 14647 .doubleBattle = TRUE, -#line 14583 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 14648 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14585 +#line 14650 .species = SPECIES_RAICHU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14587 +#line 14652 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14586 +#line 14651 .lvl = 44, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14588 +#line 14653 MOVE_THUNDER, MOVE_SLAM, MOVE_RAIN_DANCE, @@ -36718,17 +36718,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14593 +#line 14658 .species = SPECIES_AMPHAROS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14595 +#line 14660 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14594 +#line 14659 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14596 +#line 14661 MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, @@ -36736,17 +36736,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14601 +#line 14666 .species = SPECIES_ELECTRODE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14603 +#line 14668 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14602 +#line 14667 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14604 +#line 14669 MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, @@ -36754,19 +36754,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14609 +#line 14674 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14609 +#line 14674 .heldItem = ITEM_SITRUS_BERRY, -#line 14611 +#line 14676 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14610 +#line 14675 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14612 +#line 14677 MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, @@ -36774,19 +36774,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14617 +#line 14682 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14617 +#line 14682 .heldItem = ITEM_SITRUS_BERRY, -#line 14619 +#line 14684 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14618 +#line 14683 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14620 +#line 14685 MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, @@ -36795,39 +36795,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 14625 +#line 14690 [TRAINER_WATTSON_5] = { -#line 14626 +#line 14691 .trainerName = _("WATTSON"), -#line 14627 +#line 14692 .trainerClass = TRAINER_CLASS_LEADER, -#line 14628 +#line 14693 .trainerPic = TRAINER_PIC_LEADER_WATTSON, .encounterMusic_gender = -#line 14630 +#line 14695 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14631 +#line 14696 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14632 +#line 14697 .doubleBattle = TRUE, -#line 14633 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 14698 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 14635 +#line 14700 .species = SPECIES_ELECTABUZZ, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14637 +#line 14702 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14636 +#line 14701 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14638 +#line 14703 MOVE_SWIFT, MOVE_FOCUS_PUNCH, MOVE_THUNDER_PUNCH, @@ -36835,17 +36835,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14643 +#line 14708 .species = SPECIES_RAICHU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14645 +#line 14710 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14644 +#line 14709 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14646 +#line 14711 MOVE_THUNDER, MOVE_SLAM, MOVE_RAIN_DANCE, @@ -36853,17 +36853,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14651 +#line 14716 .species = SPECIES_AMPHAROS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14653 +#line 14718 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14652 +#line 14717 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14654 +#line 14719 MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, @@ -36871,17 +36871,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14659 +#line 14724 .species = SPECIES_ELECTRODE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14661 +#line 14726 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14660 +#line 14725 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14662 +#line 14727 MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, @@ -36889,19 +36889,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14667 +#line 14732 .species = SPECIES_MAGNETON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14667 +#line 14732 .heldItem = ITEM_SITRUS_BERRY, -#line 14669 +#line 14734 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14668 +#line 14733 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14670 +#line 14735 MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, @@ -36909,19 +36909,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14675 +#line 14740 .species = SPECIES_MANECTRIC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14675 +#line 14740 .heldItem = ITEM_SITRUS_BERRY, -#line 14677 +#line 14742 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14676 +#line 14741 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14678 +#line 14743 MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, @@ -36930,43 +36930,43 @@ F_TRAINER_FEMALE | }, }, }, -#line 14683 +#line 14748 [TRAINER_FLANNERY_2] = { -#line 14684 +#line 14749 .trainerName = _("FLANNERY"), -#line 14685 +#line 14750 .trainerClass = TRAINER_CLASS_LEADER, -#line 14686 +#line 14751 .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .encounterMusic_gender = -#line 14687 +#line 14752 F_TRAINER_FEMALE | -#line 14688 +#line 14753 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14689 +#line 14754 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14690 +#line 14755 .doubleBattle = TRUE, -#line 14691 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 14756 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 14693 +#line 14758 .species = SPECIES_MAGCARGO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14693 +#line 14758 .heldItem = ITEM_WHITE_HERB, -#line 14695 +#line 14760 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14694 +#line 14759 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14696 +#line 14761 MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, @@ -36974,17 +36974,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14701 +#line 14766 .species = SPECIES_PONYTA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14703 +#line 14768 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14702 +#line 14767 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14704 +#line 14769 MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, @@ -36992,19 +36992,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14709 +#line 14774 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14709 +#line 14774 .heldItem = ITEM_WHITE_HERB, -#line 14711 +#line 14776 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14710 +#line 14775 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14712 +#line 14777 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, @@ -37012,19 +37012,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14717 +#line 14782 .species = SPECIES_TORKOAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14717 +#line 14782 .heldItem = ITEM_WHITE_HERB, -#line 14719 +#line 14784 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14718 +#line 14783 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14720 +#line 14785 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, @@ -37033,41 +37033,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14725 +#line 14790 [TRAINER_FLANNERY_3] = { -#line 14726 +#line 14791 .trainerName = _("FLANNERY"), -#line 14727 +#line 14792 .trainerClass = TRAINER_CLASS_LEADER, -#line 14728 +#line 14793 .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .encounterMusic_gender = -#line 14729 +#line 14794 F_TRAINER_FEMALE | -#line 14730 +#line 14795 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14731 +#line 14796 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14732 +#line 14797 .doubleBattle = TRUE, -#line 14733 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 14798 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14735 +#line 14800 .species = SPECIES_GROWLITHE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14737 +#line 14802 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14736 +#line 14801 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14738 +#line 14803 MOVE_HELPING_HAND, MOVE_FLAMETHROWER, MOVE_ROAR, @@ -37075,19 +37075,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14743 +#line 14808 .species = SPECIES_MAGCARGO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14743 +#line 14808 .heldItem = ITEM_WHITE_HERB, -#line 14745 +#line 14810 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14744 +#line 14809 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14746 +#line 14811 MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, @@ -37095,17 +37095,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14751 +#line 14816 .species = SPECIES_PONYTA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14753 +#line 14818 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14752 +#line 14817 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14754 +#line 14819 MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, @@ -37113,19 +37113,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14759 +#line 14824 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14759 +#line 14824 .heldItem = ITEM_WHITE_HERB, -#line 14761 +#line 14826 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14760 +#line 14825 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14762 +#line 14827 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, @@ -37133,19 +37133,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14767 +#line 14832 .species = SPECIES_TORKOAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14767 +#line 14832 .heldItem = ITEM_WHITE_HERB, -#line 14769 +#line 14834 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14768 +#line 14833 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14770 +#line 14835 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, @@ -37154,41 +37154,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14775 +#line 14840 [TRAINER_FLANNERY_4] = { -#line 14776 +#line 14841 .trainerName = _("FLANNERY"), -#line 14777 +#line 14842 .trainerClass = TRAINER_CLASS_LEADER, -#line 14778 +#line 14843 .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .encounterMusic_gender = -#line 14779 +#line 14844 F_TRAINER_FEMALE | -#line 14780 +#line 14845 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14781 +#line 14846 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14782 +#line 14847 .doubleBattle = TRUE, -#line 14783 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 14848 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 14785 +#line 14850 .species = SPECIES_HOUNDOUR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14787 +#line 14852 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14786 +#line 14851 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14788 +#line 14853 MOVE_ROAR, MOVE_SOLAR_BEAM, MOVE_TAUNT, @@ -37196,17 +37196,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14793 +#line 14858 .species = SPECIES_GROWLITHE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14795 +#line 14860 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14794 +#line 14859 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14796 +#line 14861 MOVE_HELPING_HAND, MOVE_FLAMETHROWER, MOVE_SUNNY_DAY, @@ -37214,19 +37214,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14801 +#line 14866 .species = SPECIES_MAGCARGO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14801 +#line 14866 .heldItem = ITEM_WHITE_HERB, -#line 14803 +#line 14868 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14802 +#line 14867 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14804 +#line 14869 MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, @@ -37234,17 +37234,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14809 +#line 14874 .species = SPECIES_RAPIDASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14811 +#line 14876 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14810 +#line 14875 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14812 +#line 14877 MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, @@ -37252,19 +37252,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14817 +#line 14882 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14817 +#line 14882 .heldItem = ITEM_WHITE_HERB, -#line 14819 +#line 14884 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14818 +#line 14883 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14820 +#line 14885 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, @@ -37272,19 +37272,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14825 +#line 14890 .species = SPECIES_TORKOAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14825 +#line 14890 .heldItem = ITEM_WHITE_HERB, -#line 14827 +#line 14892 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14826 +#line 14891 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14828 +#line 14893 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, @@ -37293,41 +37293,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14833 +#line 14898 [TRAINER_FLANNERY_5] = { -#line 14834 +#line 14899 .trainerName = _("FLANNERY"), -#line 14835 +#line 14900 .trainerClass = TRAINER_CLASS_LEADER, -#line 14836 +#line 14901 .trainerPic = TRAINER_PIC_LEADER_FLANNERY, .encounterMusic_gender = -#line 14837 +#line 14902 F_TRAINER_FEMALE | -#line 14838 +#line 14903 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 14839 +#line 14904 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14840 +#line 14905 .doubleBattle = TRUE, -#line 14841 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 14906 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 14843 +#line 14908 .species = SPECIES_ARCANINE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14845 +#line 14910 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14844 +#line 14909 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14846 +#line 14911 MOVE_HELPING_HAND, MOVE_FLAMETHROWER, MOVE_SUNNY_DAY, @@ -37335,19 +37335,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14851 +#line 14916 .species = SPECIES_MAGCARGO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14851 +#line 14916 .heldItem = ITEM_WHITE_HERB, -#line 14853 +#line 14918 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14852 +#line 14917 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14854 +#line 14919 MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, @@ -37355,17 +37355,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14859 +#line 14924 .species = SPECIES_HOUNDOOM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14861 +#line 14926 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14860 +#line 14925 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14862 +#line 14927 MOVE_ROAR, MOVE_SOLAR_BEAM, MOVE_TAUNT, @@ -37373,17 +37373,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14867 +#line 14932 .species = SPECIES_RAPIDASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14869 +#line 14934 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14868 +#line 14933 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14870 +#line 14935 MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, @@ -37391,19 +37391,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14875 +#line 14940 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14875 +#line 14940 .heldItem = ITEM_WHITE_HERB, -#line 14877 +#line 14942 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14876 +#line 14941 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14878 +#line 14943 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, @@ -37411,19 +37411,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14883 +#line 14948 .species = SPECIES_TORKOAL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14883 +#line 14948 .heldItem = ITEM_WHITE_HERB, -#line 14885 +#line 14950 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14884 +#line 14949 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14886 +#line 14951 MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, @@ -37432,39 +37432,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 14891 +#line 14956 [TRAINER_NORMAN_2] = { -#line 14892 +#line 14957 .trainerName = _("NORMAN"), -#line 14893 +#line 14958 .trainerClass = TRAINER_CLASS_LEADER, -#line 14894 +#line 14959 .trainerPic = TRAINER_PIC_LEADER_NORMAN, .encounterMusic_gender = -#line 14896 +#line 14961 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14897 +#line 14962 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14898 +#line 14963 .doubleBattle = TRUE, -#line 14899 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 14964 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 4, .party = (const struct TrainerMon[]) { { -#line 14901 +#line 14966 .species = SPECIES_CHANSEY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14903 +#line 14968 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14902 +#line 14967 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14904 +#line 14969 MOVE_LIGHT_SCREEN, MOVE_SING, MOVE_SKILL_SWAP, @@ -37472,19 +37472,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14909 +#line 14974 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14909 +#line 14974 .heldItem = ITEM_SITRUS_BERRY, -#line 14911 +#line 14976 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14910 +#line 14975 .lvl = 42, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14912 +#line 14977 MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, @@ -37492,17 +37492,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14917 +#line 14982 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14919 +#line 14984 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14918 +#line 14983 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14920 +#line 14985 MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, @@ -37510,19 +37510,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14925 +#line 14990 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14925 +#line 14990 .heldItem = ITEM_SITRUS_BERRY, -#line 14927 +#line 14992 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14926 +#line 14991 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14928 +#line 14993 MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, @@ -37531,41 +37531,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14933 +#line 14998 [TRAINER_NORMAN_3] = { -#line 14934 +#line 14999 .trainerName = _("NORMAN"), -#line 14935 +#line 15000 .trainerClass = TRAINER_CLASS_LEADER, -#line 14936 +#line 15001 .trainerPic = TRAINER_PIC_LEADER_NORMAN, .encounterMusic_gender = -#line 14938 +#line 15003 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14939 +#line 15004 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14940 +#line 15005 .doubleBattle = TRUE, -#line 14941 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 15006 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14943 +#line 15008 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14943 +#line 15008 .heldItem = ITEM_SITRUS_BERRY, -#line 14945 +#line 15010 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14944 +#line 15009 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14946 +#line 15011 MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, @@ -37573,17 +37573,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14951 +#line 15016 .species = SPECIES_CHANSEY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14953 +#line 15018 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14952 +#line 15017 .lvl = 47, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14954 +#line 15019 MOVE_LIGHT_SCREEN, MOVE_SING, MOVE_SKILL_SWAP, @@ -37591,17 +37591,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14959 +#line 15024 .species = SPECIES_KANGASKHAN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14961 +#line 15026 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14960 +#line 15025 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14962 +#line 15027 MOVE_FAKE_OUT, MOVE_DIZZY_PUNCH, MOVE_ENDURE, @@ -37609,17 +37609,17 @@ F_TRAINER_FEMALE | }, }, { -#line 14967 +#line 15032 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14969 +#line 15034 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14968 +#line 15033 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14970 +#line 15035 MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, @@ -37627,19 +37627,19 @@ F_TRAINER_FEMALE | }, }, { -#line 14975 +#line 15040 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14975 +#line 15040 .heldItem = ITEM_SITRUS_BERRY, -#line 14977 +#line 15042 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14976 +#line 15041 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14978 +#line 15043 MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, @@ -37648,41 +37648,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 14983 +#line 15048 [TRAINER_NORMAN_4] = { -#line 14984 +#line 15049 .trainerName = _("NORMAN"), -#line 14985 +#line 15050 .trainerClass = TRAINER_CLASS_LEADER, -#line 14986 +#line 15051 .trainerPic = TRAINER_PIC_LEADER_NORMAN, .encounterMusic_gender = -#line 14988 +#line 15053 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 14989 +#line 15054 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 14990 +#line 15055 .doubleBattle = TRUE, -#line 14991 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 15056 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 14993 +#line 15058 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 14993 +#line 15058 .heldItem = ITEM_SITRUS_BERRY, -#line 14995 +#line 15060 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 14994 +#line 15059 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 14996 +#line 15061 MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, @@ -37690,17 +37690,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15001 +#line 15066 .species = SPECIES_BLISSEY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15003 +#line 15068 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15002 +#line 15067 .lvl = 52, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15004 +#line 15069 MOVE_LIGHT_SCREEN, MOVE_SING, MOVE_SKILL_SWAP, @@ -37708,17 +37708,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15009 +#line 15074 .species = SPECIES_KANGASKHAN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15011 +#line 15076 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15010 +#line 15075 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15012 +#line 15077 MOVE_FAKE_OUT, MOVE_DIZZY_PUNCH, MOVE_ENDURE, @@ -37726,17 +37726,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15017 +#line 15082 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15019 +#line 15084 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15018 +#line 15083 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15020 +#line 15085 MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, @@ -37744,19 +37744,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15025 +#line 15090 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15025 +#line 15090 .heldItem = ITEM_SITRUS_BERRY, -#line 15027 +#line 15092 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15026 +#line 15091 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15028 +#line 15093 MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, @@ -37765,41 +37765,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 15033 +#line 15098 [TRAINER_NORMAN_5] = { -#line 15034 +#line 15099 .trainerName = _("NORMAN"), -#line 15035 +#line 15100 .trainerClass = TRAINER_CLASS_LEADER, -#line 15036 +#line 15101 .trainerPic = TRAINER_PIC_LEADER_NORMAN, .encounterMusic_gender = -#line 15038 +#line 15103 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15039 +#line 15104 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15040 +#line 15105 .doubleBattle = TRUE, -#line 15041 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 15106 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15043 +#line 15108 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15043 +#line 15108 .heldItem = ITEM_SITRUS_BERRY, -#line 15045 +#line 15110 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15044 +#line 15109 .lvl = 57, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15046 +#line 15111 MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, @@ -37807,17 +37807,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15051 +#line 15116 .species = SPECIES_BLISSEY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15053 +#line 15118 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15052 +#line 15117 .lvl = 57, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15054 +#line 15119 MOVE_PROTECT, MOVE_SING, MOVE_SKILL_SWAP, @@ -37825,17 +37825,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15059 +#line 15124 .species = SPECIES_KANGASKHAN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15061 +#line 15126 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15060 +#line 15125 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15062 +#line 15127 MOVE_FAKE_OUT, MOVE_DIZZY_PUNCH, MOVE_ENDURE, @@ -37843,17 +37843,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15067 +#line 15132 .species = SPECIES_TAUROS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15069 +#line 15134 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15068 +#line 15133 .lvl = 57, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15070 +#line 15135 MOVE_TAKE_DOWN, MOVE_PROTECT, MOVE_FIRE_BLAST, @@ -37861,17 +37861,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15075 +#line 15140 .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15077 +#line 15142 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15076 +#line 15141 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15078 +#line 15143 MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, @@ -37879,19 +37879,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15083 +#line 15148 .species = SPECIES_SLAKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15083 +#line 15148 .heldItem = ITEM_SITRUS_BERRY, -#line 15085 +#line 15150 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15084 +#line 15149 .lvl = 60, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15086 +#line 15151 MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, @@ -37900,43 +37900,43 @@ F_TRAINER_FEMALE | }, }, }, -#line 15091 +#line 15156 [TRAINER_WINONA_2] = { -#line 15092 +#line 15157 .trainerName = _("WINONA"), -#line 15093 +#line 15158 .trainerClass = TRAINER_CLASS_LEADER, -#line 15094 +#line 15159 .trainerPic = TRAINER_PIC_LEADER_WINONA, .encounterMusic_gender = -#line 15095 +#line 15160 F_TRAINER_FEMALE | -#line 15096 +#line 15161 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15097 +#line 15162 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15098 +#line 15163 .doubleBattle = TRUE, -#line 15099 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, +#line 15164 + .aiFlags = AI_FLAG_BASIC_TRAINER | AI_FLAG_RISKY, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 15101 +#line 15166 .species = SPECIES_DRATINI, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15101 +#line 15166 .heldItem = ITEM_SITRUS_BERRY, -#line 15103 +#line 15168 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15102 +#line 15167 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15104 +#line 15169 MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_PROTECT, @@ -37944,17 +37944,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15109 +#line 15174 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15111 +#line 15176 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15110 +#line 15175 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15112 +#line 15177 MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, @@ -37962,17 +37962,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15117 +#line 15182 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15119 +#line 15184 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15118 +#line 15183 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15120 +#line 15185 MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, @@ -37980,17 +37980,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15125 +#line 15190 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15127 +#line 15192 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15126 +#line 15191 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15128 +#line 15193 MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, @@ -37998,19 +37998,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15133 +#line 15198 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15133 +#line 15198 .heldItem = ITEM_CHESTO_BERRY, -#line 15135 +#line 15200 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15134 +#line 15199 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15136 +#line 15201 MOVE_AERIAL_ACE, MOVE_REST, MOVE_DRAGON_DANCE, @@ -38019,41 +38019,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 15141 +#line 15206 [TRAINER_WINONA_3] = { -#line 15142 +#line 15207 .trainerName = _("WINONA"), -#line 15143 +#line 15208 .trainerClass = TRAINER_CLASS_LEADER, -#line 15144 +#line 15209 .trainerPic = TRAINER_PIC_LEADER_WINONA, .encounterMusic_gender = -#line 15145 +#line 15210 F_TRAINER_FEMALE | -#line 15146 +#line 15211 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15147 +#line 15212 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15148 +#line 15213 .doubleBattle = TRUE, -#line 15149 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, +#line 15214 + .aiFlags = AI_FLAG_BASIC_TRAINER | AI_FLAG_RISKY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15151 +#line 15216 .species = SPECIES_HOOTHOOT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15153 +#line 15218 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15152 +#line 15217 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15154 +#line 15219 MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_REFLECT, @@ -38061,17 +38061,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15159 +#line 15224 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15161 +#line 15226 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15160 +#line 15225 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15162 +#line 15227 MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, @@ -38079,19 +38079,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15167 +#line 15232 .species = SPECIES_DRAGONAIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15167 +#line 15232 .heldItem = ITEM_SITRUS_BERRY, -#line 15169 +#line 15234 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15168 +#line 15233 .lvl = 45, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15170 +#line 15235 MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_PROTECT, @@ -38099,17 +38099,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15175 +#line 15240 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15177 +#line 15242 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15176 +#line 15241 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15178 +#line 15243 MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, @@ -38117,17 +38117,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15183 +#line 15248 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15185 +#line 15250 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15184 +#line 15249 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15186 +#line 15251 MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, @@ -38135,19 +38135,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15191 +#line 15256 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15191 +#line 15256 .heldItem = ITEM_CHESTO_BERRY, -#line 15193 +#line 15258 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15192 +#line 15257 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15194 +#line 15259 MOVE_AERIAL_ACE, MOVE_REST, MOVE_DRAGON_DANCE, @@ -38156,41 +38156,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 15199 +#line 15264 [TRAINER_WINONA_4] = { -#line 15200 +#line 15265 .trainerName = _("WINONA"), -#line 15201 +#line 15266 .trainerClass = TRAINER_CLASS_LEADER, -#line 15202 +#line 15267 .trainerPic = TRAINER_PIC_LEADER_WINONA, .encounterMusic_gender = -#line 15203 +#line 15268 F_TRAINER_FEMALE | -#line 15204 +#line 15269 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15205 +#line 15270 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15206 +#line 15271 .doubleBattle = TRUE, -#line 15207 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, +#line 15272 + .aiFlags = AI_FLAG_BASIC_TRAINER | AI_FLAG_RISKY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15209 +#line 15274 .species = SPECIES_NOCTOWL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15211 +#line 15276 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15210 +#line 15275 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15212 +#line 15277 MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_REFLECT, @@ -38198,17 +38198,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15217 +#line 15282 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15219 +#line 15284 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15218 +#line 15283 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15220 +#line 15285 MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, @@ -38216,19 +38216,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15225 +#line 15290 .species = SPECIES_DRAGONAIR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15225 +#line 15290 .heldItem = ITEM_SITRUS_BERRY, -#line 15227 +#line 15292 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15226 +#line 15291 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15228 +#line 15293 MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_PROTECT, @@ -38236,17 +38236,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15233 +#line 15298 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15235 +#line 15300 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15234 +#line 15299 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15236 +#line 15301 MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, @@ -38254,17 +38254,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15241 +#line 15306 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15243 +#line 15308 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15242 +#line 15307 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15244 +#line 15309 MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, @@ -38272,19 +38272,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15249 +#line 15314 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15249 +#line 15314 .heldItem = ITEM_CHESTO_BERRY, -#line 15251 +#line 15316 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15250 +#line 15315 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15252 +#line 15317 MOVE_AERIAL_ACE, MOVE_REST, MOVE_DRAGON_DANCE, @@ -38293,41 +38293,41 @@ F_TRAINER_FEMALE | }, }, }, -#line 15257 +#line 15322 [TRAINER_WINONA_5] = { -#line 15258 +#line 15323 .trainerName = _("WINONA"), -#line 15259 +#line 15324 .trainerClass = TRAINER_CLASS_LEADER, -#line 15260 +#line 15325 .trainerPic = TRAINER_PIC_LEADER_WINONA, .encounterMusic_gender = -#line 15261 +#line 15326 F_TRAINER_FEMALE | -#line 15262 +#line 15327 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15263 +#line 15328 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15264 +#line 15329 .doubleBattle = TRUE, -#line 15265 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_RISKY, +#line 15330 + .aiFlags = AI_FLAG_BASIC_TRAINER | AI_FLAG_RISKY, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15267 +#line 15332 .species = SPECIES_NOCTOWL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15269 +#line 15334 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15268 +#line 15333 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15270 +#line 15335 MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_REFLECT, @@ -38335,17 +38335,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15275 +#line 15340 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15277 +#line 15342 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15276 +#line 15341 .lvl = 54, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15278 +#line 15343 MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, @@ -38353,17 +38353,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15283 +#line 15348 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15285 +#line 15350 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15284 +#line 15349 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15286 +#line 15351 MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, @@ -38371,19 +38371,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15291 +#line 15356 .species = SPECIES_DRAGONITE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15291 +#line 15356 .heldItem = ITEM_SITRUS_BERRY, -#line 15293 +#line 15358 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15292 +#line 15357 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15294 +#line 15359 MOVE_HYPER_BEAM, MOVE_THUNDERBOLT, MOVE_EARTHQUAKE, @@ -38391,17 +38391,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15299 +#line 15364 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15301 +#line 15366 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15300 +#line 15365 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15302 +#line 15367 MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, @@ -38409,19 +38409,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15307 +#line 15372 .species = SPECIES_ALTARIA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15307 +#line 15372 .heldItem = ITEM_CHESTO_BERRY, -#line 15309 +#line 15374 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15308 +#line 15373 .lvl = 60, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15310 +#line 15375 MOVE_SKY_ATTACK, MOVE_REST, MOVE_DRAGON_DANCE, @@ -38430,39 +38430,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15315 +#line 15380 [TRAINER_TATE_AND_LIZA_2] = { -#line 15316 +#line 15381 .trainerName = _("TATE&LIZA"), -#line 15317 +#line 15382 .trainerClass = TRAINER_CLASS_LEADER, -#line 15318 +#line 15383 .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA, .encounterMusic_gender = -#line 15320 +#line 15385 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15321 +#line 15386 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15322 +#line 15387 .doubleBattle = TRUE, -#line 15323 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 15388 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 15325 +#line 15390 .species = SPECIES_SLOWPOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15327 +#line 15392 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15326 +#line 15391 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15328 +#line 15393 MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, @@ -38470,17 +38470,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15333 +#line 15398 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15335 +#line 15400 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15334 +#line 15399 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15336 +#line 15401 MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_PSYCHIC, @@ -38488,19 +38488,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15341 +#line 15406 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15341 +#line 15406 .heldItem = ITEM_CHESTO_BERRY, -#line 15343 +#line 15408 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15342 +#line 15407 .lvl = 49, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15344 +#line 15409 MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, @@ -38508,19 +38508,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15349 +#line 15414 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15349 +#line 15414 .heldItem = ITEM_CHESTO_BERRY, -#line 15351 +#line 15416 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15350 +#line 15415 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15352 +#line 15417 MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, @@ -38528,19 +38528,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15357 +#line 15422 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15357 +#line 15422 .heldItem = ITEM_SITRUS_BERRY, -#line 15359 +#line 15424 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15358 +#line 15423 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15360 +#line 15425 MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, @@ -38549,39 +38549,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15365 +#line 15430 [TRAINER_TATE_AND_LIZA_3] = { -#line 15366 +#line 15431 .trainerName = _("TATE&LIZA"), -#line 15367 +#line 15432 .trainerClass = TRAINER_CLASS_LEADER, -#line 15368 +#line 15433 .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA, .encounterMusic_gender = -#line 15370 +#line 15435 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15371 +#line 15436 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15372 +#line 15437 .doubleBattle = TRUE, -#line 15373 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 15438 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15375 +#line 15440 .species = SPECIES_DROWZEE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15377 +#line 15442 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15376 +#line 15441 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15378 +#line 15443 MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEADBUTT, @@ -38589,17 +38589,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15383 +#line 15448 .species = SPECIES_SLOWPOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15385 +#line 15450 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15384 +#line 15449 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15386 +#line 15451 MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, @@ -38607,17 +38607,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15391 +#line 15456 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15393 +#line 15458 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15392 +#line 15457 .lvl = 54, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15394 +#line 15459 MOVE_EARTHQUAKE, MOVE_EXPLOSION, MOVE_PSYCHIC, @@ -38625,19 +38625,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15399 +#line 15464 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15399 +#line 15464 .heldItem = ITEM_CHESTO_BERRY, -#line 15401 +#line 15466 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15400 +#line 15465 .lvl = 54, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15402 +#line 15467 MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, @@ -38645,19 +38645,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15407 +#line 15472 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15407 +#line 15472 .heldItem = ITEM_CHESTO_BERRY, -#line 15409 +#line 15474 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15408 +#line 15473 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15410 +#line 15475 MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, @@ -38665,19 +38665,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15415 +#line 15480 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15415 +#line 15480 .heldItem = ITEM_SITRUS_BERRY, -#line 15417 +#line 15482 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15416 +#line 15481 .lvl = 55, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15418 +#line 15483 MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, @@ -38686,39 +38686,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15423 +#line 15488 [TRAINER_TATE_AND_LIZA_4] = { -#line 15424 +#line 15489 .trainerName = _("TATE&LIZA"), -#line 15425 +#line 15490 .trainerClass = TRAINER_CLASS_LEADER, -#line 15426 +#line 15491 .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA, .encounterMusic_gender = -#line 15428 +#line 15493 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15429 +#line 15494 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15430 +#line 15495 .doubleBattle = TRUE, -#line 15431 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 15496 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15433 +#line 15498 .species = SPECIES_HYPNO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15435 +#line 15500 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15434 +#line 15499 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15436 +#line 15501 MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEADBUTT, @@ -38726,17 +38726,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15441 +#line 15506 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15443 +#line 15508 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15442 +#line 15507 .lvl = 59, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15444 +#line 15509 MOVE_EARTHQUAKE, MOVE_EXPLOSION, MOVE_PSYCHIC, @@ -38744,17 +38744,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15449 +#line 15514 .species = SPECIES_SLOWPOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15451 +#line 15516 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15450 +#line 15515 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15452 +#line 15517 MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, @@ -38762,19 +38762,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15457 +#line 15522 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15457 +#line 15522 .heldItem = ITEM_CHESTO_BERRY, -#line 15459 +#line 15524 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15458 +#line 15523 .lvl = 59, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15460 +#line 15525 MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, @@ -38782,19 +38782,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15465 +#line 15530 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15465 +#line 15530 .heldItem = ITEM_CHESTO_BERRY, -#line 15467 +#line 15532 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15466 +#line 15531 .lvl = 60, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15468 +#line 15533 MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, @@ -38802,19 +38802,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15473 +#line 15538 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15473 +#line 15538 .heldItem = ITEM_SITRUS_BERRY, -#line 15475 +#line 15540 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15474 +#line 15539 .lvl = 60, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15476 +#line 15541 MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, @@ -38823,39 +38823,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15481 +#line 15546 [TRAINER_TATE_AND_LIZA_5] = { -#line 15482 +#line 15547 .trainerName = _("TATE&LIZA"), -#line 15483 +#line 15548 .trainerClass = TRAINER_CLASS_LEADER, -#line 15484 +#line 15549 .trainerPic = TRAINER_PIC_LEADER_TATE_AND_LIZA, .encounterMusic_gender = -#line 15486 +#line 15551 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 15487 +#line 15552 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15488 +#line 15553 .doubleBattle = TRUE, -#line 15489 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 15554 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15491 +#line 15556 .species = SPECIES_HYPNO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15493 +#line 15558 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15492 +#line 15557 .lvl = 63, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15494 +#line 15559 MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEADBUTT, @@ -38863,17 +38863,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15499 +#line 15564 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15501 +#line 15566 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15500 +#line 15565 .lvl = 64, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15502 +#line 15567 MOVE_EARTHQUAKE, MOVE_EXPLOSION, MOVE_PSYCHIC, @@ -38881,17 +38881,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15507 +#line 15572 .species = SPECIES_SLOWKING, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15509 +#line 15574 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15508 +#line 15573 .lvl = 63, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15510 +#line 15575 MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, @@ -38899,19 +38899,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15515 +#line 15580 .species = SPECIES_XATU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15515 +#line 15580 .heldItem = ITEM_CHESTO_BERRY, -#line 15517 +#line 15582 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15516 +#line 15581 .lvl = 64, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15518 +#line 15583 MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, @@ -38919,19 +38919,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15523 +#line 15588 .species = SPECIES_LUNATONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15523 +#line 15588 .heldItem = ITEM_CHESTO_BERRY, -#line 15525 +#line 15590 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15524 +#line 15589 .lvl = 65, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15526 +#line 15591 MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, @@ -38939,19 +38939,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15531 +#line 15596 .species = SPECIES_SOLROCK, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15531 +#line 15596 .heldItem = ITEM_SITRUS_BERRY, -#line 15533 +#line 15598 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15532 +#line 15597 .lvl = 65, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15534 +#line 15599 MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, @@ -38960,39 +38960,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15539 +#line 15604 [TRAINER_JUAN_2] = { -#line 15540 +#line 15605 .trainerName = _("JUAN"), -#line 15541 +#line 15606 .trainerClass = TRAINER_CLASS_LEADER, -#line 15542 +#line 15607 .trainerPic = TRAINER_PIC_LEADER_JUAN, .encounterMusic_gender = -#line 15544 +#line 15609 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15545 +#line 15610 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15546 +#line 15611 .doubleBattle = TRUE, -#line 15547 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 15612 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 15549 +#line 15614 .species = SPECIES_POLIWAG, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15551 +#line 15616 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15550 +#line 15615 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15552 +#line 15617 MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_PROTECT, @@ -39000,17 +39000,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15557 +#line 15622 .species = SPECIES_WHISCASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15559 +#line 15624 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15558 +#line 15623 .lvl = 46, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15560 +#line 15625 MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, @@ -39018,17 +39018,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15565 +#line 15630 .species = SPECIES_WALREIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15567 +#line 15632 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15566 +#line 15631 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15568 +#line 15633 MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, @@ -39036,19 +39036,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15573 +#line 15638 .species = SPECIES_CRAWDAUNT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15573 +#line 15638 .heldItem = ITEM_CHESTO_BERRY, -#line 15575 +#line 15640 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15574 +#line 15639 .lvl = 48, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15576 +#line 15641 MOVE_REST, MOVE_CRABHAMMER, MOVE_TAUNT, @@ -39056,19 +39056,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15581 +#line 15646 .species = SPECIES_KINGDRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15581 +#line 15646 .heldItem = ITEM_CHESTO_BERRY, -#line 15583 +#line 15648 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15582 +#line 15647 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15584 +#line 15649 MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, @@ -39077,39 +39077,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15589 +#line 15654 [TRAINER_JUAN_3] = { -#line 15590 +#line 15655 .trainerName = _("JUAN"), -#line 15591 +#line 15656 .trainerClass = TRAINER_CLASS_LEADER, -#line 15592 +#line 15657 .trainerPic = TRAINER_PIC_LEADER_JUAN, .encounterMusic_gender = -#line 15594 +#line 15659 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15595 +#line 15660 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15596 +#line 15661 .doubleBattle = TRUE, -#line 15597 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 15662 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 5, .party = (const struct TrainerMon[]) { { -#line 15599 +#line 15664 .species = SPECIES_POLIWHIRL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15601 +#line 15666 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15600 +#line 15665 .lvl = 50, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15602 +#line 15667 MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_PROTECT, @@ -39117,17 +39117,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15607 +#line 15672 .species = SPECIES_WHISCASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15609 +#line 15674 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15608 +#line 15673 .lvl = 51, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15610 +#line 15675 MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, @@ -39135,17 +39135,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15615 +#line 15680 .species = SPECIES_WALREIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15617 +#line 15682 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15616 +#line 15681 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15618 +#line 15683 MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, @@ -39153,19 +39153,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15623 +#line 15688 .species = SPECIES_CRAWDAUNT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15623 +#line 15688 .heldItem = ITEM_CHESTO_BERRY, -#line 15625 +#line 15690 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15624 +#line 15689 .lvl = 53, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15626 +#line 15691 MOVE_REST, MOVE_GUILLOTINE, MOVE_TAUNT, @@ -39173,19 +39173,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15631 +#line 15696 .species = SPECIES_KINGDRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15631 +#line 15696 .heldItem = ITEM_CHESTO_BERRY, -#line 15633 +#line 15698 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15632 +#line 15697 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15634 +#line 15699 MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, @@ -39194,39 +39194,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15639 +#line 15704 [TRAINER_JUAN_4] = { -#line 15640 +#line 15705 .trainerName = _("JUAN"), -#line 15641 +#line 15706 .trainerClass = TRAINER_CLASS_LEADER, -#line 15642 +#line 15707 .trainerPic = TRAINER_PIC_LEADER_JUAN, .encounterMusic_gender = -#line 15644 +#line 15709 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15645 +#line 15710 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15646 +#line 15711 .doubleBattle = TRUE, -#line 15647 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 15712 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15649 +#line 15714 .species = SPECIES_LAPRAS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15651 +#line 15716 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15650 +#line 15715 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15652 +#line 15717 MOVE_HYDRO_PUMP, MOVE_PERISH_SONG, MOVE_ICE_BEAM, @@ -39234,17 +39234,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15657 +#line 15722 .species = SPECIES_WHISCASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15659 +#line 15724 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15658 +#line 15723 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15660 +#line 15725 MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, @@ -39252,17 +39252,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15665 +#line 15730 .species = SPECIES_POLIWHIRL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15667 +#line 15732 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15666 +#line 15731 .lvl = 56, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15668 +#line 15733 MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_PROTECT, @@ -39270,17 +39270,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15673 +#line 15738 .species = SPECIES_WALREIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15675 +#line 15740 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15674 +#line 15739 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15676 +#line 15741 MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, @@ -39288,19 +39288,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15681 +#line 15746 .species = SPECIES_CRAWDAUNT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15681 +#line 15746 .heldItem = ITEM_CHESTO_BERRY, -#line 15683 +#line 15748 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15682 +#line 15747 .lvl = 58, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15684 +#line 15749 MOVE_REST, MOVE_GUILLOTINE, MOVE_TAUNT, @@ -39308,19 +39308,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15689 +#line 15754 .species = SPECIES_KINGDRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15689 +#line 15754 .heldItem = ITEM_CHESTO_BERRY, -#line 15691 +#line 15756 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15690 +#line 15755 .lvl = 61, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15692 +#line 15757 MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, @@ -39329,39 +39329,39 @@ F_TRAINER_FEMALE | }, }, }, -#line 15697 +#line 15762 [TRAINER_JUAN_5] = { -#line 15698 +#line 15763 .trainerName = _("JUAN"), -#line 15699 +#line 15764 .trainerClass = TRAINER_CLASS_LEADER, -#line 15700 +#line 15765 .trainerPic = TRAINER_PIC_LEADER_JUAN, .encounterMusic_gender = -#line 15702 +#line 15767 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15703 +#line 15768 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15704 +#line 15769 .doubleBattle = TRUE, -#line 15705 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 15770 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15707 +#line 15772 .species = SPECIES_LAPRAS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15709 +#line 15774 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15708 +#line 15773 .lvl = 61, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15710 +#line 15775 MOVE_HYDRO_PUMP, MOVE_PERISH_SONG, MOVE_ICE_BEAM, @@ -39369,17 +39369,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15715 +#line 15780 .species = SPECIES_WHISCASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15717 +#line 15782 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15716 +#line 15781 .lvl = 63, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15718 +#line 15783 MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, @@ -39387,17 +39387,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15723 +#line 15788 .species = SPECIES_POLITOED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15725 +#line 15790 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15724 +#line 15789 .lvl = 61, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15726 +#line 15791 MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_HYDRO_PUMP, @@ -39405,17 +39405,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15731 +#line 15796 .species = SPECIES_WALREIN, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15733 +#line 15798 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15732 +#line 15797 .lvl = 63, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15734 +#line 15799 MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, @@ -39423,19 +39423,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15739 +#line 15804 .species = SPECIES_CRAWDAUNT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15739 +#line 15804 .heldItem = ITEM_CHESTO_BERRY, -#line 15741 +#line 15806 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15740 +#line 15805 .lvl = 63, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15742 +#line 15807 MOVE_REST, MOVE_GUILLOTINE, MOVE_TAUNT, @@ -39443,19 +39443,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15747 +#line 15812 .species = SPECIES_KINGDRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15747 +#line 15812 .heldItem = ITEM_CHESTO_BERRY, -#line 15749 +#line 15814 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15748 +#line 15813 .lvl = 66, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15750 +#line 15815 MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, @@ -39464,54 +39464,54 @@ F_TRAINER_FEMALE | }, }, }, -#line 15755 +#line 15820 [TRAINER_ANGELO] = { -#line 15756 +#line 15821 .trainerName = _("ANGELO"), -#line 15757 +#line 15822 .trainerClass = TRAINER_CLASS_BUG_MANIAC, -#line 15758 +#line 15823 .trainerPic = TRAINER_PIC_BUG_MANIAC, .encounterMusic_gender = -#line 15760 +#line 15825 TRAINER_ENCOUNTER_MUSIC_SUSPICIOUS, -#line 15761 +#line 15826 .doubleBattle = FALSE, -#line 15762 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 15827 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 15764 +#line 15829 .species = SPECIES_ILLUMISE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15766 +#line 15831 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 15765 +#line 15830 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15767 +#line 15832 MOVE_SHOCK_WAVE, MOVE_QUICK_ATTACK, MOVE_CHARM, }, }, { -#line 15771 +#line 15836 .species = SPECIES_VOLBEAT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15773 +#line 15838 .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 15772 +#line 15837 .lvl = 17, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15774 +#line 15839 MOVE_SHOCK_WAVE, MOVE_QUICK_ATTACK, MOVE_CONFUSE_RAY, @@ -39519,71 +39519,71 @@ F_TRAINER_FEMALE | }, }, }, -#line 15778 +#line 15843 [TRAINER_DARIUS] = { -#line 15779 +#line 15844 .trainerName = _("DARIUS"), -#line 15780 +#line 15845 .trainerClass = TRAINER_CLASS_BIRD_KEEPER, -#line 15781 +#line 15846 .trainerPic = TRAINER_PIC_BIRD_KEEPER, .encounterMusic_gender = -#line 15783 +#line 15848 TRAINER_ENCOUNTER_MUSIC_COOL, -#line 15784 +#line 15849 .doubleBattle = FALSE, -#line 15785 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 15850 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 15787 +#line 15852 .species = SPECIES_TROPIUS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15789 +#line 15854 .iv = TRAINER_PARTY_IVS(24, 24, 24, 24, 24, 24), -#line 15788 +#line 15853 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15791 +#line 15856 [TRAINER_STEVEN] = { -#line 15792 +#line 15857 .trainerName = _("STEVEN"), -#line 15793 +#line 15858 .trainerClass = TRAINER_CLASS_RIVAL, -#line 15794 +#line 15859 .trainerPic = TRAINER_PIC_STEVEN, .encounterMusic_gender = -#line 15796 +#line 15861 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15797 +#line 15862 .items = { ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE }, -#line 15798 +#line 15863 .doubleBattle = FALSE, -#line 15799 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 15864 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 15801 +#line 15866 .species = SPECIES_SKARMORY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15803 +#line 15868 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15802 +#line 15867 .lvl = 77, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15804 +#line 15869 MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_SPIKES, @@ -39591,17 +39591,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15809 +#line 15874 .species = SPECIES_CLAYDOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15811 +#line 15876 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15810 +#line 15875 .lvl = 75, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15812 +#line 15877 MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_ANCIENT_POWER, @@ -39609,17 +39609,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15817 +#line 15882 .species = SPECIES_AGGRON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15819 +#line 15884 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15818 +#line 15883 .lvl = 76, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15820 +#line 15885 MOVE_THUNDER, MOVE_EARTHQUAKE, MOVE_SOLAR_BEAM, @@ -39627,17 +39627,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15825 +#line 15890 .species = SPECIES_CRADILY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15827 +#line 15892 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15826 +#line 15891 .lvl = 76, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15828 +#line 15893 MOVE_GIGA_DRAIN, MOVE_ANCIENT_POWER, MOVE_INGRAIN, @@ -39645,17 +39645,17 @@ F_TRAINER_FEMALE | }, }, { -#line 15833 +#line 15898 .species = SPECIES_ARMALDO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15835 +#line 15900 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15834 +#line 15899 .lvl = 76, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15836 +#line 15901 MOVE_WATER_PULSE, MOVE_ANCIENT_POWER, MOVE_AERIAL_ACE, @@ -39663,19 +39663,19 @@ F_TRAINER_FEMALE | }, }, { -#line 15841 +#line 15906 .species = SPECIES_METAGROSS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15841 +#line 15906 .heldItem = ITEM_SITRUS_BERRY, -#line 15843 +#line 15908 .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31), -#line 15842 +#line 15907 .lvl = 78, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, .moves = { -#line 15844 +#line 15909 MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_METEOR_MASH, @@ -39684,179 +39684,15 @@ F_TRAINER_FEMALE | }, }, }, -#line 15849 +#line 15914 [TRAINER_ANABEL] = { -#line 15850 - .trainerName = _("ANABEL"), -#line 15851 - .trainerClass = TRAINER_CLASS_SALON_MAIDEN, -#line 15852 - .trainerPic = TRAINER_PIC_SALON_MAIDEN_ANABEL, - .encounterMusic_gender = -#line 15853 -F_TRAINER_FEMALE | -#line 15854 - TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15855 - .doubleBattle = FALSE, -#line 15856 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 15858 - .species = SPECIES_BELDUM, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 15860 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 15859 - .lvl = 5, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 15862 - [TRAINER_TUCKER] = - { -#line 15863 - .trainerName = _("TUCKER"), -#line 15864 - .trainerClass = TRAINER_CLASS_DOME_ACE, -#line 15865 - .trainerPic = TRAINER_PIC_DOME_ACE_TUCKER, - .encounterMusic_gender = -#line 15867 - TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15868 - .doubleBattle = FALSE, -#line 15869 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 15871 - .species = SPECIES_BELDUM, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 15873 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 15872 - .lvl = 5, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 15875 - [TRAINER_SPENSER] = - { -#line 15876 - .trainerName = _("SPENSER"), -#line 15877 - .trainerClass = TRAINER_CLASS_PALACE_MAVEN, -#line 15878 - .trainerPic = TRAINER_PIC_PALACE_MAVEN_SPENSER, - .encounterMusic_gender = -#line 15880 - TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15881 - .doubleBattle = FALSE, -#line 15882 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 15884 - .species = SPECIES_BELDUM, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 15886 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 15885 - .lvl = 5, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 15888 - [TRAINER_GRETA] = - { -#line 15889 - .trainerName = _("GRETA"), -#line 15890 - .trainerClass = TRAINER_CLASS_ARENA_TYCOON, -#line 15891 - .trainerPic = TRAINER_PIC_ARENA_TYCOON_GRETA, - .encounterMusic_gender = -#line 15892 -F_TRAINER_FEMALE | -#line 15893 - TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15894 - .doubleBattle = FALSE, -#line 15895 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 15897 - .species = SPECIES_BELDUM, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 15899 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 15898 - .lvl = 5, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 15901 - [TRAINER_NOLAND] = - { -#line 15902 - .trainerName = _("NOLAND"), -#line 15903 - .trainerClass = TRAINER_CLASS_FACTORY_HEAD, -#line 15904 - .trainerPic = TRAINER_PIC_FACTORY_HEAD_NOLAND, - .encounterMusic_gender = -#line 15906 - TRAINER_ENCOUNTER_MUSIC_MALE, -#line 15907 - .doubleBattle = FALSE, -#line 15908 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 1, - .party = (const struct TrainerMon[]) - { - { -#line 15910 - .species = SPECIES_BELDUM, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 15912 - .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 15911 - .lvl = 5, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 15914 - [TRAINER_LUCY] = - { #line 15915 - .trainerName = _("LUCY"), + .trainerName = _("ANABEL"), #line 15916 - .trainerClass = TRAINER_CLASS_PIKE_QUEEN, + .trainerClass = TRAINER_CLASS_SALON_MAIDEN, #line 15917 - .trainerPic = TRAINER_PIC_PIKE_QUEEN_LUCY, + .trainerPic = TRAINER_PIC_SALON_MAIDEN_ANABEL, .encounterMusic_gender = #line 15918 F_TRAINER_FEMALE | @@ -39865,7 +39701,7 @@ F_TRAINER_FEMALE | #line 15920 .doubleBattle = FALSE, #line 15921 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -39883,21 +39719,21 @@ F_TRAINER_FEMALE | }, }, #line 15927 - [TRAINER_BRANDON] = + [TRAINER_TUCKER] = { #line 15928 - .trainerName = _("BRANDON"), + .trainerName = _("TUCKER"), #line 15929 - .trainerClass = TRAINER_CLASS_PYRAMID_KING, + .trainerClass = TRAINER_CLASS_DOME_ACE, #line 15930 - .trainerPic = TRAINER_PIC_PYRAMID_KING_BRANDON, + .trainerPic = TRAINER_PIC_DOME_ACE_TUCKER, .encounterMusic_gender = #line 15932 TRAINER_ENCOUNTER_MUSIC_MALE, #line 15933 .doubleBattle = FALSE, #line 15934 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 1, .party = (const struct TrainerMon[]) { @@ -39915,2268 +39751,2432 @@ F_TRAINER_FEMALE | }, }, #line 15940 - [TRAINER_ANDRES_2] = + [TRAINER_SPENSER] = { #line 15941 - .trainerName = _("ANDRES"), + .trainerName = _("SPENSER"), #line 15942 - .trainerClass = TRAINER_CLASS_RUIN_MANIAC, + .trainerClass = TRAINER_CLASS_PALACE_MAVEN, #line 15943 - .trainerPic = TRAINER_PIC_RUIN_MANIAC, + .trainerPic = TRAINER_PIC_PALACE_MAVEN_SPENSER, .encounterMusic_gender = #line 15945 - TRAINER_ENCOUNTER_MUSIC_HIKER, + TRAINER_ENCOUNTER_MUSIC_MALE, #line 15946 .doubleBattle = FALSE, #line 15947 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 2, + .aiFlags = AI_FLAG_BASIC_TRAINER, + .partySize = 1, .party = (const struct TrainerMon[]) { { #line 15949 - .species = SPECIES_SANDSHREW, + .species = SPECIES_BELDUM, .gender = TRAINER_MON_RANDOM_GENDER, #line 15951 - .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 15950 - .lvl = 31, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 15953 - .species = SPECIES_SANDSHREW, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 15955 - .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 15954 - .lvl = 31, + .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15957 - [TRAINER_ANDRES_3] = +#line 15953 + [TRAINER_GRETA] = { -#line 15958 - .trainerName = _("ANDRES"), -#line 15959 - .trainerClass = TRAINER_CLASS_RUIN_MANIAC, -#line 15960 - .trainerPic = TRAINER_PIC_RUIN_MANIAC, +#line 15954 + .trainerName = _("GRETA"), +#line 15955 + .trainerClass = TRAINER_CLASS_ARENA_TYCOON, +#line 15956 + .trainerPic = TRAINER_PIC_ARENA_TYCOON_GRETA, .encounterMusic_gender = -#line 15962 - TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 15963 +#line 15957 +F_TRAINER_FEMALE | +#line 15958 + TRAINER_ENCOUNTER_MUSIC_MALE, +#line 15959 .doubleBattle = FALSE, -#line 15964 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 3, +#line 15960 + .aiFlags = AI_FLAG_BASIC_TRAINER, + .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 15966 - .species = SPECIES_NOSEPASS, +#line 15962 + .species = SPECIES_BELDUM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15968 - .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 15967 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 15970 - .species = SPECIES_SANDSHREW, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 15972 - .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 15971 - .lvl = 33, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 15974 - .species = SPECIES_SANDSHREW, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 15976 - .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 15975 - .lvl = 33, +#line 15964 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 15963 + .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15978 - [TRAINER_ANDRES_4] = +#line 15966 + [TRAINER_NOLAND] = { +#line 15967 + .trainerName = _("NOLAND"), +#line 15968 + .trainerClass = TRAINER_CLASS_FACTORY_HEAD, +#line 15969 + .trainerPic = TRAINER_PIC_FACTORY_HEAD_NOLAND, + .encounterMusic_gender = +#line 15971 + TRAINER_ENCOUNTER_MUSIC_MALE, +#line 15972 + .doubleBattle = FALSE, +#line 15973 + .aiFlags = AI_FLAG_BASIC_TRAINER, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { +#line 15975 + .species = SPECIES_BELDUM, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 15977 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 15976 + .lvl = 5, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, #line 15979 - .trainerName = _("ANDRES"), + [TRAINER_LUCY] = + { #line 15980 - .trainerClass = TRAINER_CLASS_RUIN_MANIAC, + .trainerName = _("LUCY"), #line 15981 - .trainerPic = TRAINER_PIC_RUIN_MANIAC, + .trainerClass = TRAINER_CLASS_PIKE_QUEEN, +#line 15982 + .trainerPic = TRAINER_PIC_PIKE_QUEEN_LUCY, .encounterMusic_gender = #line 15983 - TRAINER_ENCOUNTER_MUSIC_HIKER, +F_TRAINER_FEMALE | #line 15984 - .doubleBattle = FALSE, + TRAINER_ENCOUNTER_MUSIC_MALE, #line 15985 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 3, + .doubleBattle = FALSE, +#line 15986 + .aiFlags = AI_FLAG_BASIC_TRAINER, + .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 15987 - .species = SPECIES_NOSEPASS, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 15989 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), #line 15988 - .lvl = 35, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 15991 - .species = SPECIES_SANDSHREW, + .species = SPECIES_BELDUM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 15993 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 15992 - .lvl = 35, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 15995 - .species = SPECIES_SANDSHREW, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 15997 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 15996 - .lvl = 35, +#line 15990 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), +#line 15989 + .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 15999 - [TRAINER_ANDRES_5] = +#line 15992 + [TRAINER_BRANDON] = { -#line 16000 - .trainerName = _("ANDRES"), +#line 15993 + .trainerName = _("BRANDON"), +#line 15994 + .trainerClass = TRAINER_CLASS_PYRAMID_KING, +#line 15995 + .trainerPic = TRAINER_PIC_PYRAMID_KING_BRANDON, + .encounterMusic_gender = +#line 15997 + TRAINER_ENCOUNTER_MUSIC_MALE, +#line 15998 + .doubleBattle = FALSE, +#line 15999 + .aiFlags = AI_FLAG_BASIC_TRAINER, + .partySize = 1, + .party = (const struct TrainerMon[]) + { + { #line 16001 - .trainerClass = TRAINER_CLASS_RUIN_MANIAC, + .species = SPECIES_BELDUM, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16003 + .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), #line 16002 + .lvl = 5, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 16005 + [TRAINER_ANDRES_2] = + { +#line 16006 + .trainerName = _("ANDRES"), +#line 16007 + .trainerClass = TRAINER_CLASS_RUIN_MANIAC, +#line 16008 .trainerPic = TRAINER_PIC_RUIN_MANIAC, .encounterMusic_gender = -#line 16004 +#line 16010 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 16005 +#line 16011 .doubleBattle = FALSE, -#line 16006 +#line 16012 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 16014 + .species = SPECIES_SANDSHREW, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16016 + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), +#line 16015 + .lvl = 31, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 16018 + .species = SPECIES_SANDSHREW, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16020 + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), +#line 16019 + .lvl = 31, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 16022 + [TRAINER_ANDRES_3] = + { +#line 16023 + .trainerName = _("ANDRES"), +#line 16024 + .trainerClass = TRAINER_CLASS_RUIN_MANIAC, +#line 16025 + .trainerPic = TRAINER_PIC_RUIN_MANIAC, + .encounterMusic_gender = +#line 16027 + TRAINER_ENCOUNTER_MUSIC_HIKER, +#line 16028 + .doubleBattle = FALSE, +#line 16029 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16008 +#line 16031 .species = SPECIES_NOSEPASS, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16010 +#line 16033 + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), +#line 16032 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 16035 + .species = SPECIES_SANDSHREW, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16037 + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), +#line 16036 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 16039 + .species = SPECIES_SANDSHREW, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16041 + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), +#line 16040 + .lvl = 33, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 16043 + [TRAINER_ANDRES_4] = + { +#line 16044 + .trainerName = _("ANDRES"), +#line 16045 + .trainerClass = TRAINER_CLASS_RUIN_MANIAC, +#line 16046 + .trainerPic = TRAINER_PIC_RUIN_MANIAC, + .encounterMusic_gender = +#line 16048 + TRAINER_ENCOUNTER_MUSIC_HIKER, +#line 16049 + .doubleBattle = FALSE, +#line 16050 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 3, + .party = (const struct TrainerMon[]) + { + { +#line 16052 + .species = SPECIES_NOSEPASS, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16054 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 16053 + .lvl = 35, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 16056 + .species = SPECIES_SANDSHREW, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16058 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 16057 + .lvl = 35, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 16060 + .species = SPECIES_SANDSHREW, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16062 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 16061 + .lvl = 35, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 16064 + [TRAINER_ANDRES_5] = + { +#line 16065 + .trainerName = _("ANDRES"), +#line 16066 + .trainerClass = TRAINER_CLASS_RUIN_MANIAC, +#line 16067 + .trainerPic = TRAINER_PIC_RUIN_MANIAC, + .encounterMusic_gender = +#line 16069 + TRAINER_ENCOUNTER_MUSIC_HIKER, +#line 16070 + .doubleBattle = FALSE, +#line 16071 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 3, + .party = (const struct TrainerMon[]) + { + { +#line 16073 + .species = SPECIES_NOSEPASS, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16075 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16009 +#line 16074 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16012 +#line 16077 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16014 +#line 16079 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16013 +#line 16078 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16016 +#line 16081 .species = SPECIES_SANDSLASH, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16018 +#line 16083 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16017 +#line 16082 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16020 +#line 16085 [TRAINER_CORY_2] = { -#line 16021 +#line 16086 .trainerName = _("CORY"), -#line 16022 +#line 16087 .trainerClass = TRAINER_CLASS_SAILOR, -#line 16023 +#line 16088 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 16025 +#line 16090 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16026 +#line 16091 .doubleBattle = FALSE, -#line 16027 +#line 16092 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16029 +#line 16094 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16031 +#line 16096 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16030 +#line 16095 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16033 +#line 16098 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16035 +#line 16100 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16034 +#line 16099 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16037 +#line 16102 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16039 +#line 16104 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16038 +#line 16103 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16041 +#line 16106 [TRAINER_CORY_3] = { -#line 16042 +#line 16107 .trainerName = _("CORY"), -#line 16043 +#line 16108 .trainerClass = TRAINER_CLASS_SAILOR, -#line 16044 +#line 16109 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 16046 +#line 16111 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16047 +#line 16112 .doubleBattle = FALSE, -#line 16048 +#line 16113 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16050 +#line 16115 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16052 +#line 16117 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16051 +#line 16116 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16054 +#line 16119 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16056 +#line 16121 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16055 +#line 16120 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16058 +#line 16123 .species = SPECIES_TENTACOOL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16060 +#line 16125 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16059 +#line 16124 .lvl = 32, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16062 +#line 16127 [TRAINER_CORY_4] = { -#line 16063 +#line 16128 .trainerName = _("CORY"), -#line 16064 +#line 16129 .trainerClass = TRAINER_CLASS_SAILOR, -#line 16065 +#line 16130 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 16067 +#line 16132 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16068 +#line 16133 .doubleBattle = FALSE, -#line 16069 +#line 16134 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16071 +#line 16136 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16073 +#line 16138 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16072 +#line 16137 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16075 +#line 16140 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16077 +#line 16142 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16076 +#line 16141 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16079 +#line 16144 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16081 +#line 16146 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16080 +#line 16145 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16083 +#line 16148 [TRAINER_CORY_5] = { -#line 16084 +#line 16149 .trainerName = _("CORY"), -#line 16085 +#line 16150 .trainerClass = TRAINER_CLASS_SAILOR, -#line 16086 +#line 16151 .trainerPic = TRAINER_PIC_SAILOR, .encounterMusic_gender = -#line 16088 +#line 16153 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16089 +#line 16154 .doubleBattle = FALSE, -#line 16090 +#line 16155 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16092 +#line 16157 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16094 +#line 16159 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16093 +#line 16158 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16096 +#line 16161 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16098 +#line 16163 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16097 +#line 16162 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16100 +#line 16165 .species = SPECIES_TENTACRUEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16102 +#line 16167 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16101 +#line 16166 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16104 +#line 16169 [TRAINER_PABLO_2] = { -#line 16105 +#line 16170 .trainerName = _("PABLO"), -#line 16106 +#line 16171 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 16107 +#line 16172 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 16109 +#line 16174 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 16110 +#line 16175 .doubleBattle = FALSE, -#line 16111 +#line 16176 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 16113 +#line 16178 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16115 +#line 16180 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16114 +#line 16179 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16117 +#line 16182 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16119 +#line 16184 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16118 +#line 16183 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16121 +#line 16186 [TRAINER_PABLO_3] = { -#line 16122 +#line 16187 .trainerName = _("PABLO"), -#line 16123 +#line 16188 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 16124 +#line 16189 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 16126 +#line 16191 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 16127 +#line 16192 .doubleBattle = FALSE, -#line 16128 +#line 16193 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16130 +#line 16195 .species = SPECIES_WINGULL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16132 +#line 16197 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16131 +#line 16196 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16134 +#line 16199 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16136 +#line 16201 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16135 +#line 16200 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16138 +#line 16203 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16140 +#line 16205 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16139 +#line 16204 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16142 +#line 16207 [TRAINER_PABLO_4] = { -#line 16143 +#line 16208 .trainerName = _("PABLO"), -#line 16144 +#line 16209 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 16145 +#line 16210 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 16147 +#line 16212 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 16148 +#line 16213 .doubleBattle = FALSE, -#line 16149 +#line 16214 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16151 +#line 16216 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16153 +#line 16218 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16152 +#line 16217 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16155 +#line 16220 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16157 +#line 16222 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16156 +#line 16221 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16159 +#line 16224 .species = SPECIES_STARYU, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16161 +#line 16226 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16160 +#line 16225 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16163 +#line 16228 [TRAINER_PABLO_5] = { -#line 16164 +#line 16229 .trainerName = _("PABLO"), -#line 16165 +#line 16230 .trainerClass = TRAINER_CLASS_TRIATHLETE, -#line 16166 +#line 16231 .trainerPic = TRAINER_PIC_SWIMMING_TRIATHLETE_M, .encounterMusic_gender = -#line 16168 +#line 16233 TRAINER_ENCOUNTER_MUSIC_SWIMMER, -#line 16169 +#line 16234 .doubleBattle = FALSE, -#line 16170 +#line 16235 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16172 +#line 16237 .species = SPECIES_PELIPPER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16174 +#line 16239 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16173 +#line 16238 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16176 +#line 16241 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16178 +#line 16243 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16177 +#line 16242 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16180 +#line 16245 .species = SPECIES_STARMIE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16182 +#line 16247 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16181 +#line 16246 .lvl = 43, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16184 +#line 16249 [TRAINER_KOJI_2] = { -#line 16185 +#line 16250 .trainerName = _("KOJI"), -#line 16186 +#line 16251 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 16187 +#line 16252 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 16189 +#line 16254 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16190 +#line 16255 .doubleBattle = FALSE, -#line 16191 +#line 16256 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 16193 +#line 16258 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16195 +#line 16260 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16194 +#line 16259 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16197 +#line 16262 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16199 +#line 16264 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16198 +#line 16263 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16201 +#line 16266 [TRAINER_KOJI_3] = { -#line 16202 +#line 16267 .trainerName = _("KOJI"), -#line 16203 +#line 16268 .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 16204 +#line 16269 .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 16206 +#line 16271 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16207 +#line 16272 .doubleBattle = FALSE, -#line 16208 +#line 16273 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16210 +#line 16275 .species = SPECIES_MAKUHITA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16212 +#line 16277 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16211 +#line 16276 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16214 +#line 16279 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16216 +#line 16281 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16215 +#line 16280 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16218 +#line 16283 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16220 +#line 16285 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16219 +#line 16284 .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16222 +#line 16287 [TRAINER_KOJI_4] = { -#line 16223 - .trainerName = _("KOJI"), -#line 16224 - .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 16225 - .trainerPic = TRAINER_PIC_BLACK_BELT, - .encounterMusic_gender = -#line 16227 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16228 - .doubleBattle = FALSE, -#line 16229 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 3, - .party = (const struct TrainerMon[]) - { - { -#line 16231 - .species = SPECIES_HARIYAMA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 16233 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16232 - .lvl = 41, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 16235 - .species = SPECIES_MACHOKE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 16237 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16236 - .lvl = 41, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 16239 - .species = SPECIES_MACHOKE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 16241 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16240 - .lvl = 41, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 16243 - [TRAINER_KOJI_5] = - { -#line 16244 - .trainerName = _("KOJI"), -#line 16245 - .trainerClass = TRAINER_CLASS_BLACK_BELT, -#line 16246 - .trainerPic = TRAINER_PIC_BLACK_BELT, - .encounterMusic_gender = -#line 16248 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16249 - .doubleBattle = FALSE, -#line 16250 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 3, - .party = (const struct TrainerMon[]) - { - { -#line 16252 - .species = SPECIES_HARIYAMA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 16254 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16253 - .lvl = 43, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 16256 - .species = SPECIES_MACHAMP, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 16258 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16257 - .lvl = 43, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 16260 - .species = SPECIES_MACHAMP, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 16262 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16261 - .lvl = 43, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 16264 - [TRAINER_CRISTIN_2] = - { -#line 16265 - .trainerName = _("CRISTIN"), -#line 16266 - .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 16267 - .trainerPic = TRAINER_PIC_COOLTRAINER_F, - .encounterMusic_gender = -#line 16268 -F_TRAINER_FEMALE | -#line 16269 - TRAINER_ENCOUNTER_MUSIC_COOL, -#line 16270 - .items = { ITEM_HYPER_POTION }, -#line 16271 - .doubleBattle = FALSE, -#line 16272 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 2, - .party = (const struct TrainerMon[]) - { - { -#line 16274 - .species = SPECIES_LOUDRED, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 16276 - .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 16275 - .lvl = 35, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 16278 - .species = SPECIES_VIGOROTH, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 16280 - .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), -#line 16279 - .lvl = 35, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 16282 - [TRAINER_CRISTIN_3] = - { -#line 16283 - .trainerName = _("CRISTIN"), -#line 16284 - .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 16285 - .trainerPic = TRAINER_PIC_COOLTRAINER_F, - .encounterMusic_gender = -#line 16286 -F_TRAINER_FEMALE | -#line 16287 - TRAINER_ENCOUNTER_MUSIC_COOL, #line 16288 - .items = { ITEM_HYPER_POTION }, + .trainerName = _("KOJI"), #line 16289 - .doubleBattle = FALSE, + .trainerClass = TRAINER_CLASS_BLACK_BELT, #line 16290 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, + .trainerPic = TRAINER_PIC_BLACK_BELT, + .encounterMusic_gender = +#line 16292 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 16293 + .doubleBattle = FALSE, +#line 16294 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16292 - .species = SPECIES_SPINDA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 16294 - .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), -#line 16293 - .lvl = 37, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { #line 16296 - .species = SPECIES_LOUDRED, + .species = SPECIES_HARIYAMA, .gender = TRAINER_MON_RANDOM_GENDER, #line 16298 - .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), #line 16297 - .lvl = 37, + .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { #line 16300 - .species = SPECIES_VIGOROTH, + .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, #line 16302 - .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), #line 16301 - .lvl = 37, + .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, - }, - }, + { #line 16304 - [TRAINER_CRISTIN_4] = - { -#line 16305 - .trainerName = _("CRISTIN"), + .species = SPECIES_MACHOKE, + .gender = TRAINER_MON_RANDOM_GENDER, #line 16306 - .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 16307 - .trainerPic = TRAINER_PIC_COOLTRAINER_F, - .encounterMusic_gender = + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 16305 + .lvl = 41, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, #line 16308 -F_TRAINER_FEMALE | + [TRAINER_KOJI_5] = + { #line 16309 - TRAINER_ENCOUNTER_MUSIC_COOL, + .trainerName = _("KOJI"), #line 16310 - .items = { ITEM_HYPER_POTION }, + .trainerClass = TRAINER_CLASS_BLACK_BELT, #line 16311 - .doubleBattle = FALSE, -#line 16312 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 3, - .party = (const struct TrainerMon[]) - { - { -#line 16314 - .species = SPECIES_SPINDA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 16316 - .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 16315 - .lvl = 39, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 16318 - .species = SPECIES_LOUDRED, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 16320 - .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), -#line 16319 - .lvl = 39, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 16322 - .species = SPECIES_VIGOROTH, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 16324 - .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), -#line 16323 - .lvl = 39, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 16326 - [TRAINER_CRISTIN_5] = - { -#line 16327 - .trainerName = _("CRISTIN"), -#line 16328 - .trainerClass = TRAINER_CLASS_COOLTRAINER, -#line 16329 - .trainerPic = TRAINER_PIC_COOLTRAINER_F, + .trainerPic = TRAINER_PIC_BLACK_BELT, .encounterMusic_gender = -#line 16330 -F_TRAINER_FEMALE | -#line 16331 - TRAINER_ENCOUNTER_MUSIC_COOL, -#line 16332 - .items = { ITEM_HYPER_POTION }, -#line 16333 - .doubleBattle = FALSE, -#line 16334 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, - .partySize = 3, - .party = (const struct TrainerMon[]) - { - { -#line 16336 - .species = SPECIES_SPINDA, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 16338 - .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 16337 - .lvl = 41, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 16340 - .species = SPECIES_EXPLOUD, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 16342 - .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 16341 - .lvl = 41, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 16344 - .species = SPECIES_SLAKING, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 16346 - .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), -#line 16345 - .lvl = 41, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 16348 - [TRAINER_FERNANDO_2] = - { -#line 16349 - .trainerName = _("FERNANDO"), -#line 16350 - .trainerClass = TRAINER_CLASS_GUITARIST, -#line 16351 - .trainerPic = TRAINER_PIC_GUITARIST, - .encounterMusic_gender = -#line 16353 +#line 16313 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16354 +#line 16314 .doubleBattle = FALSE, -#line 16355 +#line 16315 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { +#line 16317 + .species = SPECIES_HARIYAMA, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16319 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 16318 + .lvl = 43, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 16321 + .species = SPECIES_MACHAMP, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16323 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 16322 + .lvl = 43, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 16325 + .species = SPECIES_MACHAMP, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16327 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 16326 + .lvl = 43, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 16329 + [TRAINER_CRISTIN_2] = + { +#line 16330 + .trainerName = _("CRISTIN"), +#line 16331 + .trainerClass = TRAINER_CLASS_COOLTRAINER, +#line 16332 + .trainerPic = TRAINER_PIC_COOLTRAINER_F, + .encounterMusic_gender = +#line 16333 +F_TRAINER_FEMALE | +#line 16334 + TRAINER_ENCOUNTER_MUSIC_COOL, +#line 16335 + .items = { ITEM_HYPER_POTION }, +#line 16336 + .doubleBattle = FALSE, +#line 16337 + .aiFlags = AI_FLAG_BASIC_TRAINER, + .partySize = 2, + .party = (const struct TrainerMon[]) + { + { +#line 16339 + .species = SPECIES_LOUDRED, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16341 + .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), +#line 16340 + .lvl = 35, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 16343 + .species = SPECIES_VIGOROTH, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16345 + .iv = TRAINER_PARTY_IVS(13, 13, 13, 13, 13, 13), +#line 16344 + .lvl = 35, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 16347 + [TRAINER_CRISTIN_3] = + { +#line 16348 + .trainerName = _("CRISTIN"), +#line 16349 + .trainerClass = TRAINER_CLASS_COOLTRAINER, +#line 16350 + .trainerPic = TRAINER_PIC_COOLTRAINER_F, + .encounterMusic_gender = +#line 16351 +F_TRAINER_FEMALE | +#line 16352 + TRAINER_ENCOUNTER_MUSIC_COOL, +#line 16353 + .items = { ITEM_HYPER_POTION }, +#line 16354 + .doubleBattle = FALSE, +#line 16355 + .aiFlags = AI_FLAG_BASIC_TRAINER, + .partySize = 3, + .party = (const struct TrainerMon[]) + { + { #line 16357 - .species = SPECIES_ELECTRIKE, + .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, #line 16359 - .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), #line 16358 - .lvl = 35, + .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { #line 16361 - .species = SPECIES_ELECTRIKE, + .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, #line 16363 - .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), #line 16362 - .lvl = 35, + .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { #line 16365 - .species = SPECIES_LOUDRED, + .species = SPECIES_VIGOROTH, .gender = TRAINER_MON_RANDOM_GENDER, #line 16367 - .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), + .iv = TRAINER_PARTY_IVS(14, 14, 14, 14, 14, 14), #line 16366 - .lvl = 35, + .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, #line 16369 - [TRAINER_FERNANDO_3] = + [TRAINER_CRISTIN_4] = { #line 16370 - .trainerName = _("FERNANDO"), + .trainerName = _("CRISTIN"), #line 16371 - .trainerClass = TRAINER_CLASS_GUITARIST, + .trainerClass = TRAINER_CLASS_COOLTRAINER, #line 16372 - .trainerPic = TRAINER_PIC_GUITARIST, + .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = +#line 16373 +F_TRAINER_FEMALE | #line 16374 - TRAINER_ENCOUNTER_MUSIC_INTENSE, + TRAINER_ENCOUNTER_MUSIC_COOL, #line 16375 - .doubleBattle = FALSE, + .items = { ITEM_HYPER_POTION }, #line 16376 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .doubleBattle = FALSE, +#line 16377 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16378 - .species = SPECIES_ELECTRIKE, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 16380 - .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), #line 16379 - .lvl = 37, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 16382 - .species = SPECIES_MANECTRIC, + .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16384 - .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16383 - .lvl = 37, +#line 16381 + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), +#line 16380 + .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16386 +#line 16383 .species = SPECIES_LOUDRED, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16388 - .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), +#line 16385 + .iv = TRAINER_PARTY_IVS(15, 15, 15, 15, 15, 15), +#line 16384 + .lvl = 39, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { #line 16387 - .lvl = 37, + .species = SPECIES_VIGOROTH, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16389 + .iv = TRAINER_PARTY_IVS(12, 12, 12, 12, 12, 12), +#line 16388 + .lvl = 39, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16390 - [TRAINER_FERNANDO_4] = - { #line 16391 - .trainerName = _("FERNANDO"), + [TRAINER_CRISTIN_5] = + { #line 16392 - .trainerClass = TRAINER_CLASS_GUITARIST, + .trainerName = _("CRISTIN"), #line 16393 - .trainerPic = TRAINER_PIC_GUITARIST, + .trainerClass = TRAINER_CLASS_COOLTRAINER, +#line 16394 + .trainerPic = TRAINER_PIC_COOLTRAINER_F, .encounterMusic_gender = #line 16395 - TRAINER_ENCOUNTER_MUSIC_INTENSE, +F_TRAINER_FEMALE | #line 16396 - .doubleBattle = FALSE, + TRAINER_ENCOUNTER_MUSIC_COOL, #line 16397 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, - .partySize = 3, - .party = (const struct TrainerMon[]) - { - { -#line 16399 - .species = SPECIES_MANECTRIC, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 16401 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16400 - .lvl = 39, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 16403 - .species = SPECIES_MANECTRIC, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 16405 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16404 - .lvl = 39, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 16407 - .species = SPECIES_LOUDRED, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 16409 - .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16408 - .lvl = 39, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - }, - }, -#line 16411 - [TRAINER_FERNANDO_5] = - { -#line 16412 - .trainerName = _("FERNANDO"), -#line 16413 - .trainerClass = TRAINER_CLASS_GUITARIST, -#line 16414 - .trainerPic = TRAINER_PIC_GUITARIST, - .encounterMusic_gender = -#line 16416 - TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16417 + .items = { ITEM_HYPER_POTION }, +#line 16398 .doubleBattle = FALSE, -#line 16418 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE, +#line 16399 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16420 - .species = SPECIES_MANECTRIC, +#line 16401 + .species = SPECIES_SPINDA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16422 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16421 +#line 16403 + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), +#line 16402 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16424 - .species = SPECIES_MANECTRIC, - .gender = TRAINER_MON_RANDOM_GENDER, -#line 16426 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16425 - .lvl = 41, - .nature = NATURE_HARDY, - .dynamaxLevel = MAX_DYNAMAX_LEVEL, - }, - { -#line 16428 +#line 16405 .species = SPECIES_EXPLOUD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16430 - .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16429 +#line 16407 + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), +#line 16406 + .lvl = 41, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 16409 + .species = SPECIES_SLAKING, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16411 + .iv = TRAINER_PARTY_IVS(17, 17, 17, 17, 17, 17), +#line 16410 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, +#line 16413 + [TRAINER_FERNANDO_2] = + { +#line 16414 + .trainerName = _("FERNANDO"), +#line 16415 + .trainerClass = TRAINER_CLASS_GUITARIST, +#line 16416 + .trainerPic = TRAINER_PIC_GUITARIST, + .encounterMusic_gender = +#line 16418 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 16419 + .doubleBattle = FALSE, +#line 16420 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 3, + .party = (const struct TrainerMon[]) + { + { +#line 16422 + .species = SPECIES_ELECTRIKE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16424 + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), +#line 16423 + .lvl = 35, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 16426 + .species = SPECIES_ELECTRIKE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16428 + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), +#line 16427 + .lvl = 35, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 16430 + .species = SPECIES_LOUDRED, + .gender = TRAINER_MON_RANDOM_GENDER, #line 16432 + .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), +#line 16431 + .lvl = 35, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 16434 + [TRAINER_FERNANDO_3] = + { +#line 16435 + .trainerName = _("FERNANDO"), +#line 16436 + .trainerClass = TRAINER_CLASS_GUITARIST, +#line 16437 + .trainerPic = TRAINER_PIC_GUITARIST, + .encounterMusic_gender = +#line 16439 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 16440 + .doubleBattle = FALSE, +#line 16441 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 3, + .party = (const struct TrainerMon[]) + { + { +#line 16443 + .species = SPECIES_ELECTRIKE, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16445 + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), +#line 16444 + .lvl = 37, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 16447 + .species = SPECIES_MANECTRIC, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16449 + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), +#line 16448 + .lvl = 37, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 16451 + .species = SPECIES_LOUDRED, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16453 + .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), +#line 16452 + .lvl = 37, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 16455 + [TRAINER_FERNANDO_4] = + { +#line 16456 + .trainerName = _("FERNANDO"), +#line 16457 + .trainerClass = TRAINER_CLASS_GUITARIST, +#line 16458 + .trainerPic = TRAINER_PIC_GUITARIST, + .encounterMusic_gender = +#line 16460 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 16461 + .doubleBattle = FALSE, +#line 16462 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 3, + .party = (const struct TrainerMon[]) + { + { +#line 16464 + .species = SPECIES_MANECTRIC, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16466 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 16465 + .lvl = 39, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 16468 + .species = SPECIES_MANECTRIC, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16470 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 16469 + .lvl = 39, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 16472 + .species = SPECIES_LOUDRED, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16474 + .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), +#line 16473 + .lvl = 39, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 16476 + [TRAINER_FERNANDO_5] = + { +#line 16477 + .trainerName = _("FERNANDO"), +#line 16478 + .trainerClass = TRAINER_CLASS_GUITARIST, +#line 16479 + .trainerPic = TRAINER_PIC_GUITARIST, + .encounterMusic_gender = +#line 16481 + TRAINER_ENCOUNTER_MUSIC_INTENSE, +#line 16482 + .doubleBattle = FALSE, +#line 16483 + .aiFlags = AI_FLAG_CHECK_BAD_MOVE, + .partySize = 3, + .party = (const struct TrainerMon[]) + { + { +#line 16485 + .species = SPECIES_MANECTRIC, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16487 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 16486 + .lvl = 41, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 16489 + .species = SPECIES_MANECTRIC, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16491 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 16490 + .lvl = 41, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + { +#line 16493 + .species = SPECIES_EXPLOUD, + .gender = TRAINER_MON_RANDOM_GENDER, +#line 16495 + .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), +#line 16494 + .lvl = 41, + .nature = NATURE_HARDY, + .dynamaxLevel = MAX_DYNAMAX_LEVEL, + }, + }, + }, +#line 16497 [TRAINER_SAWYER_2] = { -#line 16433 +#line 16498 .trainerName = _("SAWYER"), -#line 16434 +#line 16499 .trainerClass = TRAINER_CLASS_HIKER, -#line 16435 +#line 16500 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 16437 +#line 16502 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 16438 +#line 16503 .doubleBattle = FALSE, -#line 16439 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 16504 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 16441 +#line 16506 .species = SPECIES_GEODUDE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16443 +#line 16508 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16442 +#line 16507 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16445 +#line 16510 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16447 +#line 16512 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16446 +#line 16511 .lvl = 26, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16449 +#line 16514 [TRAINER_SAWYER_3] = { -#line 16450 +#line 16515 .trainerName = _("SAWYER"), -#line 16451 +#line 16516 .trainerClass = TRAINER_CLASS_HIKER, -#line 16452 +#line 16517 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 16454 +#line 16519 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 16455 +#line 16520 .doubleBattle = FALSE, -#line 16456 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 16521 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16458 +#line 16523 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16460 +#line 16525 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16459 +#line 16524 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16462 +#line 16527 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16464 +#line 16529 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16463 +#line 16528 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16466 +#line 16531 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16468 +#line 16533 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16467 +#line 16532 .lvl = 28, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16470 +#line 16535 [TRAINER_SAWYER_4] = { -#line 16471 +#line 16536 .trainerName = _("SAWYER"), -#line 16472 +#line 16537 .trainerClass = TRAINER_CLASS_HIKER, -#line 16473 +#line 16538 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 16475 +#line 16540 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 16476 +#line 16541 .doubleBattle = FALSE, -#line 16477 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 16542 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16479 +#line 16544 .species = SPECIES_MACHOP, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16481 +#line 16546 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16480 +#line 16545 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16483 +#line 16548 .species = SPECIES_NUMEL, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16485 +#line 16550 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16484 +#line 16549 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16487 +#line 16552 .species = SPECIES_GRAVELER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16489 +#line 16554 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16488 +#line 16553 .lvl = 30, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16491 +#line 16556 [TRAINER_SAWYER_5] = { -#line 16492 +#line 16557 .trainerName = _("SAWYER"), -#line 16493 +#line 16558 .trainerClass = TRAINER_CLASS_HIKER, -#line 16494 +#line 16559 .trainerPic = TRAINER_PIC_HIKER, .encounterMusic_gender = -#line 16496 +#line 16561 TRAINER_ENCOUNTER_MUSIC_HIKER, -#line 16497 +#line 16562 .doubleBattle = FALSE, -#line 16498 - .aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY, +#line 16563 + .aiFlags = AI_FLAG_BASIC_TRAINER, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16500 +#line 16565 .species = SPECIES_MACHOKE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16502 +#line 16567 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16501 +#line 16566 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16504 +#line 16569 .species = SPECIES_CAMERUPT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16506 +#line 16571 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16505 +#line 16570 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16508 +#line 16573 .species = SPECIES_GOLEM, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16510 +#line 16575 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16509 +#line 16574 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16512 +#line 16577 [TRAINER_GABRIELLE_2] = { -#line 16513 +#line 16578 .trainerName = _("GABRIELLE"), -#line 16514 +#line 16579 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 16515 +#line 16580 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 16516 +#line 16581 F_TRAINER_FEMALE | -#line 16517 +#line 16582 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16518 +#line 16583 .doubleBattle = FALSE, -#line 16519 +#line 16584 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 16521 +#line 16586 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16523 +#line 16588 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16522 +#line 16587 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16525 +#line 16590 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16527 +#line 16592 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16526 +#line 16591 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16529 +#line 16594 .species = SPECIES_ZIGZAGOON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16531 +#line 16596 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16530 +#line 16595 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16533 +#line 16598 .species = SPECIES_LOTAD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16535 +#line 16600 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16534 +#line 16599 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16537 +#line 16602 .species = SPECIES_SEEDOT, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16539 +#line 16604 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16538 +#line 16603 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16541 +#line 16606 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16543 +#line 16608 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16542 +#line 16607 .lvl = 31, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16545 +#line 16610 [TRAINER_GABRIELLE_3] = { -#line 16546 +#line 16611 .trainerName = _("GABRIELLE"), -#line 16547 +#line 16612 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 16548 +#line 16613 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 16549 +#line 16614 F_TRAINER_FEMALE | -#line 16550 +#line 16615 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16551 +#line 16616 .doubleBattle = FALSE, -#line 16552 +#line 16617 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 16554 +#line 16619 .species = SPECIES_SKITTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16556 +#line 16621 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16555 +#line 16620 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16558 +#line 16623 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16560 +#line 16625 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16559 +#line 16624 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16562 +#line 16627 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16564 +#line 16629 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16563 +#line 16628 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16566 +#line 16631 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16568 +#line 16633 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16567 +#line 16632 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16570 +#line 16635 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16572 +#line 16637 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16571 +#line 16636 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16574 +#line 16639 .species = SPECIES_TAILLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16576 +#line 16641 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16575 +#line 16640 .lvl = 33, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16578 +#line 16643 [TRAINER_GABRIELLE_4] = { -#line 16579 +#line 16644 .trainerName = _("GABRIELLE"), -#line 16580 +#line 16645 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 16581 +#line 16646 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 16582 +#line 16647 F_TRAINER_FEMALE | -#line 16583 +#line 16648 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16584 +#line 16649 .doubleBattle = FALSE, -#line 16585 +#line 16650 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 16587 +#line 16652 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16589 +#line 16654 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16588 +#line 16653 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16591 +#line 16656 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16593 +#line 16658 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16592 +#line 16657 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16595 +#line 16660 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16597 +#line 16662 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16596 +#line 16661 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16599 +#line 16664 .species = SPECIES_LOMBRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16601 +#line 16666 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16600 +#line 16665 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16603 +#line 16668 .species = SPECIES_NUZLEAF, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16605 +#line 16670 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16604 +#line 16669 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16607 +#line 16672 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16609 +#line 16674 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16608 +#line 16673 .lvl = 35, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16611 +#line 16676 [TRAINER_GABRIELLE_5] = { -#line 16612 +#line 16677 .trainerName = _("GABRIELLE"), -#line 16613 +#line 16678 .trainerClass = TRAINER_CLASS_PKMN_BREEDER, -#line 16614 +#line 16679 .trainerPic = TRAINER_PIC_POKEMON_BREEDER_F, .encounterMusic_gender = -#line 16615 +#line 16680 F_TRAINER_FEMALE | -#line 16616 +#line 16681 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16617 +#line 16682 .doubleBattle = FALSE, -#line 16618 +#line 16683 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 6, .party = (const struct TrainerMon[]) { { -#line 16620 +#line 16685 .species = SPECIES_DELCATTY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16622 +#line 16687 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16621 +#line 16686 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16624 +#line 16689 .species = SPECIES_MIGHTYENA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16626 +#line 16691 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16625 +#line 16690 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16628 +#line 16693 .species = SPECIES_LINOONE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16630 +#line 16695 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16629 +#line 16694 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16632 +#line 16697 .species = SPECIES_LUDICOLO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16634 +#line 16699 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16633 +#line 16698 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16636 +#line 16701 .species = SPECIES_SHIFTRY, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16638 +#line 16703 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16637 +#line 16702 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16640 +#line 16705 .species = SPECIES_SWELLOW, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16642 +#line 16707 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16641 +#line 16706 .lvl = 37, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16644 +#line 16709 [TRAINER_THALIA_2] = { -#line 16645 +#line 16710 .trainerName = _("THALIA"), -#line 16646 +#line 16711 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 16647 +#line 16712 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 16648 +#line 16713 F_TRAINER_FEMALE | -#line 16649 +#line 16714 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16650 +#line 16715 .doubleBattle = FALSE, -#line 16651 +#line 16716 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 16653 +#line 16718 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16655 +#line 16720 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16654 +#line 16719 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16657 +#line 16722 .species = SPECIES_HORSEA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16659 +#line 16724 .iv = TRAINER_PARTY_IVS(1, 1, 1, 1, 1, 1), -#line 16658 +#line 16723 .lvl = 34, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16661 +#line 16726 [TRAINER_THALIA_3] = { -#line 16662 +#line 16727 .trainerName = _("THALIA"), -#line 16663 +#line 16728 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 16664 +#line 16729 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 16665 +#line 16730 F_TRAINER_FEMALE | -#line 16666 +#line 16731 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16667 +#line 16732 .doubleBattle = FALSE, -#line 16668 +#line 16733 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16670 +#line 16735 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16672 +#line 16737 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16671 +#line 16736 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16674 +#line 16739 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16676 +#line 16741 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16675 +#line 16740 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16678 +#line 16743 .species = SPECIES_SEADRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16680 +#line 16745 .iv = TRAINER_PARTY_IVS(2, 2, 2, 2, 2, 2), -#line 16679 +#line 16744 .lvl = 36, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16682 +#line 16747 [TRAINER_THALIA_4] = { -#line 16683 +#line 16748 .trainerName = _("THALIA"), -#line 16684 +#line 16749 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 16685 +#line 16750 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 16686 +#line 16751 F_TRAINER_FEMALE | -#line 16687 +#line 16752 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16688 +#line 16753 .doubleBattle = FALSE, -#line 16689 +#line 16754 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16691 +#line 16756 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16693 +#line 16758 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16692 +#line 16757 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16695 +#line 16760 .species = SPECIES_WAILMER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16697 +#line 16762 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16696 +#line 16761 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16699 +#line 16764 .species = SPECIES_SEADRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16701 +#line 16766 .iv = TRAINER_PARTY_IVS(3, 3, 3, 3, 3, 3), -#line 16700 +#line 16765 .lvl = 38, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16703 +#line 16768 [TRAINER_THALIA_5] = { -#line 16704 +#line 16769 .trainerName = _("THALIA"), -#line 16705 +#line 16770 .trainerClass = TRAINER_CLASS_BEAUTY, -#line 16706 +#line 16771 .trainerPic = TRAINER_PIC_BEAUTY, .encounterMusic_gender = -#line 16707 +#line 16772 F_TRAINER_FEMALE | -#line 16708 +#line 16773 TRAINER_ENCOUNTER_MUSIC_FEMALE, -#line 16709 +#line 16774 .doubleBattle = FALSE, -#line 16710 +#line 16775 .aiFlags = AI_FLAG_CHECK_BAD_MOVE, .partySize = 3, .party = (const struct TrainerMon[]) { { -#line 16712 +#line 16777 .species = SPECIES_LUVDISC, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16714 +#line 16779 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16713 +#line 16778 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16716 +#line 16781 .species = SPECIES_WAILORD, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16718 +#line 16783 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16717 +#line 16782 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16720 +#line 16785 .species = SPECIES_KINGDRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16722 +#line 16787 .iv = TRAINER_PARTY_IVS(4, 4, 4, 4, 4, 4), -#line 16721 +#line 16786 .lvl = 40, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16724 +#line 16789 [TRAINER_MARIELA] = { -#line 16725 +#line 16790 .trainerName = _("MARIELA"), -#line 16726 +#line 16791 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 16727 +#line 16792 .trainerPic = TRAINER_PIC_PSYCHIC_F, .encounterMusic_gender = -#line 16728 +#line 16793 F_TRAINER_FEMALE | -#line 16729 +#line 16794 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16730 +#line 16795 .doubleBattle = FALSE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 16732 +#line 16797 .species = SPECIES_CHIMECHO, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16734 +#line 16799 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16733 +#line 16798 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16736 +#line 16801 [TRAINER_ALVARO] = { -#line 16737 +#line 16802 .trainerName = _("ALVARO"), -#line 16738 +#line 16803 .trainerClass = TRAINER_CLASS_PSYCHIC, -#line 16739 +#line 16804 .trainerPic = TRAINER_PIC_PSYCHIC_M, .encounterMusic_gender = -#line 16741 +#line 16806 TRAINER_ENCOUNTER_MUSIC_INTENSE, -#line 16742 +#line 16807 .doubleBattle = FALSE, .partySize = 2, .party = (const struct TrainerMon[]) { { -#line 16744 +#line 16809 .species = SPECIES_BANETTE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16746 +#line 16811 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16745 +#line 16810 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, { -#line 16748 +#line 16813 .species = SPECIES_KADABRA, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16750 +#line 16815 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16749 +#line 16814 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16752 +#line 16817 [TRAINER_EVERETT] = { -#line 16753 +#line 16818 .trainerName = _("EVERETT"), -#line 16754 +#line 16819 .trainerClass = TRAINER_CLASS_GENTLEMAN, -#line 16755 +#line 16820 .trainerPic = TRAINER_PIC_GENTLEMAN, .encounterMusic_gender = -#line 16757 +#line 16822 TRAINER_ENCOUNTER_MUSIC_RICH, -#line 16758 +#line 16823 .doubleBattle = FALSE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 16760 +#line 16825 .species = SPECIES_WOBBUFFET, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16762 +#line 16827 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16761 +#line 16826 .lvl = 41, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16764 +#line 16829 [TRAINER_RED] = { -#line 16765 +#line 16830 .trainerName = _("RED"), -#line 16766 +#line 16831 .trainerClass = TRAINER_CLASS_RIVAL, -#line 16767 +#line 16832 .trainerPic = TRAINER_PIC_RED, .encounterMusic_gender = -#line 16769 +#line 16834 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16770 +#line 16835 .doubleBattle = FALSE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 16772 +#line 16837 .species = SPECIES_CHARMANDER, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16774 +#line 16839 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16773 +#line 16838 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16776 +#line 16841 [TRAINER_LEAF] = { -#line 16777 +#line 16842 .trainerName = _("LEAF"), -#line 16778 +#line 16843 .trainerClass = TRAINER_CLASS_RIVAL, -#line 16779 +#line 16844 .trainerPic = TRAINER_PIC_LEAF, .encounterMusic_gender = -#line 16780 +#line 16845 F_TRAINER_FEMALE | -#line 16781 +#line 16846 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16782 +#line 16847 .doubleBattle = FALSE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 16784 +#line 16849 .species = SPECIES_BULBASAUR, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16786 +#line 16851 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16785 +#line 16850 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16788 +#line 16853 [TRAINER_BRENDAN_PLACEHOLDER] = { -#line 16789 +#line 16854 .trainerName = _("BRENDAN"), -#line 16790 +#line 16855 .trainerClass = TRAINER_CLASS_RS_PROTAG, -#line 16791 +#line 16856 .trainerPic = TRAINER_PIC_RS_BRENDAN, .encounterMusic_gender = -#line 16793 +#line 16858 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16794 +#line 16859 .doubleBattle = FALSE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 16796 +#line 16861 .species = SPECIES_GROUDON, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16798 +#line 16863 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16797 +#line 16862 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, }, }, }, -#line 16800 +#line 16865 [TRAINER_MAY_PLACEHOLDER] = { -#line 16801 +#line 16866 .trainerName = _("MAY"), -#line 16802 +#line 16867 .trainerClass = TRAINER_CLASS_RS_PROTAG, -#line 16803 +#line 16868 .trainerPic = TRAINER_PIC_RS_MAY, .encounterMusic_gender = -#line 16804 +#line 16869 F_TRAINER_FEMALE | -#line 16805 +#line 16870 TRAINER_ENCOUNTER_MUSIC_MALE, -#line 16806 +#line 16871 .doubleBattle = FALSE, .partySize = 1, .party = (const struct TrainerMon[]) { { -#line 16808 +#line 16873 .species = SPECIES_KYOGRE, .gender = TRAINER_MON_RANDOM_GENDER, -#line 16810 +#line 16875 .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0), -#line 16809 +#line 16874 .lvl = 5, .nature = NATURE_HARDY, .dynamaxLevel = MAX_DYNAMAX_LEVEL, diff --git a/src/data/trainers.party b/src/data/trainers.party index c5d2626b3d..14304518b6 100644 --- a/src/data/trainers.party +++ b/src/data/trainers.party @@ -88,7 +88,7 @@ Pic: Hiker Gender: Male Music: Hiker Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Geodude Level: 21 @@ -243,7 +243,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Manectric Level: 29 @@ -513,7 +513,7 @@ Pic: Expert M Gender: Male Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Makuhita Level: 30 @@ -531,7 +531,7 @@ Gender: Male Music: Aqua Items: Super Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mightyena Level: 34 @@ -561,7 +561,7 @@ Pic: Aqua Admin F Gender: Female Music: Aqua Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Carvanha Level: 28 @@ -578,7 +578,7 @@ Pic: Aqua Admin F Gender: Female Music: Aqua Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Sharpedo Level: 37 @@ -596,7 +596,7 @@ Gender: Male Music: Aqua Items: Super Potion / Super Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mightyena Level: 41 @@ -669,7 +669,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Medicham Level: 43 @@ -1266,7 +1266,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Swellow Level: 26 @@ -1283,7 +1283,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Spinda Level: 26 @@ -1300,7 +1300,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Slakoth @ Sitrus Berry Level: 26 @@ -1317,7 +1317,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Vigoroth Level: 26 @@ -1333,7 +1333,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Swellow Level: 28 @@ -1383,7 +1383,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Sableye Level: 44 @@ -1405,7 +1405,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mawile Level: 46 @@ -1423,7 +1423,7 @@ Gender: Male Music: Cool Items: Super Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Electrike Level: 17 @@ -1445,7 +1445,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Cacturne Level: 43 @@ -1463,7 +1463,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Magneton Level: 43 @@ -1481,7 +1481,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Swellow Level: 42 @@ -1503,7 +1503,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Dodrio Level: 42 @@ -1529,7 +1529,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Kecleon Level: 42 @@ -1551,7 +1551,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Electrike Level: 26 @@ -1573,7 +1573,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Manectric Level: 29 @@ -1595,7 +1595,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Manectric Level: 32 @@ -1617,7 +1617,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Manectric Level: 35 @@ -1639,7 +1639,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Graveler Level: 33 @@ -1657,7 +1657,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Delcatty Level: 26 @@ -1673,7 +1673,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Wigglytuff Level: 26 @@ -1690,7 +1690,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Zangoose Level: 26 @@ -1706,7 +1706,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Mawile Level: 29 @@ -1740,7 +1740,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Lairon Level: 45 @@ -1758,7 +1758,7 @@ Gender: Female Music: Cool Items: Super Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Wingull Level: 17 @@ -1780,7 +1780,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Sableye Level: 30 @@ -1794,7 +1794,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Roselia Level: 45 @@ -1808,7 +1808,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Claydol Level: 45 @@ -1822,7 +1822,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Torkoal Level: 42 @@ -1844,7 +1844,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Skarmory Level: 43 @@ -1862,7 +1862,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Sandslash Level: 42 @@ -1884,7 +1884,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Wingull Level: 26 @@ -1906,7 +1906,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Pelipper Level: 29 @@ -1928,7 +1928,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Pelipper Level: 32 @@ -1950,7 +1950,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Pelipper Level: 34 @@ -4592,7 +4592,7 @@ Gender: Male Music: Elite Four Items: Full Restore / Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability / Setup First Turn +AI: Basic Trainer / Force Setup First Turn Mugshot: Purple Mightyena @@ -4643,7 +4643,7 @@ Gender: Female Music: Elite Four Items: Full Restore / Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mugshot: Green Dusclops @@ -4694,7 +4694,7 @@ Gender: Female Music: Elite Four Items: Full Restore / Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mugshot: Pink Sealeo @@ -4745,7 +4745,7 @@ Gender: Male Music: Elite Four Items: Full Restore / Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mugshot: Blue Shelgon @@ -4796,7 +4796,7 @@ Gender: Female Music: Female Items: Potion / Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Geodude Level: 12 @@ -4830,7 +4830,7 @@ Gender: Male Music: Male Items: Super Potion / Super Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Machop Level: 16 @@ -4864,7 +4864,7 @@ Gender: Male Music: Male Items: Super Potion / Super Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Voltorb Level: 20 @@ -4906,7 +4906,7 @@ Gender: Female Music: Female Items: Hyper Potion / Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Numel Level: 24 @@ -4948,7 +4948,7 @@ Gender: Male Music: Male Items: Hyper Potion / Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Spinda Level: 27 @@ -4990,7 +4990,7 @@ Gender: Female Music: Female Items: Hyper Potion / Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability / Risky +AI: Basic Trainer / Risky Swablu Level: 29 @@ -5040,7 +5040,7 @@ Gender: Male Music: Female Items: Hyper Potion / Hyper Potion / Hyper Potion / Hyper Potion Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Claydol Level: 41 @@ -5082,7 +5082,7 @@ Gender: Male Music: Male Items: Hyper Potion / Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Luvdisc Level: 41 @@ -5764,7 +5764,7 @@ Pic: Expert M Gender: Male Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Hariyama Level: 27 @@ -5777,7 +5777,7 @@ Pic: Expert M Gender: Male Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Hariyama Level: 33 @@ -5794,7 +5794,7 @@ Pic: Expert M Gender: Male Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Hariyama Level: 36 @@ -5811,7 +5811,7 @@ Pic: Expert M Gender: Male Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Hariyama Level: 39 @@ -5828,7 +5828,7 @@ Pic: Expert M Gender: Male Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Hariyama Level: 42 @@ -5845,7 +5845,7 @@ Pic: Expert F Gender: Female Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Meditite Level: 18 @@ -5862,7 +5862,7 @@ Pic: Expert F Gender: Female Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Meditite Level: 21 @@ -5879,7 +5879,7 @@ Pic: Expert F Gender: Female Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Meditite Level: 30 @@ -5896,7 +5896,7 @@ Pic: Expert F Gender: Female Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Medicham Level: 33 @@ -5913,7 +5913,7 @@ Pic: Expert F Gender: Female Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Medicham Level: 36 @@ -5930,7 +5930,7 @@ Pic: Expert F Gender: Female Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Medicham Level: 39 @@ -6047,7 +6047,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Slaking Level: 43 @@ -6073,7 +6073,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Gardevoir Level: 43 @@ -6248,7 +6248,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore / Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mugshot: Yellow Wailord @@ -9189,7 +9189,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Absol Level: 27 @@ -9202,7 +9202,7 @@ Pic: Ninja Boy Gender: Male Music: Suspicious Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Koffing Level: 31 @@ -9271,7 +9271,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Manectric Level: 34 @@ -9459,7 +9459,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Altaria Level: 44 @@ -9508,7 +9508,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Treecko Level: 5 @@ -9521,7 +9521,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Slugma Level: 18 @@ -9542,7 +9542,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Slugma Level: 29 @@ -9563,7 +9563,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Torchic Level: 5 @@ -9576,7 +9576,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Wingull Level: 18 @@ -9597,7 +9597,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Pelipper Level: 29 @@ -9618,7 +9618,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mudkip Level: 5 @@ -9631,7 +9631,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Lombre Level: 18 @@ -9652,7 +9652,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Lombre Level: 29 @@ -9673,7 +9673,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Treecko Level: 5 @@ -9686,7 +9686,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Wingull Level: 18 @@ -9707,7 +9707,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Slugma Level: 29 @@ -9728,7 +9728,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Torchic Level: 5 @@ -9741,7 +9741,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Wingull Level: 18 @@ -9762,7 +9762,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Pelipper Level: 29 @@ -9783,7 +9783,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mudkip Level: 5 @@ -9796,7 +9796,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Lombre Level: 18 @@ -9817,7 +9817,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Lombre Level: 29 @@ -9884,7 +9884,7 @@ Pic: Cooltrainer M Gender: Male Music: Cool Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Lunatone Level: 43 @@ -10075,7 +10075,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Sableye Level: 43 @@ -10238,7 +10238,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Breloom Level: 27 @@ -10252,7 +10252,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Seedot Level: 28 @@ -10274,7 +10274,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Cacturne Level: 39 @@ -10288,7 +10288,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Breloom Level: 31 @@ -10302,7 +10302,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Breloom Level: 34 @@ -10316,7 +10316,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Breloom Level: 37 @@ -10330,7 +10330,7 @@ Gender: Male Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Kecleon Level: 39 @@ -10348,7 +10348,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Gloom Level: 26 @@ -10366,7 +10366,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Lotad Level: 28 @@ -10388,7 +10388,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Swablu Level: 38 @@ -10406,7 +10406,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Gloom Level: 30 @@ -10424,7 +10424,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Gloom Level: 33 @@ -10442,7 +10442,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Gloom Level: 36 @@ -10460,7 +10460,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Bellossom Level: 39 @@ -10641,7 +10641,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Manectric Level: 32 @@ -10883,7 +10883,7 @@ Pic: Expert M Gender: Male Music: Intense Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Swellow Level: 33 @@ -10930,7 +10930,7 @@ Pic: Magma Admin Gender: Male Music: Magma Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Numel Level: 18 @@ -10956,7 +10956,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Kecleon Level: 33 @@ -10973,7 +10973,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Slugma Level: 13 @@ -10990,7 +10990,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Wingull Level: 13 @@ -11008,7 +11008,7 @@ Gender: Male Music: Magma Items: Super Potion / Super Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mightyena Level: 37 @@ -11030,7 +11030,7 @@ Gender: Male Music: Magma Items: Super Potion / Super Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mightyena Level: 24 @@ -11098,7 +11098,7 @@ Pic: Lass Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Marill Level: 15 @@ -11867,7 +11867,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Kecleon Level: 23 @@ -12039,7 +12039,7 @@ Pic: Wally Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Ralts Level: 16 @@ -12053,7 +12053,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Altaria Level: 47 @@ -12103,7 +12103,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Altaria Level: 50 @@ -12153,7 +12153,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Altaria Level: 53 @@ -12203,7 +12203,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Altaria Level: 56 @@ -12252,7 +12252,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Tropius Level: 31 @@ -12277,7 +12277,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Tropius Level: 31 @@ -12302,7 +12302,7 @@ Pic: Brendan Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Tropius Level: 31 @@ -12327,7 +12327,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Tropius Level: 31 @@ -12352,7 +12352,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Tropius Level: 31 @@ -12377,7 +12377,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Tropius Level: 31 @@ -12462,7 +12462,7 @@ Gender: Female Music: Cool Items: Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Gloom Level: 34 @@ -12480,7 +12480,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Shiftry Level: 34 @@ -12670,7 +12670,7 @@ Pic: Old Couple Gender: Male Music: Intense Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Medicham Level: 39 @@ -12695,7 +12695,7 @@ Pic: Old Couple Gender: Male Music: Intense Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Medicham Level: 43 @@ -12720,7 +12720,7 @@ Pic: Old Couple Gender: Male Music: Intense Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Medicham Level: 46 @@ -12745,7 +12745,7 @@ Pic: Old Couple Gender: Male Music: Intense Double Battle: Yes -AI: Check Bad Move / Try To Faint / Setup First Turn +AI: Check Bad Move / Try To Faint / Force Setup First Turn Medicham Level: 49 @@ -12770,7 +12770,7 @@ Pic: Old Couple Gender: Male Music: Intense Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Medicham Level: 52 @@ -13516,7 +13516,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Pelipper Level: 33 @@ -13533,7 +13533,7 @@ Pic: Magma Leader Maxie Gender: Male Music: Magma Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mightyena Level: 42 @@ -13649,7 +13649,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Manectric Level: 24 @@ -13931,7 +13931,7 @@ Gender: Female Music: Intense Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Roselia Level: 33 @@ -13992,7 +13992,7 @@ Gender: Male Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Manectric Level: 30 @@ -14109,7 +14109,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Loudred Level: 29 @@ -14126,7 +14126,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Lotad Level: 13 @@ -14143,7 +14143,7 @@ Pic: May Gender: Female Music: Female Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Torkoal Level: 13 @@ -14161,7 +14161,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Golem Level: 32 @@ -14203,7 +14203,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Omanyte Level: 37 @@ -14253,7 +14253,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Omastar Level: 42 @@ -14303,7 +14303,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Aerodactyl Level: 47 @@ -14361,7 +14361,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Machamp @ Sitrus Berry Level: 33 @@ -14403,7 +14403,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Machamp @ Sitrus Berry Level: 38 @@ -14445,7 +14445,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Hitmonchan Level: 40 @@ -14495,7 +14495,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Hitmonlee Level: 46 @@ -14553,7 +14553,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Mareep Level: 36 @@ -14595,7 +14595,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Pikachu Level: 39 @@ -14645,7 +14645,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Raichu Level: 44 @@ -14695,7 +14695,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Electabuzz Level: 50 @@ -14753,7 +14753,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Magcargo @ White Herb Level: 38 @@ -14795,7 +14795,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Growlithe Level: 41 @@ -14845,7 +14845,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Houndour Level: 46 @@ -14903,7 +14903,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Arcanine Level: 51 @@ -14961,7 +14961,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Chansey Level: 42 @@ -15003,7 +15003,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Slaking @ Sitrus Berry Level: 47 @@ -15053,7 +15053,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Slaking @ Sitrus Berry Level: 52 @@ -15103,7 +15103,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Slaking @ Sitrus Berry Level: 57 @@ -15161,7 +15161,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability / Risky +AI: Basic Trainer / Risky Dratini @ Sitrus Berry Level: 40 @@ -15211,7 +15211,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability / Risky +AI: Basic Trainer / Risky Hoothoot Level: 43 @@ -15269,7 +15269,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability / Risky +AI: Basic Trainer / Risky Noctowl Level: 48 @@ -15327,7 +15327,7 @@ Gender: Female Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability / Risky +AI: Basic Trainer / Risky Noctowl Level: 53 @@ -15385,7 +15385,7 @@ Gender: Male Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Slowpoke Level: 48 @@ -15435,7 +15435,7 @@ Gender: Male Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Drowzee Level: 53 @@ -15493,7 +15493,7 @@ Gender: Male Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Hypno Level: 58 @@ -15551,7 +15551,7 @@ Gender: Male Music: Female Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Hypno Level: 63 @@ -15609,7 +15609,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Poliwag Level: 46 @@ -15659,7 +15659,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Poliwhirl Level: 50 @@ -15709,7 +15709,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Lapras Level: 56 @@ -15767,7 +15767,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore Double Battle: Yes -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Lapras Level: 61 @@ -15824,7 +15824,7 @@ Pic: Bug Maniac Gender: Male Music: Suspicious Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Illumise Level: 17 @@ -15847,7 +15847,7 @@ Pic: Bird Keeper Gender: Male Music: Cool Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Tropius Level: 30 @@ -15861,7 +15861,7 @@ Gender: Male Music: Male Items: Full Restore / Full Restore / Full Restore / Full Restore Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Skarmory Level: 77 @@ -15918,7 +15918,7 @@ Pic: Salon Maiden Anabel Gender: Female Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Beldum Level: 5 @@ -15931,7 +15931,7 @@ Pic: Dome Ace Tucker Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Beldum Level: 5 @@ -15944,7 +15944,7 @@ Pic: Palace Maven Spenser Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Beldum Level: 5 @@ -15957,7 +15957,7 @@ Pic: Arena Tycoon Greta Gender: Female Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Beldum Level: 5 @@ -15970,7 +15970,7 @@ Pic: Factory Head Noland Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Beldum Level: 5 @@ -15983,7 +15983,7 @@ Pic: Pike Queen Lucy Gender: Female Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Beldum Level: 5 @@ -15996,7 +15996,7 @@ Pic: Pyramid King Brandon Gender: Male Music: Male Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Beldum Level: 5 @@ -16334,7 +16334,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Loudred Level: 35 @@ -16352,7 +16352,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Spinda Level: 37 @@ -16374,7 +16374,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Spinda Level: 39 @@ -16396,7 +16396,7 @@ Gender: Female Music: Cool Items: Hyper Potion Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Spinda Level: 41 @@ -16501,7 +16501,7 @@ Pic: Hiker Gender: Male Music: Hiker Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Geodude Level: 26 @@ -16518,7 +16518,7 @@ Pic: Hiker Gender: Male Music: Hiker Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Machop Level: 28 @@ -16539,7 +16539,7 @@ Pic: Hiker Gender: Male Music: Hiker Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Machop Level: 30 @@ -16560,7 +16560,7 @@ Pic: Hiker Gender: Male Music: Hiker Double Battle: No -AI: Check Bad Move / Try To Faint / Check Viability +AI: Basic Trainer Machoke Level: 33 diff --git a/src/data/types_info.h b/src/data/types_info.h index f9bd233ca6..d14012ed5c 100644 --- a/src/data/types_info.h +++ b/src/data/types_info.h @@ -40,12 +40,6 @@ const uq4_12_t gTypeEffectivenessTable[NUMBER_OF_MON_TYPES][NUMBER_OF_MON_TYPES] #undef ______ #undef X -#if B_EXPANDED_TYPE_NAMES == TRUE -#define HANDLE_EXPANDED_TYPE_NAME(_name, ...) _(DEFAULT(_name, __VA_ARGS__)) -#else -#define HANDLE_EXPANDED_TYPE_NAME(_name, ...) _(_name) -#endif - // .generic is large enough that the text for TYPE_ELECTRIC will exceed TEXT_BUFF_ARRAY_COUNT. // In this array there's commented-out data such as references to type-resist berries that would otherwise would go unused. // However, we figured this information would be useful for users that want to add their own types as a reminder of @@ -60,6 +54,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB_WHITE, .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_NormalTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = TRUE, }, [TYPE_NORMAL] = { @@ -71,6 +67,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB_WHITE, // custom .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_NormalTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_SILK_SCARF, //.berry = ITEM_CHILAN_BERRY, //.gem = ITEM_NORMAL_GEM, @@ -80,7 +78,7 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = }, [TYPE_FIGHTING] = { - .name = HANDLE_EXPANDED_TYPE_NAME("Fight", "Fighting"), + .name = _("Fighting"), .generic = _("a FIGHTING move"), .palette = 13, .zMove = MOVE_ALL_OUT_PUMMELING, @@ -88,6 +86,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(26, 8, 14), .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_FightingTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_BLACK_BELT, //.berry = ITEM_CHOPLE_BERRY, //.gem = ITEM_FIGHTING_GEM, @@ -107,6 +107,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(31, 26, 7), .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_FlyingTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_SHARP_BEAK, //.berry = ITEM_COBA_BERRY, //.gem = ITEM_FLYING_GEM, @@ -126,6 +128,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(26, 10, 25), // custom .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_PoisonTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_POISON_BARB, //.berry = ITEM_KEBIA_BERRY, //.gem = ITEM_POISON_GEM, @@ -145,6 +149,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(25, 23, 18), .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_GroundTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_SOFT_SAND, //.berry = ITEM_SHUCA_BERRY, //.gem = ITEM_GROUND_GEM, @@ -164,6 +170,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(18, 16, 8), // custom .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_RockTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_HARD_STONE, //.berry = ITEM_CHARTI_BERRY, //.gem = ITEM_ROCK_GEM, @@ -183,6 +191,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(18, 24, 6), .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_BugTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_SILVER_POWDER, //.berry = ITEM_TANGA_BERRY, //.gem = ITEM_BUG_GEM, @@ -202,6 +212,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(12, 10, 16), .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_GhostTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_SPELL_TAG, //.berry = ITEM_KASIB_BERRY, //.gem = ITEM_GHOST_GEM, @@ -221,6 +233,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(19, 19, 20), .damageCategory = DAMAGE_CATEGORY_PHYSICAL, .paletteTMHM = gItemIconPalette_SteelTMHM, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_METAL_COAT, //.berry = ITEM_BABIRI_BERRY, //.gem = ITEM_STEEL_GEM, @@ -237,6 +251,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .palette = 15, .teraTypeRGBValue = RGB_WHITE, .damageCategory = DAMAGE_CATEGORY_SPECIAL, + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = TRUE, }, [TYPE_FIRE] = { @@ -248,6 +264,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(31, 20, 11), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_FireTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_CHARCOAL, //.berry = ITEM_OCCA_BERRY, //.gem = ITEM_FIRE_GEM, @@ -267,6 +285,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(10, 18, 27), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_WaterTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_MYSTIC_WATER, //.berry = ITEM_PASSHO_BERRY, //.gem = ITEM_WATER_GEM, @@ -286,6 +306,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(12, 24, 11), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_GrassTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_MIRACLE_SEED, //.berry = ITEM_RINDO_BERRY, //.gem = ITEM_GRASS_GEM, @@ -297,7 +319,7 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = }, [TYPE_ELECTRIC] = { - .name = HANDLE_EXPANDED_TYPE_NAME("Electr", "Electric"), + .name = _("Electric"), .generic = _("an ELECTRIC move"), .palette = 13, .zMove = MOVE_GIGAVOLT_HAVOC, @@ -305,6 +327,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(30, 26, 7), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_ElectricTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_MAGNET, //.berry = ITEM_WACAN_BERRY, //.gem = ITEM_ELECTRIC_GEM, @@ -316,7 +340,7 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = }, [TYPE_PSYCHIC] = { - .name = HANDLE_EXPANDED_TYPE_NAME("Psychc", "Psychic"), + .name = _("Psychic"), .generic = _("a PSYCHIC move"), .palette = 14, .zMove = MOVE_SHATTERED_PSYCHE, @@ -324,6 +348,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(31, 14, 15), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_PsychicTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_TWISTED_SPOON, //.berry = ITEM_PAYAPA_BERRY, //.gem = ITEM_PSYCHIC_GEM, @@ -343,6 +369,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(14, 26, 25), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_IceTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_NEVER_MELT_ICE, //.berry = ITEM_YACHE_BERRY, //.gem = ITEM_ICE_GEM, @@ -362,6 +390,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(10, 18, 27), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_DragonTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_DRAGON_FANG, //.berry = ITEM_HABAN_BERRY, //.gem = ITEM_DRAGON_GEM, @@ -381,6 +411,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(6, 5, 8), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_DarkTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_BLACK_GLASSES, //.berry = ITEM_COLBUR_BERRY, //.gem = ITEM_DARK_GEM, @@ -400,6 +432,8 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = .teraTypeRGBValue = RGB(31, 15, 21), .damageCategory = DAMAGE_CATEGORY_SPECIAL, .paletteTMHM = gItemIconPalette_FairyTMHM, + .useSecondTypeIconPalette = TRUE, + .isSpecialCaseType = FALSE, //.enhanceItem = ITEM_FAIRY_FEATHER, //.berry = ITEM_ROSELI_BERRY, //.gem = ITEM_FAIRY_GEM, @@ -411,13 +445,15 @@ const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] = }, [TYPE_STELLAR] = { - .name = HANDLE_EXPANDED_TYPE_NAME("Stellr", "Stellar"), + .name = _("Stellar"), .generic = _("a STELLAR move"), .palette = 15, .zMove = MOVE_BREAKNECK_BLITZ, .maxMove = MOVE_MAX_STRIKE, .teraTypeRGBValue = RGB(10, 18, 27), .paletteTMHM = gItemIconPalette_NormalTMHM, // failsafe + .useSecondTypeIconPalette = FALSE, + .isSpecialCaseType = TRUE, // .teraShard = ITEM_STELLAR_TERA_SHARD, }, }; diff --git a/src/debug.c b/src/debug.c index f4b6f68840..a3978fbd40 100644 --- a/src/debug.c +++ b/src/debug.c @@ -68,7 +68,6 @@ #include "constants/weather.h" #include "save.h" -#if DEBUG_OVERWORLD_MENU == TRUE // ******************************* enum DebugMenu { @@ -649,7 +648,7 @@ static const u8 sDebugText_Give_BattlePoints[] = _("Max Battle Points"); static const u8 sDebugText_Give_DaycareEgg[] = _("Daycare Egg"); // 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_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}"); // Berry Function Menu @@ -5129,5 +5128,3 @@ static void DebugAction_Util_CheckEWRAMCounters(u8 taskId) { Debug_DestroyMenu_Full_Script(taskId, Debug_EventScript_EWRAMCounters); } - -#endif //DEBUG_OVERWORLD_MENU == TRUE diff --git a/src/ev_caps.c b/src/ev_caps.c new file mode 100644 index 0000000000..8eb3531ca4 --- /dev/null +++ b/src/ev_caps.c @@ -0,0 +1,41 @@ +#include "global.h" +#include "battle.h" +#include "event_data.h" +#include "ev_caps.h" +#include "pokemon.h" + +u32 GetCurrentEVCap(void) +{ + + static const u16 sEvCapFlagMap[][2] = { + // Define EV caps for each milestone + {FLAG_BADGE01_GET, 30}, + {FLAG_BADGE02_GET, 90}, + {FLAG_BADGE03_GET, 150}, + {FLAG_BADGE04_GET, 210}, + {FLAG_BADGE05_GET, 270}, + {FLAG_BADGE06_GET, 330}, + {FLAG_BADGE07_GET, 390}, + {FLAG_BADGE08_GET, 450}, + {FLAG_IS_CHAMPION, MAX_TOTAL_EVS}, + }; + + if (B_EV_CAP_TYPE == EV_CAP_FLAG_LIST) + { + for (u32 evCap = 0; evCap < ARRAY_COUNT(sEvCapFlagMap); evCap++) + { + if (!FlagGet(sEvCapFlagMap[evCap][0])) + return sEvCapFlagMap[evCap][1]; + } + } + else if (B_EV_CAP_TYPE == EV_CAP_VARIABLE) + { + return VarGet(B_EV_CAP_VARIABLE); + } + else if (B_EV_CAP_TYPE == EV_CAP_NO_GAIN) + { + return 0; + } + + return MAX_TOTAL_EVS; +} diff --git a/src/event_object_movement.c b/src/event_object_movement.c index bba833f888..9052a60f32 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1571,7 +1571,7 @@ static s16 ReallocSpriteTiles(struct Sprite *sprite, u32 byteSize) { i = -1; } - + sprite->invisible = wasVisible; return i; } @@ -1588,7 +1588,7 @@ u16 LoadSheetGraphicsInfo(const struct ObjectEventGraphicsInfo *info, u16 uuid, bool32 oldInvisible; if (tag == TAG_NONE) tag = COMP_OW_TILE_TAG_BASE + uuid; - + if (sprite) { oldInvisible = sprite->invisible; @@ -1625,7 +1625,7 @@ u16 LoadSheetGraphicsInfo(const struct ObjectEventGraphicsInfo *info, u16 uuid, { FieldEffectFreeTilesIfUnused(oldTiles); } - + if (sprite) { sprite->sheetTileStart = tileStart; @@ -1644,7 +1644,7 @@ u16 LoadSheetGraphicsInfo(const struct ObjectEventGraphicsInfo *info, u16 uuid, { sprite->oam.tileNum = sprite->sheetTileStart; sprite->usingSheet = FALSE; - + } else if (sprite && !sprite->sheetTileStart && sprite->oam.size != info->oam->size) { @@ -2003,7 +2003,7 @@ static u8 LoadDynamicFollowerPalette(u16 species, u8 form, bool32 shiny) spritePalette.data = gSpeciesInfo[species].overworldShinyPalette; else spritePalette.data = gSpeciesInfo[species].overworldPalette; - + // Check if pal data must be decompressed if (IsLZ77Data(spritePalette.data, PLTT_SIZE_4BPP, PLTT_SIZE_4BPP)) { @@ -9785,30 +9785,30 @@ static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *objEvent, st static void DoTracksGroundEffect_SlitherTracks(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a) { - // Specifies which bike track shape to show next. - // For example, when the bike turns from up to right, it will show - // a track that curves to the right. - // Each 4-byte row corresponds to the initial direction of the bike, and - // each byte in that row is for the next direction of the bike in the order - // of down, up, left, right. - static const u8 slitherTracks_Transitions[4][4] = { - {1, 2, 7, 8}, - {1, 2, 6, 5}, - {5, 8, 3, 4}, - {6, 7, 3, 4}, - }; + // Specifies which bike track shape to show next. + // For example, when the bike turns from up to right, it will show + // a track that curves to the right. + // Each 4-byte row corresponds to the initial direction of the bike, and + // each byte in that row is for the next direction of the bike in the order + // of down, up, left, right. + static const u8 slitherTracks_Transitions[4][4] = { + {1, 2, 7, 8}, + {1, 2, 6, 5}, + {5, 8, 3, 4}, + {6, 7, 3, 4}, + }; - if (objEvent->currentCoords.x != objEvent->previousCoords.x || objEvent->currentCoords.y != objEvent->previousCoords.y) - { - gFieldEffectArguments[0] = objEvent->previousCoords.x; - gFieldEffectArguments[1] = objEvent->previousCoords.y; - gFieldEffectArguments[2] = 149; - gFieldEffectArguments[3] = 2; - gFieldEffectArguments[4] = - slitherTracks_Transitions[objEvent->previousMovementDirection][objEvent->facingDirection - 5]; + if (objEvent->currentCoords.x != objEvent->previousCoords.x || objEvent->currentCoords.y != objEvent->previousCoords.y) + { + gFieldEffectArguments[0] = objEvent->previousCoords.x; + gFieldEffectArguments[1] = objEvent->previousCoords.y; + gFieldEffectArguments[2] = 149; + gFieldEffectArguments[3] = 2; + gFieldEffectArguments[4] = + slitherTracks_Transitions[objEvent->previousMovementDirection][objEvent->facingDirection - 5]; gFieldEffectArguments[5] = objEvent->previousMetatileBehavior; - FieldEffectStart(FLDEFF_TRACKS_SLITHER); - } + FieldEffectStart(FLDEFF_TRACKS_SLITHER); + } } void GroundEffect_Ripple(struct ObjectEvent *objEvent, struct Sprite *sprite) diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 42062f08c7..01914a8169 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -10,6 +10,7 @@ #include "event_scripts.h" #include "fieldmap.h" #include "field_control_avatar.h" +#include "field_message_box.h" #include "field_player_avatar.h" #include "field_poison.h" #include "field_screen_effect.h" @@ -34,6 +35,7 @@ #include "constants/event_objects.h" #include "constants/field_poison.h" #include "constants/map_types.h" +#include "constants/metatile_behaviors.h" #include "constants/songs.h" #include "constants/trainer_hill.h" @@ -73,6 +75,11 @@ static void UpdateFollowerStepCounter(void); #if OW_POISON_DAMAGE < GEN_5 static bool8 UpdatePoisonStepCounter(void); #endif // OW_POISON_DAMAGE +static bool32 TrySetUpWalkIntoSignpostScript(struct MapPosition * position, u32 metatileBehavior, u32 playerDirection); +static void SetMsgSignPostAndVarFacing(u32 playerDirection); +static void SetUpWalkIntoSignScript(const u8 *script, u32 playerDirection); +static u32 GetFacingSignpostType(u16 metatileBehvaior, u32 direction); +static const u8 *GetSignpostScriptAtMapPosition(struct MapPosition * position); void FieldClearPlayerInput(struct FieldInput *input) { @@ -135,13 +142,14 @@ void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys) else if (heldKeys & DPAD_RIGHT) input->dpadDirection = DIR_EAST; -#if DEBUG_OVERWORLD_MENU == TRUE && DEBUG_OVERWORLD_IN_MENU == FALSE - if ((heldKeys & DEBUG_OVERWORLD_HELD_KEYS) && input->DEBUG_OVERWORLD_TRIGGER_EVENT) + if(DEBUG_OVERWORLD_MENU && !DEBUG_OVERWORLD_IN_MENU) { - input->input_field_1_2 = TRUE; - input->DEBUG_OVERWORLD_TRIGGER_EVENT = FALSE; + if ((heldKeys & DEBUG_OVERWORLD_HELD_KEYS) && input->DEBUG_OVERWORLD_TRIGGER_EVENT) + { + input->input_field_1_2 = TRUE; + input->DEBUG_OVERWORLD_TRIGGER_EVENT = FALSE; + } } -#endif } int ProcessPlayerFieldInput(struct FieldInput *input) @@ -153,6 +161,7 @@ int ProcessPlayerFieldInput(struct FieldInput *input) gSpecialVar_LastTalked = 0; gSelectedObjectEvent = 0; + gMsgIsSignPost = FALSE; playerDirection = GetPlayerFacingDirection(); GetPlayerPosition(&position); metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); @@ -172,6 +181,17 @@ int ProcessPlayerFieldInput(struct FieldInput *input) if (TryStartStepBasedScript(&position, metatileBehavior, playerDirection) == TRUE) return TRUE; } + + if ((input->checkStandardWildEncounter) && ((input->dpadDirection == 0) || input->dpadDirection == playerDirection)) + { + GetInFrontOfPlayerPosition(&position); + metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); + if (TrySetUpWalkIntoSignpostScript(&position, metatileBehavior, playerDirection) == TRUE) + return TRUE; + GetPlayerPosition(&position); + metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); + } + if (input->checkStandardWildEncounter && CheckStandardWildEncounter(metatileBehavior) == TRUE) return TRUE; if (input->heldDirection && input->dpadDirection == playerDirection) @@ -182,6 +202,10 @@ int ProcessPlayerFieldInput(struct FieldInput *input) GetInFrontOfPlayerPosition(&position); metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); + + if (input->heldDirection && (input->dpadDirection == playerDirection) && (TrySetUpWalkIntoSignpostScript(&position, metatileBehavior, playerDirection) == TRUE)) + return TRUE; + if (input->pressedAButton && TryStartInteractionScript(&position, metatileBehavior, playerDirection) == TRUE) return TRUE; @@ -201,15 +225,13 @@ int ProcessPlayerFieldInput(struct FieldInput *input) if (input->pressedSelectButton && UseRegisteredKeyItemOnField() == TRUE) return TRUE; -#if DEBUG_OVERWORLD_MENU == TRUE && DEBUG_OVERWORLD_IN_MENU == FALSE - if (input->input_field_1_2) + if(input->input_field_1_2 && DEBUG_OVERWORLD_MENU && !DEBUG_OVERWORLD_IN_MENU) { PlaySE(SE_WIN_OPEN); FreezeObjectEvents(); Debug_ShowMainMenu(); return TRUE; } -#endif return FALSE; } @@ -376,6 +398,9 @@ static const u8 *GetInteractedBackgroundEventScript(struct MapPosition *position if (bgEvent->bgUnion.script == NULL) return EventScript_TestSignpostMsg; + if (GetFacingSignpostType(metatileBehavior, direction) != NOT_SIGNPOST) + SetMsgSignPostAndVarFacing(direction); + switch (bgEvent->kind) { case BG_EVENT_PLAYER_FACING_ANY: @@ -1085,3 +1110,113 @@ int SetCableClubWarp(void) SetupWarp(&gMapHeader, GetWarpEventAtMapPosition(&gMapHeader, &position), &position); return 0; } + +static bool32 TrySetUpWalkIntoSignpostScript(struct MapPosition *position, u32 metatileBehavior, u32 playerDirection) +{ + const u8 *script; + + if ((JOY_HELD(DPAD_LEFT | DPAD_RIGHT)) || (playerDirection != DIR_NORTH)) + return FALSE; + + switch (GetFacingSignpostType(metatileBehavior, playerDirection)) + { + case MB_POKEMON_CENTER_SIGN: + SetUpWalkIntoSignScript(Common_EventScript_ShowPokemonCenterSign, playerDirection); + return TRUE; + case MB_POKEMART_SIGN: + SetUpWalkIntoSignScript(Common_EventScript_ShowPokemartSign, playerDirection); + return TRUE; + case MB_SIGNPOST: + script = GetSignpostScriptAtMapPosition(position); + if (script == NULL) + return FALSE; + SetUpWalkIntoSignScript(script, playerDirection); + return TRUE; + default: + return FALSE; + } +} + +static u32 GetFacingSignpostType(u16 metatileBehavior, u32 playerDirection) +{ + if (MetatileBehavior_IsPokemonCenterSign(metatileBehavior) == TRUE) + return MB_POKEMON_CENTER_SIGN; + if (MetatileBehavior_IsPokeMartSign(metatileBehavior) == TRUE) + return MB_POKEMART_SIGN; + if (MetatileBehavior_IsSignpost(metatileBehavior) == TRUE) + return MB_SIGNPOST; + + return NOT_SIGNPOST; +} + +static void SetMsgSignPostAndVarFacing(u32 playerDirection) +{ + gWalkAwayFromSignpostTimer = WALK_AWAY_SIGNPOST_FRAMES; + gMsgBoxIsCancelable = TRUE; + gMsgIsSignPost = TRUE; + gSpecialVar_Facing = playerDirection; +} + +static void SetUpWalkIntoSignScript(const u8 *script, u32 playerDirection) +{ + ScriptContext_SetupScript(script); + SetMsgSignPostAndVarFacing(playerDirection); +} + +static const u8 *GetSignpostScriptAtMapPosition(struct MapPosition *position) +{ + const struct BgEvent *event = GetBackgroundEventAtPosition(&gMapHeader, position->x - 7, position->y - 7, position->elevation); + if (event == NULL) + return NULL; + if (event->bgUnion.script != NULL) + return event->bgUnion.script; + return EventScript_TestSignpostMsg; +} + +static void Task_OpenStartMenu(u8 taskId) +{ + if (ArePlayerFieldControlsLocked()) + return; + + PlaySE(SE_WIN_OPEN); + ShowStartMenu(); + DestroyTask(taskId); +} + +bool32 IsDpadPushedToTurnOrMovePlayer(struct FieldInput *input) +{ + return (input->dpadDirection != 0 && GetPlayerFacingDirection() != input->dpadDirection); +} + +void CancelSignPostMessageBox(struct FieldInput *input) +{ + if (!ScriptContext_IsEnabled()) + return; + + if (gWalkAwayFromSignpostTimer) + { + gWalkAwayFromSignpostTimer--; + return; + } + + if (!gMsgBoxIsCancelable) + return; + + if (IsDpadPushedToTurnOrMovePlayer(input)) + { + ScriptContext_SetupScript(EventScript_CancelMessageBox); + LockPlayerFieldControls(); + return; + } + + if (!input->pressedStartButton) + return; + + ScriptContext_SetupScript(EventScript_CancelMessageBox); + LockPlayerFieldControls(); + + if (FuncIsActiveTask(Task_OpenStartMenu)) + return; + + CreateTask(Task_OpenStartMenu, 8); +} diff --git a/src/field_message_box.c b/src/field_message_box.c index b797e1d353..47c728f74d 100755 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -5,8 +5,11 @@ #include "text.h" #include "match_call.h" #include "field_message_box.h" +#include "text_window.h" +#include "script.h" static EWRAM_DATA u8 sFieldMessageBoxMode = 0; +EWRAM_DATA u8 gWalkAwayFromSignpostTimer = 0; static void ExpandStringAndStartDrawFieldMessage(const u8 *, bool32); static void StartDrawFieldMessage(void); @@ -29,7 +32,12 @@ static void Task_DrawFieldMessage(u8 taskId) switch (task->tState) { case 0: - LoadMessageBoxAndBorderGfx(); + if (gMsgIsSignPost) + LoadSignPostWindowFrameGfx(); + else + LoadMessageBoxAndBorderGfx(); + task->tState++; + break; task->tState++; break; case 1: diff --git a/src/field_specials.c b/src/field_specials.c index b44c8327aa..ed1a80f532 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -44,6 +44,7 @@ #include "strings.h" #include "task.h" #include "text.h" +#include "tilesets.h" #include "tv.h" #include "wallclock.h" #include "window.h" @@ -969,6 +970,20 @@ void FieldShowRegionMap(void) SetMainCallback2(CB2_FieldShowRegionMap); } +static bool32 IsBuildingPCTile(u32 tileId) +{ + return gMapHeader.mapLayout->primaryTileset == &gTileset_Building && (tileId == METATILE_Building_PC_On || tileId == METATILE_Building_PC_Off); +} + +static bool32 IsPlayerHousePCTile(u32 tileId) +{ + return gMapHeader.mapLayout->secondaryTileset == &gTileset_BrendansMaysHouse + && (tileId == METATILE_BrendansMaysHouse_BrendanPC_On + || tileId == METATILE_BrendansMaysHouse_BrendanPC_Off + || tileId == METATILE_BrendansMaysHouse_MayPC_On + || tileId == METATILE_BrendansMaysHouse_MayPC_Off); +} + static bool8 IsPlayerInFrontOfPC(void) { s16 x, y; @@ -977,12 +992,7 @@ static bool8 IsPlayerInFrontOfPC(void) GetXYCoordsOneStepInFrontOfPlayer(&x, &y); tileInFront = MapGridGetMetatileIdAt(x, y); - return (tileInFront == METATILE_BrendansMaysHouse_BrendanPC_On - || tileInFront == METATILE_BrendansMaysHouse_BrendanPC_Off - || tileInFront == METATILE_BrendansMaysHouse_MayPC_On - || tileInFront == METATILE_BrendansMaysHouse_MayPC_Off - || tileInFront == METATILE_Building_PC_On - || tileInFront == METATILE_Building_PC_Off); + return IsBuildingPCTile(tileInFront) || IsPlayerHousePCTile(tileInFront); } // Task data for Task_PCTurnOnEffect and Task_LotteryCornerComputerEffect @@ -4266,3 +4276,10 @@ void PreparePartyForSkyBattle(void) VarSet(B_VAR_SKY_BATTLE,participatingPokemonSlot); CompactPartySlots(); } + +void UseBlankMessageToCancelPokemonPic(void) +{ + u8 t = EOS; + AddTextPrinterParameterized(0, FONT_NORMAL, &t, 0, 1, 0, NULL); + ScriptMenu_HidePokemonPic(); +} diff --git a/src/field_weather.c b/src/field_weather.c index 3c9f642faf..7d3c4caf4f 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -5,6 +5,7 @@ #include "util.h" #include "event_object_movement.h" #include "field_weather.h" +#include "fieldmap.h" #include "main.h" #include "menu.h" #include "palette.h" @@ -44,7 +45,6 @@ struct WeatherCallbacks // This file's functions. 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, u32 blendColor); @@ -66,6 +66,52 @@ EWRAM_DATA static u8 ALIGNED(2) sFieldEffectPaletteColorMapTypes[32] = {0}; static const u8 *sPaletteColorMapTypes; +static const u8 sDarkenedContrastColorMaps[NUM_WEATHER_COLOR_MAPS][32] = +{ + {0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29}, + {0, 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10, 11, 12, 13, 14, 14, 15, 16, 17, 18, 19, 20, 21, 21, 22, 23, 24, 25, 26, 27}, + {0, 0, 1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 11, 12, 13, 13, 14, 15, 16, 17, 17, 18, 19, 20, 21, 21, 22, 23, 24, 25}, + {0, 1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 11, 11, 12, 13, 14, 14, 15, 16, 17, 17, 18, 19, 20, 20, 21, 22, 23, 24, 24, 25}, + {1, 2, 3, 3, 4, 5, 6, 6, 7, 8, 9, 9, 12, 13, 13, 14, 15, 15, 16, 17, 18, 18, 19, 20, 20, 21, 22, 23, 23, 24, 25, 25}, + {1, 2, 3, 4, 4, 5, 6, 7, 7, 8, 9, 10, 13, 14, 15, 15, 16, 17, 17, 18, 19, 19, 20, 20, 21, 22, 22, 23, 24, 24, 25, 26}, + {1, 2, 3, 4, 4, 5, 6, 7, 7, 8, 9, 10, 15, 15, 16, 16, 17, 18, 18, 19, 19, 20, 21, 21, 22, 22, 23, 24, 24, 25, 26, 26}, + {1, 2, 3, 4, 4, 5, 6, 7, 7, 8, 9, 10, 16, 16, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 23, 23, 24, 24, 25, 25, 26, 27}, + {1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27}, + {1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 19, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 24, 25, 25, 26, 26, 27, 27}, + {1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 20, 20, 21, 21, 22, 22, 22, 23, 23, 24, 24, 24, 25, 25, 26, 26, 26, 27, 27, 28}, + {1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 21, 22, 22, 22, 23, 23, 23, 24, 24, 24, 25, 25, 25, 26, 26, 27, 27, 27, 28, 28}, + {1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 23, 23, 23, 23, 24, 24, 24, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 28, 28, 28}, + {1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 28, 28, 28, 28, 29}, + {1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 25, 25, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 29, 29, 29}, + {1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29}, + {1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30}, + {1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, + {1, 2, 3, 4, 4, 5, 6, 7, 8, 8, 9, 10, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31} +}; + +static const u8 sContrastColorMaps[NUM_WEATHER_COLOR_MAPS][32] = +{ + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 11, 14, 15, 16, 17, 17, 18, 19, 20, 21, 22, 23, 24, 24, 25, 26, 27, 28, 29, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 16, 17, 18, 18, 19, 20, 21, 22, 22, 23, 24, 25, 26, 26, 27, 28, 29, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 16, 17, 18, 19, 19, 20, 21, 22, 22, 23, 24, 25, 25, 26, 27, 28, 28, 29, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 17, 18, 19, 20, 20, 21, 22, 22, 23, 24, 24, 25, 26, 26, 27, 28, 28, 29, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 19, 19, 20, 21, 21, 22, 22, 23, 24, 24, 25, 26, 26, 27, 27, 28, 29, 29, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 20, 20, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 27, 27, 28, 28, 29, 29, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 30, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 22, 23, 23, 24, 24, 24, 25, 25, 26, 26, 27, 27, 27, 28, 28, 29, 29, 30, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 23, 24, 24, 25, 25, 25, 26, 26, 26, 27, 27, 28, 28, 28, 29, 29, 29, 30, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 28, 28, 28, 29, 29, 29, 30, 30, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 26, 26, 26, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 27, 27, 27, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 31}, + {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31} +}; + // The drought weather effect uses a precalculated color lookup table. Presumably this // is because the underlying color shift calculation is slow. static const u16 sDroughtWeatherColors[][0x1000] = { @@ -158,7 +204,9 @@ void StartWeather(void) { u8 index = AllocSpritePalette(PALTAG_WEATHER); CpuCopy32(gFogPalette, &gPlttBufferUnfaded[OBJ_PLTT_ID(index)], PLTT_SIZE_4BPP); - BuildColorMaps(); + + sPaletteColorMapTypes = sBasePaletteColorMapTypes; + gWeatherPtr->contrastColorMapSpritePalIndex = index; gWeatherPtr->weatherPicSpritePalIndex = AllocSpritePalette(PALTAG_WEATHER_2); gWeatherPtr->rainSpriteCount = 0; @@ -265,83 +313,6 @@ static u8 None_Finish(void) return 0; } -// Builds two tables that contain color maps, used for directly transforming -// palette colors in weather effects. The colors maps are a spectrum of -// brightness + contrast mappings. By transitioning between the maps, weather -// effects like lightning are created. -// It's unclear why the two tables aren't declared as const arrays, since -// this function always builds the same two tables. -static void BuildColorMaps(void) -{ - u16 i; - u8 (*colorMaps)[32]; - u16 colorVal; - u16 curBrightness; - u16 brightnessDelta; - u16 colorMapIndex; - u16 baseBrightness; - s16 diff; - - sPaletteColorMapTypes = sBasePaletteColorMapTypes; - for (i = 0; i < 2; i++) - { - if (i == 0) - colorMaps = gWeatherPtr->darkenedContrastColorMaps; - else - colorMaps = gWeatherPtr->contrastColorMaps; - - for (colorVal = 0; colorVal < 32; colorVal++) - { - curBrightness = colorVal << 8; - if (i == 0) - brightnessDelta = (colorVal << 8) / 16; - else - brightnessDelta = 0; - - // First three color mappings are simple brightness modifiers which are - // progressively darker, according to brightnessDelta. - for (colorMapIndex = 0; colorMapIndex < 3; colorMapIndex++) - { - curBrightness -= brightnessDelta; - colorMaps[colorMapIndex][colorVal] = curBrightness >> 8; - } - - baseBrightness = curBrightness; - brightnessDelta = (0x1f00 - curBrightness) / (NUM_WEATHER_COLOR_MAPS - 3); - if (colorVal < 12) - { - // For shadows (color values < 12), the remaining color mappings are - // brightness modifiers, which are increased at a significantly lower rate - // than the midtones and highlights (color values >= 12). This creates a - // high contrast effect, used in the thunderstorm weather. - for (; colorMapIndex < NUM_WEATHER_COLOR_MAPS; colorMapIndex++) - { - curBrightness += brightnessDelta; - diff = curBrightness - baseBrightness; - if (diff > 0) - curBrightness -= diff / 2; - colorMaps[colorMapIndex][colorVal] = curBrightness >> 8; - if (colorMaps[colorMapIndex][colorVal] > 31) - colorMaps[colorMapIndex][colorVal] = 31; - } - } - else - { - // For midtones and highlights (color values >= 12), the remaining - // color mappings are simple brightness modifiers which are - // progressively brighter, hitting exactly 31 at the last mapping. - for (; colorMapIndex < NUM_WEATHER_COLOR_MAPS; colorMapIndex++) - { - curBrightness += brightnessDelta; - colorMaps[colorMapIndex][colorVal] = curBrightness >> 8; - if (colorMaps[colorMapIndex][colorVal] > 31) - colorMaps[colorMapIndex][colorVal] = 31; - } - } - } - } -} - // When the weather is changing, it gradually updates the palettes // towards the desired color map. static void UpdateWeatherColorMap(void) @@ -463,8 +434,8 @@ static void ApplyColorMap(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex) { u16 curPalIndex; u16 palOffset; - u8 *colorMap; - u16 i; + const u8 *colorMap; + u32 i; if (colorMapIndex > 0) { @@ -487,9 +458,9 @@ static void ApplyColorMap(u8 startPalIndex, u8 numPalettes, s8 colorMapIndex) u8 r, g, b; if (sPaletteColorMapTypes[curPalIndex] == COLOR_MAP_CONTRAST || curPalIndex - 16 == gWeatherPtr->contrastColorMapSpritePalIndex) - colorMap = gWeatherPtr->contrastColorMaps[colorMapIndex]; + colorMap = sContrastColorMaps[colorMapIndex]; else - colorMap = gWeatherPtr->darkenedContrastColorMaps[colorMapIndex]; + colorMap = sDarkenedContrastColorMaps[colorMapIndex]; for (i = 0; i < 16; i++) { @@ -544,7 +515,7 @@ static void ApplyColorMapWithBlend(u8 startPalIndex, u8 numPalettes, s8 colorMap { u16 palOffset; u16 curPalIndex; - u16 i; + u32 i; struct RGBColor color = *(struct RGBColor *)&blendColor; u8 rBlend = color.r; u8 gBlend = color.g; @@ -565,12 +536,12 @@ static void ApplyColorMapWithBlend(u8 startPalIndex, u8 numPalettes, s8 colorMap } else { - u8 *colorMap; + const u8 *colorMap; if (sPaletteColorMapTypes[curPalIndex] == COLOR_MAP_DARK_CONTRAST) - colorMap = gWeatherPtr->darkenedContrastColorMaps[colorMapIndex]; + colorMap = sDarkenedContrastColorMaps[colorMapIndex]; else - colorMap = gWeatherPtr->contrastColorMaps[colorMapIndex]; + colorMap = sContrastColorMaps[colorMapIndex]; for (i = 0; i < 16; i++) { diff --git a/src/fieldmap.c b/src/fieldmap.c index 30daae49ca..7c40c755c4 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -141,7 +141,7 @@ static void InitBackupMapLayoutConnections(struct MapHeader *mapHeader) for (i = 0; i < count; i++, connection++) { struct MapHeader const *cMap = GetMapHeaderFromConnection(connection); - u32 offset = connection->offset; + s32 offset = connection->offset; switch (connection->direction) { case CONNECTION_SOUTH: diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c index a28b6fee61..a5b2740458 100644 --- a/src/fldeff_sweetscent.c +++ b/src/fldeff_sweetscent.c @@ -1,4 +1,5 @@ #include "global.h" +#include "decompress.h" #include "event_data.h" #include "event_scripts.h" #include "field_effect.h" @@ -52,7 +53,7 @@ void StartSweetScentFieldEffect(void) u32 palettes = ~(1 << (gSprites[GetPlayerAvatarSpriteId()].oam.paletteNum + 16) | (1 << 13) | (1 << 14) | (1 << 15)); PlaySE(SE_M_SWEET_SCENT); - CpuFastCopy(gPlttBufferUnfaded, gPaletteDecompressionBuffer, PLTT_SIZE); + CpuFastCopy(gPlttBufferUnfaded, gDecompressionBuffer, PLTT_SIZE); CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_SIZE); BeginNormalPaletteFade(palettes, 4, 0, 8, RGB_RED); taskId = CreateTask(TrySweetScentEncounter, 0); @@ -91,7 +92,7 @@ static void FailSweetScentEncounter(u8 taskId) { if (!gPaletteFade.active) { - CpuFastCopy(gPaletteDecompressionBuffer, gPlttBufferUnfaded, PLTT_SIZE); + CpuFastCopy(gDecompressionBuffer, gPlttBufferUnfaded, PLTT_SIZE); SetWeatherPalStateIdle(); ScriptContext_SetupScript(EventScript_FailSweetScent); DestroyTask(taskId); diff --git a/src/follower_helper.c b/src/follower_helper.c index 24de61a3fd..02b39902eb 100644 --- a/src/follower_helper.c +++ b/src/follower_helper.c @@ -55,7 +55,7 @@ static const u8* const sFearTexts[] = {sCondMsg29, sCondMsg30, NULL}; static const u8 sCondMsg31[] = _("{STR_VAR_1} is taking shelter in the\ngrass from the rain."); static const u8 sCondMsg32[] = _("{STR_VAR_1} seems very cold."); static const u8 sCondMsg33[] = _("{STR_VAR_1} is staring at the sea."); -static const u8 sCondMsg34[] = _("Your pokemon is staring intently at\nthe sea!"); +static const u8 sCondMsg34[] = _("Your POKéMON is staring intently at\nthe sea!"); static const u8 sCondMsg35[] = _("{STR_VAR_1} is looking at the\nsurging sea."); static const u8* const sSeaTexts[] = {sCondMsg33, sCondMsg34, sCondMsg35, NULL}; static const u8 sCondMsg36[] = _("{STR_VAR_1} is listening to the\nsound of the waterfall."); diff --git a/src/fonts.c b/src/fonts.c index 6bd2d35e83..3f2c536985 100644 --- a/src/fonts.c +++ b/src/fonts.c @@ -149,7 +149,7 @@ ALIGNED(4) const u8 gFontNormalLatinGlyphWidths[] = { 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, 6, 3, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 6, 6, 9, 7, 6, 3, - 3, 3, 3, 3, 10, 8, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 10, 8, 3, 3, 7, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 6, 4, 8, 8, 8, 7, 8, 8, 4, 6, 6, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 3, 3, 3, 3, 3, 3, 6, diff --git a/src/frontier_util.c b/src/frontier_util.c index ca8c76a0fd..4424676644 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -49,6 +49,17 @@ struct FrontierBrainMon u16 moves[MAX_MON_MOVES]; }; +struct FrontierBrain +{ + u16 trainerId; + u8 objEventGfx; + u8 isFemale; + const u8 *lostTexts[2]; + const u8 *wonTexts[2]; + u16 battledBit[2]; + u8 streakAppearances[4]; +}; + // This file's functions. static void GetChallengeStatus(void); static void GetFrontierData(void); @@ -83,16 +94,158 @@ static void ShowPyramidResultsWindow(void); static void ShowLinkContestResultsWindow(void); static void CopyFrontierBrainText(bool8 playerWonText); -// const rom data -static const u8 sFrontierBrainStreakAppearances[NUM_FRONTIER_FACILITIES][4] = +// battledBit: Flags to change the conversation when the Frontier Brain is encountered for a battle +// First bit is has battled them before and not won yet, second bit is has battled them and won (obtained a Symbol) +const struct FrontierBrain gFrontierBrainInfo[NUM_FRONTIER_FACILITIES] = { - [FRONTIER_FACILITY_TOWER] = {35, 70, 35, 1}, - [FRONTIER_FACILITY_DOME] = { 4, 9, 5, 0}, - [FRONTIER_FACILITY_PALACE] = {21, 42, 21, 1}, - [FRONTIER_FACILITY_ARENA] = {28, 56, 28, 1}, - [FRONTIER_FACILITY_FACTORY] = {21, 42, 21, 1}, - [FRONTIER_FACILITY_PIKE] = {28, 140, 56, 1}, - [FRONTIER_FACILITY_PYRAMID] = {21, 70, 35, 0}, + [FRONTIER_FACILITY_TOWER] = + { + .trainerId = TRAINER_ANABEL, + .objEventGfx = OBJ_EVENT_GFX_ANABEL, + .isFemale = TRUE, + .lostTexts = { + COMPOUND_STRING("Okay, I understand…"), //Silver + COMPOUND_STRING("Thank you…") //Gold + }, + .wonTexts = { + COMPOUND_STRING("It's very disappointing…"), //Silver + COMPOUND_STRING("I'm terribly sorry…") //Gold + }, + .battledBit = {1 << 0, 1 << 1}, + .streakAppearances = {35, 70, 35, 1}, + }, + [FRONTIER_FACILITY_DOME] = + { + .trainerId = TRAINER_TUCKER, + .objEventGfx = OBJ_EVENT_GFX_TUCKER, + .isFemale = FALSE, + .lostTexts = { + COMPOUND_STRING( + "Grr…\n" + "What the…"), //Silver + COMPOUND_STRING( + "Ahahaha!\n" + "You're inspiring!") //Gold + }, + .wonTexts = { + COMPOUND_STRING( + "Ahahaha! Aren't you embarrassed?\n" + "Everyone's watching!"), //Silver + COMPOUND_STRING("My DOME ACE title isn't just for show!") //Gold + }, + .battledBit = {1 << 2, 1 << 3}, + .streakAppearances = {1, 2, 5, 0}, + }, + [FRONTIER_FACILITY_PALACE] = + { + .trainerId = TRAINER_SPENSER, + .objEventGfx = OBJ_EVENT_GFX_SPENSER, + .isFemale = FALSE, + .lostTexts = { + COMPOUND_STRING( + "Ah…\n" + "Now this is something else…"), //Silver + COMPOUND_STRING( + "Gwah!\n" + "Hahahaha!") //Gold + }, + .wonTexts = { + COMPOUND_STRING( + "Your POKéMON are wimpy because\n" + "you're wimpy as a TRAINER!"), //Silver + COMPOUND_STRING( + "Gwahahaha!\n" + "My brethren, we have nothing to fear!") //Gold + }, + .battledBit = {1 << 4, 1 << 5}, + .streakAppearances = {21, 42, 21, 1}, + }, + [FRONTIER_FACILITY_ARENA] = + { + .trainerId = TRAINER_GRETA, + .objEventGfx = OBJ_EVENT_GFX_GRETA, + .isFemale = TRUE, + .lostTexts = { + COMPOUND_STRING( + "No way!\n" + "Good job!"), //Silver + COMPOUND_STRING( + "Huh?\n" + "Are you serious?!") //Gold + }, + .wonTexts = { + COMPOUND_STRING( + "Oh, come on!\n" + "You have to try harder than that!"), //Silver + COMPOUND_STRING( + "Heheh!\n" + "What did you expect?") //Gold + }, + .battledBit = {1 << 6, 1 << 7}, + .streakAppearances = {28, 56, 28, 1}, + }, + [FRONTIER_FACILITY_FACTORY] = + { + .trainerId = TRAINER_NOLAND, + .objEventGfx = OBJ_EVENT_GFX_NOLAND, + .isFemale = FALSE, + .lostTexts = { + COMPOUND_STRING( + "Good job!\n" + "You know what you're doing!"), //Silver + COMPOUND_STRING("What happened here?") //Gold + }, + .wonTexts = { + COMPOUND_STRING( + "Way to work!\n" + "That was a good lesson, eh?"), //Silver + COMPOUND_STRING( + "Hey, hey, hey!\n" + "You're finished already?") //Gold + }, + .battledBit = {1 << 8, 1 << 9}, + .streakAppearances = {21, 42, 21, 1}, + }, + [FRONTIER_FACILITY_PIKE] = + { + .trainerId = TRAINER_LUCY, + .objEventGfx = OBJ_EVENT_GFX_LUCY, + .isFemale = TRUE, + .lostTexts = { + COMPOUND_STRING("Urk…"), //Silver + COMPOUND_STRING("Darn!") //Gold + }, + .wonTexts = { + COMPOUND_STRING("Humph…"), //Silver + COMPOUND_STRING("Hah!") //Gold + }, + .battledBit = {1 << 10, 1 << 11}, + .streakAppearances = {28, 140, 56, 1}, + }, + [FRONTIER_FACILITY_PYRAMID] = + { + .trainerId = TRAINER_BRANDON, + .objEventGfx = OBJ_EVENT_GFX_BRANDON, + .isFemale = FALSE, + .lostTexts = { + COMPOUND_STRING( + "That's it! You've done great!\n" + "You've worked hard for this!"), //Silver + COMPOUND_STRING( + "That's it! You've done it!\n" + "You kept working for this!") //Gold + }, + .wonTexts = { + COMPOUND_STRING( + "Hey! What's wrong with you!\n" + "Let's see some effort! Get up!"), //Silver + COMPOUND_STRING( + "Hey! Don't you give up now!\n" + "Get up! Don't lose faith in yourself!") //Gold + }, + .battledBit = {1 << 12, 1 << 13}, + .streakAppearances = {21, 70, 35, 0}, + }, }; static const struct FrontierBrainMon sFrontierBrainsMons[][2][FRONTIER_PARTY_SIZE] = @@ -537,20 +690,6 @@ static const u8 sBattlePointAwards[NUM_FRONTIER_FACILITIES][FRONTIER_MODE_COUNT] }, }; - -// Flags to change the conversation when the Frontier Brain is encountered for a battle -// First bit is has battled them before and not won yet, second bit is has battled them and won (obtained a Symbol) -static const u16 sBattledBrainBitFlags[NUM_FRONTIER_FACILITIES][2] = -{ - [FRONTIER_FACILITY_TOWER] = {1 << 0, 1 << 1}, - [FRONTIER_FACILITY_DOME] = {1 << 2, 1 << 3}, - [FRONTIER_FACILITY_PALACE] = {1 << 4, 1 << 5}, - [FRONTIER_FACILITY_ARENA] = {1 << 6, 1 << 7}, - [FRONTIER_FACILITY_FACTORY] = {1 << 8, 1 << 9}, - [FRONTIER_FACILITY_PIKE] = {1 << 10, 1 << 11}, - [FRONTIER_FACILITY_PYRAMID] = {1 << 12, 1 << 13}, -}; - static void (* const sFrontierUtilFuncs[])(void) = { [FRONTIER_UTIL_FUNC_GET_STATUS] = GetChallengeStatus, @@ -611,18 +750,6 @@ static const struct WindowTemplate sRankingHallRecordsWindowTemplate = .baseBlock = 1 }; -// Second field - whether the character is female. -static const u8 sFrontierBrainObjEventGfx[NUM_FRONTIER_FACILITIES][2] = -{ - [FRONTIER_FACILITY_TOWER] = {OBJ_EVENT_GFX_ANABEL, TRUE}, - [FRONTIER_FACILITY_DOME] = {OBJ_EVENT_GFX_TUCKER, FALSE}, - [FRONTIER_FACILITY_PALACE] = {OBJ_EVENT_GFX_SPENSER, FALSE}, - [FRONTIER_FACILITY_ARENA] = {OBJ_EVENT_GFX_GRETA, TRUE}, - [FRONTIER_FACILITY_FACTORY] = {OBJ_EVENT_GFX_NOLAND, FALSE}, - [FRONTIER_FACILITY_PIKE] = {OBJ_EVENT_GFX_LUCY, TRUE}, - [FRONTIER_FACILITY_PYRAMID] = {OBJ_EVENT_GFX_BRANDON, FALSE}, -}; - static const u8 *const sRecordsWindowChallengeTexts[][2] = { [RANKING_HALL_TOWER_SINGLES] = {gText_BattleTower2, gText_FacilitySingle}, @@ -657,73 +784,6 @@ static const u8 *const sHallFacilityToRecordsText[] = [RANKING_HALL_TOWER_LINK] = gText_FrontierFacilityWinStreak, }; -static const u16 sFrontierBrainTrainerIds[NUM_FRONTIER_FACILITIES] = -{ - [FRONTIER_FACILITY_TOWER] = TRAINER_ANABEL, - [FRONTIER_FACILITY_DOME] = TRAINER_TUCKER, - [FRONTIER_FACILITY_PALACE] = TRAINER_SPENSER, - [FRONTIER_FACILITY_ARENA] = TRAINER_GRETA, - [FRONTIER_FACILITY_FACTORY] = TRAINER_NOLAND, - [FRONTIER_FACILITY_PIKE] = TRAINER_LUCY, - [FRONTIER_FACILITY_PYRAMID] = TRAINER_BRANDON, -}; - -static const u8 *const sFrontierBrainPlayerLostSilverTexts[NUM_FRONTIER_FACILITIES] = -{ - [FRONTIER_FACILITY_TOWER] = gText_AnabelWonSilver, - [FRONTIER_FACILITY_DOME] = gText_TuckerWonSilver, - [FRONTIER_FACILITY_PALACE] = gText_SpenserWonSilver, - [FRONTIER_FACILITY_ARENA] = gText_GretaWonSilver, - [FRONTIER_FACILITY_FACTORY] = gText_NolandWonSilver, - [FRONTIER_FACILITY_PIKE] = gText_LucyWonSilver, - [FRONTIER_FACILITY_PYRAMID] = gText_BrandonWonSilver, -}; - -static const u8 *const sFrontierBrainPlayerWonSilverTexts[NUM_FRONTIER_FACILITIES] = -{ - [FRONTIER_FACILITY_TOWER] = gText_AnabelDefeatSilver, - [FRONTIER_FACILITY_DOME] = gText_TuckerDefeatSilver, - [FRONTIER_FACILITY_PALACE] = gText_SpenserDefeatSilver, - [FRONTIER_FACILITY_ARENA] = gText_GretaDefeatSilver, - [FRONTIER_FACILITY_FACTORY] = gText_NolandDefeatSilver, - [FRONTIER_FACILITY_PIKE] = gText_LucyDefeatSilver, - [FRONTIER_FACILITY_PYRAMID] = gText_BrandonDefeatSilver, -}; - -static const u8 *const sFrontierBrainPlayerLostGoldTexts[NUM_FRONTIER_FACILITIES] = -{ - [FRONTIER_FACILITY_TOWER] = gText_AnabelWonGold, - [FRONTIER_FACILITY_DOME] = gText_TuckerWonGold, - [FRONTIER_FACILITY_PALACE] = gText_SpenserWonGold, - [FRONTIER_FACILITY_ARENA] = gText_GretaWonGold, - [FRONTIER_FACILITY_FACTORY] = gText_NolandWonGold, - [FRONTIER_FACILITY_PIKE] = gText_LucyWonGold, - [FRONTIER_FACILITY_PYRAMID] = gText_BrandonWonGold, -}; - -static const u8 *const sFrontierBrainPlayerWonGoldTexts[NUM_FRONTIER_FACILITIES] = -{ - [FRONTIER_FACILITY_TOWER] = gText_AnabelDefeatGold, - [FRONTIER_FACILITY_DOME] = gText_TuckerDefeatGold, - [FRONTIER_FACILITY_PALACE] = gText_SpenserDefeatGold, - [FRONTIER_FACILITY_ARENA] = gText_GretaDefeatGold, - [FRONTIER_FACILITY_FACTORY] = gText_NolandDefeatGold, - [FRONTIER_FACILITY_PIKE] = gText_LucyDefeatGold, - [FRONTIER_FACILITY_PYRAMID] = gText_BrandonDefeatGold, -}; - -static const u8 *const *const sFrontierBrainPlayerLostTexts[] = -{ - sFrontierBrainPlayerLostSilverTexts, - sFrontierBrainPlayerLostGoldTexts, -}; - -static const u8 *const *const sFrontierBrainPlayerWonTexts[] = -{ - sFrontierBrainPlayerWonSilverTexts, - sFrontierBrainPlayerWonGoldTexts, -}; - // code void CallFrontierUtilFunc(void) { @@ -785,7 +845,7 @@ static void GetFrontierData(void) gSpecialVar_Result = gSaveBlock2Ptr->frontier.disableRecordBattle; break; case FRONTIER_DATA_HEARD_BRAIN_SPEECH: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.battledBrainFlags & sBattledBrainBitFlags[facility][hasSymbol]; + gSpecialVar_Result = gSaveBlock2Ptr->frontier.battledBrainFlags & gFrontierBrainInfo[facility].battledBit[hasSymbol]; break; } } @@ -820,7 +880,7 @@ static void SetFrontierData(void) gSaveBlock2Ptr->frontier.disableRecordBattle = gSpecialVar_0x8006; break; case FRONTIER_DATA_HEARD_BRAIN_SPEECH: - gSaveBlock2Ptr->frontier.battledBrainFlags |= sBattledBrainBitFlags[facility][hasSymbol]; + gSaveBlock2Ptr->frontier.battledBrainFlags |= gFrontierBrainInfo[facility].battledBit[hasSymbol]; break; } } @@ -1600,7 +1660,7 @@ u8 GetFrontierBrainStatus(void) s32 facility = VarGet(VAR_FRONTIER_FACILITY); s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); u16 winStreakNoModifier = GetCurrentFacilityWinStreak(); - s32 winStreak = winStreakNoModifier + sFrontierBrainStreakAppearances[facility][3]; + s32 winStreak = winStreakNoModifier + gFrontierBrainInfo[facility].streakAppearances[3]; s32 symbolsCount; if (battleMode != FRONTIER_MODE_SINGLES) @@ -1612,20 +1672,20 @@ u8 GetFrontierBrainStatus(void) // Missing a symbol case 0: case 1: - if (winStreak == sFrontierBrainStreakAppearances[facility][symbolsCount]) + if (winStreak == gFrontierBrainInfo[facility].streakAppearances[symbolsCount]) status = symbolsCount + 1; // FRONTIER_BRAIN_SILVER and FRONTIER_BRAIN_GOLD break; // Already received both symbols case 2: default: // Silver streak is reached - if (winStreak == sFrontierBrainStreakAppearances[facility][0]) + if (winStreak == gFrontierBrainInfo[facility].streakAppearances[0]) status = FRONTIER_BRAIN_STREAK; // Gold streak is reached - else if (winStreak == sFrontierBrainStreakAppearances[facility][1]) + else if (winStreak == gFrontierBrainInfo[facility].streakAppearances[1]) status = FRONTIER_BRAIN_STREAK_LONG; // Some increment of the gold streak is reached - else if (winStreak > sFrontierBrainStreakAppearances[facility][1] && (winStreak - sFrontierBrainStreakAppearances[facility][1]) % sFrontierBrainStreakAppearances[facility][2] == 0) + else if (winStreak > gFrontierBrainInfo[facility].streakAppearances[1] && (winStreak - gFrontierBrainInfo[facility].streakAppearances[1]) % gFrontierBrainInfo[facility].streakAppearances[2] == 0) status = FRONTIER_BRAIN_STREAK_LONG; break; } @@ -2396,7 +2456,7 @@ u8 GetFrontierBrainTrainerPicIndex(void) else facility = VarGet(VAR_FRONTIER_FACILITY); - return GetTrainerPicFromId(sFrontierBrainTrainerIds[facility]); + return GetTrainerPicFromId(gFrontierBrainInfo[facility].trainerId); } u8 GetFrontierBrainTrainerClass(void) @@ -2408,7 +2468,7 @@ u8 GetFrontierBrainTrainerClass(void) else facility = VarGet(VAR_FRONTIER_FACILITY); - return GetTrainerClassFromId(sFrontierBrainTrainerIds[facility]); + return GetTrainerClassFromId(gFrontierBrainInfo[facility].trainerId); } void CopyFrontierBrainTrainerName(u8 *dst) @@ -2422,7 +2482,7 @@ void CopyFrontierBrainTrainerName(u8 *dst) else facility = VarGet(VAR_FRONTIER_FACILITY); - trainerName = GetTrainerNameFromId(sFrontierBrainTrainerIds[facility]); + trainerName = GetTrainerNameFromId(gFrontierBrainInfo[facility].trainerId); for (i = 0; i < PLAYER_NAME_LENGTH; i++) dst[i] = trainerName[i]; @@ -2432,13 +2492,13 @@ void CopyFrontierBrainTrainerName(u8 *dst) bool8 IsFrontierBrainFemale(void) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); - return sFrontierBrainObjEventGfx[facility][1]; + return gFrontierBrainInfo[facility].isFemale; } void SetFrontierBrainObjEventGfx_2(void) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); - VarSet(VAR_OBJ_GFX_ID_0, sFrontierBrainObjEventGfx[facility][0]); + VarSet(VAR_OBJ_GFX_ID_0, gFrontierBrainInfo[facility].objEventGfx); } #define FRONTIER_BRAIN_OTID 61226 @@ -2505,7 +2565,7 @@ u16 GetFrontierBrainMonSpecies(u8 monId) void SetFrontierBrainObjEventGfx(u8 facility) { gTrainerBattleOpponent_A = TRAINER_FRONTIER_BRAIN; - VarSet(VAR_OBJ_GFX_ID_0, sFrontierBrainObjEventGfx[facility][0]); + VarSet(VAR_OBJ_GFX_ID_0, gFrontierBrainInfo[facility].objEventGfx); } u16 GetFrontierBrainMonMove(u8 monId, u8 moveSlotId) @@ -2540,12 +2600,12 @@ s32 GetFronterBrainSymbol(void) if (symbol == 2) { u16 winStreak = GetCurrentFacilityWinStreak(); - if (winStreak + sFrontierBrainStreakAppearances[facility][3] == sFrontierBrainStreakAppearances[facility][0]) + if (winStreak + gFrontierBrainInfo[facility].streakAppearances[3] == gFrontierBrainInfo[facility].streakAppearances[0]) symbol = 0; - else if (winStreak + sFrontierBrainStreakAppearances[facility][3] == sFrontierBrainStreakAppearances[facility][1]) + else if (winStreak + gFrontierBrainInfo[facility].streakAppearances[3] == gFrontierBrainInfo[facility].streakAppearances[1]) symbol = 1; - else if (winStreak + sFrontierBrainStreakAppearances[facility][3] > sFrontierBrainStreakAppearances[facility][1] - && (winStreak + sFrontierBrainStreakAppearances[facility][3] - sFrontierBrainStreakAppearances[facility][1]) % sFrontierBrainStreakAppearances[facility][2] == 0) + else if (winStreak + gFrontierBrainInfo[facility].streakAppearances[3] > gFrontierBrainInfo[facility].streakAppearances[1] + && (winStreak + gFrontierBrainInfo[facility].streakAppearances[3] - gFrontierBrainInfo[facility].streakAppearances[1]) % gFrontierBrainInfo[facility].streakAppearances[2] == 0) symbol = 1; } return symbol; @@ -2571,10 +2631,21 @@ static void CopyFrontierBrainText(bool8 playerWonText) switch (playerWonText) { case FALSE: - StringCopy(gStringVar4, sFrontierBrainPlayerLostTexts[symbol][facility]); + StringCopy(gStringVar4, gFrontierBrainInfo[facility].wonTexts[symbol]); break; case TRUE: - StringCopy(gStringVar4, sFrontierBrainPlayerWonTexts[symbol][facility]); + StringCopy(gStringVar4, gFrontierBrainInfo[facility].lostTexts[symbol]); break; } } + +void ClearEnemyPartyAfterChallenge() +{ + // We zero out the Enemy's party here when the player either wins or loses the challenge since we + // can't do it the usual way in FreeResetData_ReturnToOvOrDoEvolutions() in battle_main.c due to the + // way facilities like the Battle Factory and the Slateport Battle Tent work + if (gSpecialVar_0x8005 == 0) + { + ZeroEnemyPartyMons(); + } +} diff --git a/src/graphics.c b/src/graphics.c index c35cec3467..231aec4158 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -81,6 +81,9 @@ const u32 gBattleAnimSpritePal_AvalancheRocks[] = INCBIN_U32("graphics/battle_an const u32 gBattleAnimSpriteGfx_NewPokeball[] = INCBIN_U32("graphics/battle_anims/sprites/baton_pass_ball.4bpp.lz"); const u32 gBattleAnimSpritePal_NewPokeball[] = INCBIN_U32("graphics/battle_anims/sprites/baton_pass_ball.gbapal.lz"); +const u32 gBattleAnimSpriteGfx_Beam[] = INCBIN_U32("graphics/battle_anims/sprites/beam.4bpp.lz"); +const u32 gBattleAnimSpritePal_Beam[] = INCBIN_U32("graphics/battle_anims/sprites/beam.gbapal.lz"); + const u32 gBattleAnimSpriteGfx_BerryEaten[] = INCBIN_U32("graphics/battle_anims/sprites/berry_eaten.4bpp.lz"); const u32 gBattleAnimSpritePal_BerryEaten[] = INCBIN_U32("graphics/battle_anims/sprites/berry_eaten.gbapal.lz"); @@ -93,6 +96,9 @@ const u32 gBattleAnimSpritePal_BigRock[] = INCBIN_U32("graphics/battle_anims/spr const u32 gBattleAnimSpriteGfx_BlacephalonHead[] = INCBIN_U32("graphics/battle_anims/sprites/blacephalon_head.4bpp.lz"); const u32 gBattleAnimSpritePal_BlacephalonHead[] = INCBIN_U32("graphics/battle_anims/sprites/blacephalon_head.gbapal.lz"); +const u32 gBattleAnimSpriteGfx_BloodMoon[] = INCBIN_U32("graphics/battle_anims/sprites/blood_moon.4bpp.lz"); +const u32 gBattleAnimSpritePal_BloodMoon[] = INCBIN_U32("graphics/battle_anims/sprites/blood_moon.gbapal.lz"); + const u32 gBattleAnimSpritePal_BlueFlare[] = INCBIN_U32("graphics/battle_anims/sprites/blue_flare.gbapal.lz"); const u32 gBattleAnimSpriteGfx_Branch[] = INCBIN_U32("graphics/battle_anims/sprites/branch.4bpp.lz"); @@ -233,12 +239,18 @@ const u32 gBattleAnimSpritePal_PoisonColumn[] = INCBIN_U32("graphics/battle_anim const u32 gBattleAnimSpriteGfx_PowerTrick[] = INCBIN_U32("graphics/battle_anims/sprites/power_trick.4bpp.lz"); const u32 gBattleAnimSpritePal_PowerTrick[] = INCBIN_U32("graphics/battle_anims/sprites/power_trick.gbapal.lz"); +const u32 gBattleAnimSpriteGfx_PurpleChain[] = INCBIN_U32("graphics/battle_anims/sprites/purple_chain.4bpp.lz"); +const u32 gBattleAnimSpritePal_PurpleChain[] = INCBIN_U32("graphics/battle_anims/sprites/purple_chain.gbapal.lz"); + const u32 gBattleAnimSpriteGfx_PurpleDrake[] = INCBIN_U32("graphics/battle_anims/sprites/purple_drake.4bpp.lz"); const u32 gBattleAnimSpritePal_PurpleDrake[] = INCBIN_U32("graphics/battle_anims/sprites/purple_drake.gbapal.lz"); const u32 gBattleAnimSpriteGfx_RazorShell[] = INCBIN_U32("graphics/battle_anims/sprites/razor_shell.4bpp.lz"); const u32 gBattleAnimSpritePal_RazorShell[] = INCBIN_U32("graphics/battle_anims/sprites/razor_shell.gbapal.lz"); +const u32 gBattleAnimSpriteGfx_RedExplosion[] = INCBIN_U32("graphics/battle_anims/sprites/red_explosion.4bpp.lz"); +const u32 gBattleAnimSpritePal_RedExplosion[] = INCBIN_U32("graphics/battle_anims/sprites/red_explosion.gbapal.lz"); + const u32 gBattleAnimSpriteGfx_RocksSmall[] = INCBIN_U32("graphics/battle_anims/sprites/rock_small.4bpp.lz"); const u32 gBattleAnimSpriteGfx_NewRocks[] = INCBIN_U32("graphics/battle_anims/sprites/rocks_new.4bpp.lz"); @@ -1375,6 +1387,7 @@ const u32 gBattleAnimSpritePal_Protect[] = INCBIN_U32("graphics/battle_anims/spr const u32 gBattleAnimBackgroundImageMuddyWater_Pal[] = INCBIN_U32("graphics/battle_anims/backgrounds/water_muddy.gbapal.lz"); const u32 gEnemyMonShadow_Gfx[] = INCBIN_U32("graphics/battle_interface/enemy_mon_shadow.4bpp.lz"); +const u32 gEnemyMonShadowsSized_Gfx[] = INCBIN_U32("graphics/battle_interface/enemy_mon_shadows_sized.4bpp.lz"); const u32 gBattleInterface_BallStatusBarGfx[] = INCBIN_U32("graphics/battle_interface/ball_status_bar.4bpp.lz"); @@ -1433,10 +1446,6 @@ const u32 gBattleAnimBgTilemap_ClangorousSoulblaze[] = INCBIN_U32("graphics/batt const u32 gBattleAnimBgPalette_DynamaxCannon[] = INCBIN_U32("graphics/battle_anims/backgrounds/dynamax_cannon.gbapal.lz"); -const u32 gBattleAnimBgImage_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/electric_terrain.4bpp.lz"); -const u32 gBattleAnimBgPalette_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/electric_terrain.gbapal.lz"); -const u32 gBattleAnimBgTilemap_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/electric_terrain.bin.lz"); - const u32 gBattleAnimBgImage_Fire1[] = INCBIN_U32("graphics/battle_anims/backgrounds/fire1.4bpp.lz"); const u32 gBattleAnimBgPalette_Fire1[] = INCBIN_U32("graphics/battle_anims/backgrounds/fire1.gbapal.lz"); const u32 gBattleAnimBgTilemap_Fire1[] = INCBIN_U32("graphics/battle_anims/backgrounds/fire1.bin.lz"); @@ -1449,10 +1458,6 @@ const u32 gBattleAnimBgTilemap_FocusBlast[] = INCBIN_U32("graphics/battle_anims/ const u32 gBattleAnimBgPalette_GarbageFalls[] = INCBIN_U32("graphics/battle_anims/backgrounds/garbage_falls.gbapal.lz"); -const u32 gBattleAnimBgImage_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/grassy_terrain.4bpp.lz"); -const u32 gBattleAnimBgPalette_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/grassy_terrain.gbapal.lz"); -const u32 gBattleAnimBgTilemap_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/grassy_terrain.bin.lz"); - const u32 gBattleAnimBgPalette_GunkShot[] = INCBIN_U32("graphics/battle_anims/backgrounds/gunk_shot.gbapal.lz"); const u32 gBattleAnimBgImage_HydroCannon[] = INCBIN_U32("graphics/battle_anims/backgrounds/hydro_cannon.4bpp.lz"); @@ -1484,14 +1489,44 @@ const u32 gBattleAnimBgImage_MaxLightning[] = INCBIN_U32("graphics/battle_anims/ const u32 gBattleAnimBgPalette_MaxLightning[] = INCBIN_U32("graphics/battle_anims/backgrounds/max_lightning.gbapal.lz"); const u32 gBattleAnimBgTilemap_MaxLightning[] = INCBIN_U32("graphics/battle_anims/backgrounds/max_lightning.bin.lz"); -const u32 gBattleAnimBgImage_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/misty_terrain.4bpp.lz"); -const u32 gBattleAnimBgPalette_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/misty_terrain.gbapal.lz"); -const u32 gBattleAnimBgTilemap_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/misty_terrain.bin.lz"); - const u32 gBattleAnimBgImage_NeverendingNightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/neverending_nightmare.4bpp.lz"); const u32 gBattleAnimBgPalette_NeverendingNightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/neverending_nightmare.gbapal.lz"); const u32 gBattleAnimBgTilemap_NeverendingNightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/neverending_nightmare.bin.lz"); +#if B_NEW_TERRAIN_BACKGROUNDS +const u32 gBattleAnimBgImage_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_electric_terrain.4bpp.lz"); +const u32 gBattleAnimBgPalette_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_electric_terrain.gbapal.lz"); +const u32 gBattleAnimBgTilemap_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_electric_terrain.bin.lz"); + +const u32 gBattleAnimBgImage_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_grassy_terrain.4bpp.lz"); +const u32 gBattleAnimBgPalette_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_grassy_terrain.gbapal.lz"); +const u32 gBattleAnimBgTilemap_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_grassy_terrain.bin.lz"); + +const u32 gBattleAnimBgImage_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_misty_terrain.4bpp.lz"); +const u32 gBattleAnimBgPalette_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_misty_terrain.gbapal.lz"); +const u32 gBattleAnimBgTilemap_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_misty_terrain.bin.lz"); + +const u32 gBattleAnimBgImage_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_psychic_terrain.4bpp.lz"); +const u32 gBattleAnimBgPalette_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_psychic_terrain.gbapal.lz"); +const u32 gBattleAnimBgTilemap_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/new_psychic_terrain.bin.lz"); +#else +const u32 gBattleAnimBgImage_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/psychic_terrain.4bpp.lz"); +const u32 gBattleAnimBgPalette_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/psychic_terrain.gbapal.lz"); +const u32 gBattleAnimBgTilemap_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/psychic_terrain.bin.lz"); + +const u32 gBattleAnimBgImage_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/electric_terrain.4bpp.lz"); +const u32 gBattleAnimBgPalette_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/electric_terrain.gbapal.lz"); +const u32 gBattleAnimBgTilemap_ElectricTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/electric_terrain.bin.lz"); + +const u32 gBattleAnimBgImage_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/grassy_terrain.4bpp.lz"); +const u32 gBattleAnimBgPalette_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/grassy_terrain.gbapal.lz"); +const u32 gBattleAnimBgTilemap_GrassyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/grassy_terrain.bin.lz"); + +const u32 gBattleAnimBgImage_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/misty_terrain.4bpp.lz"); +const u32 gBattleAnimBgPalette_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/misty_terrain.gbapal.lz"); +const u32 gBattleAnimBgTilemap_MistyTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/misty_terrain.bin.lz"); +#endif + const u32 gBattleAnimBgImage_Nightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/nightmare.4bpp.lz"); const u32 gBattleAnimBgPalette_Nightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/nightmare.gbapal.lz"); const u32 gBattleAnimBgTilemap_Nightmare[] = INCBIN_U32("graphics/battle_anims/backgrounds/nightmare.bin.lz"); @@ -1500,10 +1535,6 @@ const u32 gBattleAnimBgPalette_PoisonFalls[] = INCBIN_U32("graphics/battle_anims const u32 gBattleAnimBgPalette_PsychicNew[] = INCBIN_U32("graphics/battle_anims/backgrounds/psychic_new.gbapal.lz"); -const u32 gBattleAnimBgImage_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/psychic_terrain.4bpp.lz"); -const u32 gBattleAnimBgPalette_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/psychic_terrain.gbapal.lz"); -const u32 gBattleAnimBgTilemap_PsychicTerrain[] = INCBIN_U32("graphics/battle_anims/backgrounds/psychic_terrain.bin.lz"); - const u32 gBattleAnimBgImage_ShatteredPsyche[] = INCBIN_U32("graphics/battle_anims/backgrounds/shattered_psyche.4bpp.lz"); const u32 gBattleAnimBgPalette_ShatteredPsyche[] = INCBIN_U32("graphics/battle_anims/backgrounds/shattered_psyche.gbapal.lz"); const u32 gBattleAnimBgTilemap_ShatteredPsyche[] = INCBIN_U32("graphics/battle_anims/backgrounds/shattered_psyche.bin.lz"); @@ -1624,6 +1655,11 @@ const u32 gBattleAnimBgImage_Rainbow[] = INCBIN_U32("graphics/battle_anims/backg const u32 gBattleAnimBGPalette_Rainbow[] = INCBIN_U32("graphics/battle_anims/backgrounds/rainbow.gbapal.lz"); const u32 gBattleAnimBgTilemap_Rainbow[] = INCBIN_U32("graphics/battle_anims/backgrounds/rainbow.bin.lz"); +// Pledge Effect field status - Swamp +const u32 gBattleAnimBgImage_Swamp[] = INCBIN_U32("graphics/battle_anims/backgrounds/swampswizzle.4bpp.lz"); +const u32 gBattleAnimBGPalette_Swamp[] = INCBIN_U32("graphics/battle_anims/backgrounds/swampswizzle.gbapal.lz"); +const u32 gBattleAnimBgTilemap_Swamp[] = INCBIN_U32("graphics/battle_anims/backgrounds/swampswizzle.bin.lz"); + const u32 gPartyMenuBg_Gfx[] = INCBIN_U32("graphics/party_menu/bg.4bpp.lz"); const u32 gPartyMenuBg_Pal[] = INCBIN_U32("graphics/party_menu/bg.gbapal.lz"); const u32 gPartyMenuBg_Tilemap[] = INCBIN_U32("graphics/party_menu/bg.bin.lz"); @@ -1990,6 +2026,7 @@ const u16 gTradeMenuMonBox_Tilemap[] = INCBIN_U16("graphics/trade/menu_mon_box.b const u16 gMessageBox_Pal[] = INCBIN_U16("graphics/text_window/message_box.gbapal"); const u8 gMessageBox_Gfx[] = INCBIN_U8("graphics/text_window/message_box.4bpp"); +const u8 gSignpostWindow_Gfx[] = INCBIN_U8("graphics/text_window/signpost.4bpp"); const u32 gWallpaperIcon_Cross[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/cross.4bpp.lz"); const u32 gWallpaperIcon_Bolt[] = INCBIN_U32("graphics/pokemon_storage/wallpapers/icons/bolt.4bpp.lz"); @@ -2048,3 +2085,9 @@ const u16 gFrontierPassCancelButtonHighlighted_Tilemap[] = INCBIN_U16("graphics/ const u16 gBerryCrush_Crusher_Pal[] = INCBIN_U16("graphics/berry_crush/crusher.gbapal"); const u32 gBerryCrush_Crusher_Gfx[] = INCBIN_U32("graphics/berry_crush/crusher.4bpp.lz"); const u32 gBerryCrush_TextWindows_Tilemap[] = INCBIN_U32("graphics/berry_crush/text_windows.bin.lz"); + +const u32 gBattleIcons_Gfx1[] = INCBIN_U32("graphics/types/battle_icons1.4bpp.lz"); +const u32 gBattleIcons_Gfx2[] = INCBIN_U32("graphics/types/battle_icons2.4bpp.lz"); +const u32 gBattleIcons_Pal1[] = INCBIN_U32("graphics/types/battle_icons1.gbapal.lz"); +const u32 gBattleIcons_Pal2[] = INCBIN_U32("graphics/types/battle_icons2.gbapal.lz"); + diff --git a/src/item_use.c b/src/item_use.c index 502612a184..fd74b7082b 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -430,46 +430,43 @@ static bool8 IsHiddenItemPresentAtCoords(const struct MapEvents *events, s16 x, static bool8 IsHiddenItemPresentInConnection(const struct MapConnection *connection, int x, int y) { + s16 connectionX, connectionY; + struct MapHeader const *const connectionHeader = GetMapHeaderFromConnection(connection); - u16 localX, localY; - u32 localOffset; - s32 localLength; - - struct MapHeader const *const mapHeader = GetMapHeaderFromConnection(connection); - +// To convert our x/y into coordinates that are relative to the connected map, we must: +// - Subtract the virtual offset used for the border buffer (MAP_OFFSET). +// - Subtract the horizontal offset between North/South connections, or the vertical offset for East/West +// - Account for map size. (0,0) is in the NW corner of our map, so when looking North/West we have to add the height/width of the connected map, +// and when looking South/East we have to subtract the height/width of our current map. +#define localX (x - MAP_OFFSET) +#define localY (y - MAP_OFFSET) switch (connection->direction) { - // same weird temp variable behavior seen in IsHiddenItemPresentAtCoords case CONNECTION_NORTH: - localOffset = connection->offset + MAP_OFFSET; - localX = x - localOffset; - localLength = mapHeader->mapLayout->height - MAP_OFFSET; - localY = localLength + y; // additions are reversed for some reason + connectionX = localX - connection->offset; + connectionY = connectionHeader->mapLayout->height + localY; break; case CONNECTION_SOUTH: - localOffset = connection->offset + MAP_OFFSET; - localX = x - localOffset; - localLength = gMapHeader.mapLayout->height + MAP_OFFSET; - localY = y - localLength; + connectionX = localX - connection->offset; + connectionY = localY - gMapHeader.mapLayout->height; break; case CONNECTION_WEST: - localLength = mapHeader->mapLayout->width - MAP_OFFSET; - localX = localLength + x; // additions are reversed for some reason - localOffset = connection->offset + MAP_OFFSET; - localY = y - localOffset; + connectionX = connectionHeader->mapLayout->width + localX; + connectionY = localY - connection->offset; break; case CONNECTION_EAST: - localLength = gMapHeader.mapLayout->width + MAP_OFFSET; - localX = x - localLength; - localOffset = connection->offset + MAP_OFFSET; - localY = y - localOffset; + connectionX = localX - gMapHeader.mapLayout->width; + connectionY = localY - connection->offset; break; default: return FALSE; } - return IsHiddenItemPresentAtCoords(mapHeader->events, localX, localY); + return IsHiddenItemPresentAtCoords(connectionHeader->events, connectionX, connectionY); } +#undef localX +#undef localY + static void CheckForHiddenItemsInMapConnection(u8 taskId) { s16 playerX, playerY; diff --git a/src/landmark.c b/src/landmark.c index 615a9bfe3e..d2bb3c4105 100644 --- a/src/landmark.c +++ b/src/landmark.c @@ -369,8 +369,13 @@ static const struct LandmarkList sLandmarkLists[] = {MAPSEC_ROUTE_120, 2, Landmarks_Route120_2}, {MAPSEC_ROUTE_121, 2, Landmarks_Route121_2}, {MAPSEC_ROUTE_122, 0, Landmarks_Route122_0}, +#ifdef BUGFIX + {MAPSEC_ROUTE_122, 1, Landmarks_Route122_0}, + {MAPSEC_ROUTE_123, 0, Landmarks_Route123_0}, +#else {MAPSEC_ROUTE_123, 0, Landmarks_Route123_0}, {MAPSEC_ROUTE_122, 1, Landmarks_Route122_0}, +#endif {MAPSEC_ROUTE_124, 7, Landmarks_Route124_7}, {MAPSEC_ROUTE_125, 2, Landmarks_Route125_2}, {MAPSEC_ROUTE_128, 1, Landmarks_Route128_1}, diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c index 152bb716e9..cd7cb6cc5a 100644 --- a/src/librfu_rfu.c +++ b/src/librfu_rfu.c @@ -762,7 +762,7 @@ static void rfu_CB_pollConnectParent(u8 reqCommand, u16 reqResult) u16 id; u8 slot; u8 bm_slot_flag, i; - struct RfuTgtData *target_p; + struct RfuTgtData *target_p = NULL; struct RfuTgtData target_local; if (reqResult == 0) diff --git a/src/load_save.c b/src/load_save.c index ee8a6bd04c..a5f2693538 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -211,7 +211,7 @@ void SaveObjectEvents(void) gSaveBlock1Ptr->objectEvents[i].graphicsId = (graphicsId >> 8) | (graphicsId << 8); gSaveBlock1Ptr->objectEvents[i].spriteId = 127; // magic number // To avoid crash on vanilla, save follower as inactive - if (gObjectEvents[i].localId == OBJ_EVENT_ID_FOLLOWER) + if (gObjectEvents[i].localId == OBJ_EVENT_ID_FOLLOWER) gSaveBlock1Ptr->objectEvents[i].active = FALSE; } } diff --git a/src/main.c b/src/main.c index b0bba2f3f3..47907a0111 100644 --- a/src/main.c +++ b/src/main.c @@ -205,12 +205,9 @@ void SetMainCallback2(MainCallback callback) void StartTimer1(void) { - if (HQ_RANDOM) - { - REG_TM2CNT_L = 0; - REG_TM2CNT_H = TIMER_ENABLE | TIMER_COUNTUP; - } + REG_TM2CNT_L = 0; + REG_TM2CNT_H = TIMER_ENABLE | TIMER_COUNTUP; REG_TM1CNT_H = TIMER_ENABLE; } @@ -218,24 +215,12 @@ void SeedRngAndSetTrainerId(void) { u32 val; - if (HQ_RANDOM) - { - REG_TM1CNT_H = 0; - REG_TM2CNT_H = 0; - val = ((u32)REG_TM2CNT_L) << 16; - val |= REG_TM1CNT_L; - SeedRng(val); - sTrainerId = Random(); - } - else - { - // Do it exactly like it was originally done, including not stopping - // the timer beforehand. - val = REG_TM1CNT_L; - SeedRng((u16)val); - REG_TM1CNT_H = 0; - sTrainerId = val; - } + REG_TM1CNT_H = 0; + REG_TM2CNT_H = 0; + val = ((u32)REG_TM2CNT_L) << 16; + val |= REG_TM1CNT_L; + SeedRng(val); + sTrainerId = Random(); } u16 GetGeneratedTrainerIdLower(void) @@ -254,22 +239,16 @@ void EnableVCountIntrAtLine150(void) #ifdef BUGFIX static void SeedRngWithRtc(void) { - #if HQ_RANDOM == FALSE - u32 seed = RtcGetMinuteCount(); - seed = (seed >> 16) ^ (seed & 0xFFFF); - SeedRng(seed); - #else - #define BCD8(x) ((((x) >> 4) & 0xF) * 10 + ((x) & 0xF)) - u32 seconds; - struct SiiRtcInfo rtc; - RtcGetInfo(&rtc); - seconds = - ((HOURS_PER_DAY * RtcGetDayCount(&rtc) + BCD8(rtc.hour)) - * MINUTES_PER_HOUR + BCD8(rtc.minute)) - * SECONDS_PER_MINUTE + BCD8(rtc.second); - SeedRng(seconds); - #undef BCD8 - #endif + #define BCD8(x) ((((x) >> 4) & 0xF) * 10 + ((x) & 0xF)) + u32 seconds; + struct SiiRtcInfo rtc; + RtcGetInfo(&rtc); + seconds = + ((HOURS_PER_DAY * RtcGetDayCount(&rtc) + BCD8(rtc.hour)) + * MINUTES_PER_HOUR + BCD8(rtc.minute)) + * SECONDS_PER_MINUTE + BCD8(rtc.second); + SeedRng(seconds); + #undef BCD8 } #endif diff --git a/src/main_menu.c b/src/main_menu.c index c1f092b2ca..504fbfb186 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -257,6 +257,26 @@ static const u32 sBirchSpeechBgMap[] = INCBIN_U32("graphics/birch_speech/map.bin static const u16 sBirchSpeechBgGradientPal[] = INCBIN_U16("graphics/birch_speech/bg2.gbapal"); static const u16 sBirchSpeechPlatformBlackPal[] = {RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK, RGB_BLACK}; +static const u8 gText_SaveFileCorrupted[] = _("The save file is corrupted. The\nprevious save file will be loaded."); +static const u8 gText_SaveFileErased[] = _("The save file has been erased\ndue to corruption or damage."); +static const u8 gJPText_No1MSubCircuit[] = _("1Mサブきばんが ささっていません!"); +static const u8 gText_BatteryRunDry[] = _("The internal battery has run dry.\nThe game can be played.\pHowever, clock-based events will\nno longer occur."); + +static const u8 gText_MainMenuNewGame[] = _("NEW GAME"); +static const u8 gText_MainMenuContinue[] = _("CONTINUE"); +static const u8 gText_MainMenuOption[] = _("OPTION"); +static const u8 gText_MainMenuMysteryGift[] = _("MYSTERY GIFT"); +static const u8 gText_MainMenuMysteryGift2[] = _("MYSTERY GIFT"); +static const u8 gText_MainMenuMysteryEvents[] = _("MYSTERY EVENTS"); +static const u8 gText_WirelessNotConnected[] = _("The Wireless Adapter is not\nconnected."); +static const u8 gText_MysteryGiftCantUse[] = _("MYSTERY GIFT can't be used while\nthe Wireless Adapter is attached."); +static const u8 gText_MysteryEventsCantUse[] = _("MYSTERY EVENTS can't be used while\nthe Wireless Adapter is attached."); + +static const u8 gText_ContinueMenuPlayer[] = _("PLAYER"); +static const u8 gText_ContinueMenuTime[] = _("TIME"); +static const u8 gText_ContinueMenuPokedex[] = _("POKéDEX"); +static const u8 gText_ContinueMenuBadges[] = _("BADGES"); + #define MENU_LEFT 2 #define MENU_TOP_WIN0 1 #define MENU_TOP_WIN1 5 @@ -454,54 +474,54 @@ static const union AffineAnimCmd *const sSpriteAffineAnimTable_PlayerShrink[] = }; static const struct MenuAction sMenuActions_Gender[] = { - {gText_BirchBoy, {NULL}}, - {gText_BirchGirl, {NULL}} + {COMPOUND_STRING("BOY"), {NULL}}, + {COMPOUND_STRING("GIRL"), {NULL}} }; static const u8 *const sMalePresetNames[] = { - gText_DefaultNameStu, - gText_DefaultNameMilton, - gText_DefaultNameTom, - gText_DefaultNameKenny, - gText_DefaultNameReid, - gText_DefaultNameJude, - gText_DefaultNameJaxson, - gText_DefaultNameEaston, - gText_DefaultNameWalker, - gText_DefaultNameTeru, - gText_DefaultNameJohnny, - gText_DefaultNameBrett, - gText_DefaultNameSeth, - gText_DefaultNameTerry, - gText_DefaultNameCasey, - gText_DefaultNameDarren, - gText_DefaultNameLandon, - gText_DefaultNameCollin, - gText_DefaultNameStanley, - gText_DefaultNameQuincy + COMPOUND_STRING("STU"), + COMPOUND_STRING("MILTON"), + COMPOUND_STRING("TOM"), + COMPOUND_STRING("KENNY"), + COMPOUND_STRING("REID"), + COMPOUND_STRING("JUDE"), + COMPOUND_STRING("JAXSON"), + COMPOUND_STRING("EASTON"), + COMPOUND_STRING("WALKER"), + COMPOUND_STRING("TERU"), + COMPOUND_STRING("JOHNNY"), + COMPOUND_STRING("BRETT"), + COMPOUND_STRING("SETH"), + COMPOUND_STRING("TERRY"), + COMPOUND_STRING("CASEY"), + COMPOUND_STRING("DARREN"), + COMPOUND_STRING("LANDON"), + COMPOUND_STRING("COLLIN"), + COMPOUND_STRING("STANLEY"), + COMPOUND_STRING("QUINCY") }; static const u8 *const sFemalePresetNames[] = { - gText_DefaultNameKimmy, - gText_DefaultNameTiara, - gText_DefaultNameBella, - gText_DefaultNameJayla, - gText_DefaultNameAllie, - gText_DefaultNameLianna, - gText_DefaultNameSara, - gText_DefaultNameMonica, - gText_DefaultNameCamila, - gText_DefaultNameAubree, - gText_DefaultNameRuthie, - gText_DefaultNameHazel, - gText_DefaultNameNadine, - gText_DefaultNameTanja, - gText_DefaultNameYasmin, - gText_DefaultNameNicola, - gText_DefaultNameLillie, - gText_DefaultNameTerra, - gText_DefaultNameLucy, - gText_DefaultNameHalie + COMPOUND_STRING("KIMMY"), + COMPOUND_STRING("TIARA"), + COMPOUND_STRING("BELLA"), + COMPOUND_STRING("JAYLA"), + COMPOUND_STRING("ALLIE"), + COMPOUND_STRING("LIANNA"), + COMPOUND_STRING("SARA"), + COMPOUND_STRING("MONICA"), + COMPOUND_STRING("CAMILA"), + COMPOUND_STRING("AUBREE"), + COMPOUND_STRING("RUTHIE"), + COMPOUND_STRING("HAZEL"), + COMPOUND_STRING("NADINE"), + COMPOUND_STRING("TANJA"), + COMPOUND_STRING("YASMIN"), + COMPOUND_STRING("NICOLA"), + COMPOUND_STRING("LILLIE"), + COMPOUND_STRING("TERRA"), + COMPOUND_STRING("LUCY"), + COMPOUND_STRING("HALIE") }; // The number of male vs. female names is assumed to be the same. diff --git a/src/map_name_popup.c b/src/map_name_popup.c index 67a0d6373f..5cc1f3cfd5 100644 --- a/src/map_name_popup.c +++ b/src/map_name_popup.c @@ -550,7 +550,7 @@ static void ShowMapNamePopUpWindow(void) if (OW_POPUP_GENERATION == GEN_5) { AddTextPrinterParameterized(mapNamePopUpWindowId, FONT_SHORT, mapDisplayHeader, 8, 2, TEXT_SKIP_DRAW, NULL); - + if (OW_POPUP_BW_TIME_MODE != OW_POPUP_BW_TIME_NONE) { RtcCalcLocalTime(); @@ -622,7 +622,7 @@ static void LoadMapNamePopUpWindowBg(void) if (OW_POPUP_GENERATION == GEN_5) { popUpThemeId = sRegionMapSectionId_To_PopUpThemeIdMapping_BW[regionMapSectionId]; - switch (popUpThemeId) + switch (popUpThemeId) { // add additional gen 5-style pop-up themes as cases here case MAPPOPUP_THEME_BW_DEFAULT: diff --git a/src/menu.c b/src/menu.c index ff1970c3f1..d9b331a8b2 100644 --- a/src/menu.c +++ b/src/menu.c @@ -17,18 +17,13 @@ #include "sound.h" #include "string_util.h" #include "strings.h" +#include "script.h" #include "task.h" #include "text_window.h" #include "window.h" #include "config/overworld.h" #include "constants/songs.h" -#define DLG_WINDOW_PALETTE_NUM 15 -#define DLG_WINDOW_BASE_TILE_NUM 0x200 -#define STD_WINDOW_PALETTE_NUM 14 -#define STD_WINDOW_PALETTE_SIZE PLTT_SIZEOF(10) -#define STD_WINDOW_BASE_TILE_NUM 0x214 - struct MenuInfoIcon { u8 width; @@ -54,6 +49,8 @@ struct Menu static u16 AddWindowParameterized(u8, u8, u8, u8, u8, u8, u16); static void WindowFunc_DrawStandardFrame(u8, u8, u8, u8, u8, u8); +static void WindowFunc_DrawSignFrame(u8, u8, u8, u8, u8, u8); +static inline void *GetWindowFunc_DialogueFrame(void); static void WindowFunc_DrawDialogueFrame(u8, u8, u8, u8, u8, u8); static void WindowFunc_ClearStdWindowAndFrame(u8, u8, u8, u8, u8, u8); static void WindowFunc_ClearDialogWindowAndFrame(u8, u8, u8, u8, u8, u8); @@ -220,9 +217,123 @@ void LoadMessageBoxAndBorderGfx(void) LoadUserWindowBorderGfx(0, STD_WINDOW_BASE_TILE_NUM, BG_PLTT_ID(STD_WINDOW_PALETTE_NUM)); } +void LoadSignPostWindowFrameGfx(void) +{ + Menu_LoadStdPal(); + LoadSignBoxGfx(0, DLG_WINDOW_BASE_TILE_NUM, BG_PLTT_ID(DLG_WINDOW_PALETTE_NUM)); + LoadUserWindowBorderGfx(0, STD_WINDOW_BASE_TILE_NUM, BG_PLTT_ID(STD_WINDOW_PALETTE_NUM)); +} + +static void WindowFunc_DrawSignFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum) +{ + FillBgTilemapBufferRect(bg, + DLG_WINDOW_BASE_TILE_NUM + 0, + tilemapLeft - 2, + tilemapTop - 1, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + DLG_WINDOW_BASE_TILE_NUM + 1, + tilemapLeft - 1, + tilemapTop - 1, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + DLG_WINDOW_BASE_TILE_NUM + 2, + tilemapLeft - 2, + tilemapTop, + 1, + 4, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + DLG_WINDOW_BASE_TILE_NUM + 3, + tilemapLeft - 1, + tilemapTop, + 1, + 4, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + BG_TILE_V_FLIP(DLG_WINDOW_BASE_TILE_NUM + 0), + tilemapLeft - 2, + tilemapTop + 4, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + BG_TILE_V_FLIP(DLG_WINDOW_BASE_TILE_NUM + 1), + tilemapLeft - 1, + tilemapTop + 4, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + DLG_WINDOW_BASE_TILE_NUM + 4, + tilemapLeft, + tilemapTop - 1, + 26, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 0), + tilemapLeft + 27, + tilemapTop - 1, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 1), + tilemapLeft + 26, + tilemapTop - 1, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 2), + tilemapLeft + 27, + tilemapTop, + 1, + 4, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 3), + tilemapLeft + 26, + tilemapTop, + 1, + 4, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + BG_TILE_V_FLIP(BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 0)), + tilemapLeft + 27, + tilemapTop + 4, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + BG_TILE_V_FLIP(BG_TILE_H_FLIP(DLG_WINDOW_BASE_TILE_NUM + 1)), + tilemapLeft + 26, + tilemapTop + 4, + 1, + 1, + DLG_WINDOW_PALETTE_NUM); + FillBgTilemapBufferRect(bg, + BG_TILE_V_FLIP(DLG_WINDOW_BASE_TILE_NUM + 4), + tilemapLeft, + tilemapTop + 4, + 26, + 1, + DLG_WINDOW_PALETTE_NUM); +} + +static inline void *GetWindowFunc_DialogueFrame(void) +{ + return (gMsgIsSignPost ? WindowFunc_DrawSignFrame : WindowFunc_DrawDialogueFrame); +} + void DrawDialogueFrame(u8 windowId, bool8 copyToVram) { - CallWindowFunction(windowId, WindowFunc_DrawDialogueFrame); + CallWindowFunction(windowId, GetWindowFunc_DialogueFrame()); FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); PutWindowTilemap(windowId); if (copyToVram == TRUE) diff --git a/src/menu_specialized.c b/src/menu_specialized.c index a80a227a4b..a709a878dc 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -756,6 +756,9 @@ static void MoveRelearnerLoadBattleMoveDescription(u32 chosenMove) u8 buffer[32]; const u8 *str; + if (B_SHOW_CATEGORY_ICON == TRUE) + MoveRelearnerShowHideCategoryIcon(chosenMove); + FillWindowPixelBuffer(RELEARNERWIN_DESC_BATTLE, PIXEL_FILL(1)); str = gText_MoveRelearnerBattleMoves; x = GetStringCenterAlignXOffset(FONT_NORMAL, str, 128); diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 7063afcf59..0248c3cfee 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -66,13 +66,8 @@ static const u8 sTileBitAttributes[NUM_METATILE_BEHAVIORS] = [MB_SLIDE_NORTH] = TILE_FLAG_UNUSED, [MB_SLIDE_SOUTH] = TILE_FLAG_UNUSED, [MB_TRICK_HOUSE_PUZZLE_8_FLOOR] = TILE_FLAG_UNUSED, - [MB_SIDEWAYS_STAIRS_RIGHT_SIDE] = TILE_FLAG_UNUSED, - [MB_SIDEWAYS_STAIRS_LEFT_SIDE] = TILE_FLAG_UNUSED, - [MB_SIDEWAYS_STAIRS_RIGHT_SIDE_TOP] = TILE_FLAG_UNUSED, - [MB_SIDEWAYS_STAIRS_LEFT_SIDE_TOP] = TILE_FLAG_UNUSED, - [MB_SIDEWAYS_STAIRS_RIGHT_SIDE_BOTTOM] = TILE_FLAG_UNUSED, - [MB_SIDEWAYS_STAIRS_LEFT_SIDE_BOTTOM] = TILE_FLAG_UNUSED, - [MB_ROCK_STAIRS] = TILE_FLAG_UNUSED, + [MB_UNUSED_49] = TILE_FLAG_UNUSED, + [MB_UNUSED_4A] = TILE_FLAG_UNUSED, [MB_EASTWARD_CURRENT] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, [MB_WESTWARD_CURRENT] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, [MB_NORTHWARD_CURRENT] = TILE_FLAG_UNUSED | TILE_FLAG_SURFABLE, @@ -130,6 +125,16 @@ static const u8 sTileBitAttributes[NUM_METATILE_BEHAVIORS] = [MB_ISOLATED_HORIZONTAL_RAIL] = TILE_FLAG_UNUSED, [MB_VERTICAL_RAIL] = TILE_FLAG_UNUSED, [MB_HORIZONTAL_RAIL] = TILE_FLAG_UNUSED, + [MB_SIGNPOST] = TILE_FLAG_UNUSED, + [MB_POKEMON_CENTER_SIGN] = TILE_FLAG_UNUSED, + [MB_POKEMART_SIGN] = TILE_FLAG_UNUSED, + [MB_SIDEWAYS_STAIRS_RIGHT_SIDE] = TILE_FLAG_UNUSED, + [MB_SIDEWAYS_STAIRS_LEFT_SIDE] = TILE_FLAG_UNUSED, + [MB_SIDEWAYS_STAIRS_RIGHT_SIDE_TOP] = TILE_FLAG_UNUSED, + [MB_SIDEWAYS_STAIRS_LEFT_SIDE_TOP] = TILE_FLAG_UNUSED, + [MB_SIDEWAYS_STAIRS_RIGHT_SIDE_BOTTOM] = TILE_FLAG_UNUSED, + [MB_SIDEWAYS_STAIRS_LEFT_SIDE_BOTTOM] = TILE_FLAG_UNUSED, + [MB_ROCK_STAIRS] = TILE_FLAG_UNUSED, }; bool8 MetatileBehavior_IsATile(u8 metatileBehavior) @@ -1406,6 +1411,21 @@ bool8 MetatileBehavior_IsTrainerHillTimer(u8 metatileBehavior) return FALSE; } +bool32 MetatileBehavior_IsSignpost(u32 metatileBehavior) +{ + return (metatileBehavior == MB_SIGNPOST); +} + +bool32 MetatileBehavior_IsPokemonCenterSign(u32 metatileBehavior) +{ + return (metatileBehavior == MB_POKEMON_CENTER_SIGN); +} + +bool32 MetatileBehavior_IsPokeMartSign(u32 metatileBehavior) +{ + return (metatileBehavior == MB_POKEMART_SIGN); +} + bool8 MetatileBehavior_IsSidewaysStairsRightSide(u8 metatileBehavior) { if (metatileBehavior == MB_SIDEWAYS_STAIRS_RIGHT_SIDE || metatileBehavior == MB_SIDEWAYS_STAIRS_RIGHT_SIDE_BOTTOM) diff --git a/src/mini_printf.c b/src/mini_printf.c index 7432395b79..2420efbd18 100644 --- a/src/mini_printf.c +++ b/src/mini_printf.c @@ -141,9 +141,9 @@ static s32 _putsEncoded(char *s, s32 len, void *buf) static s32 mini_strlen(const char *s) { - s32 len = 0; - while (s[len] != '\0') len++; - return len; + s32 len = 0; + while (s[len] != '\0') len++; + return len; } static s32 mini_itoa(s32 value, u32 radix, s32 uppercase, bool32 unsig, char *buffer) diff --git a/src/move_relearner.c b/src/move_relearner.c index e27b46fdf7..817dbd16e0 100644 --- a/src/move_relearner.c +++ b/src/move_relearner.c @@ -1,9 +1,11 @@ #include "global.h" #include "main.h" #include "battle.h" +#include "battle_util.h" #include "bg.h" #include "contest_effect.h" #include "data.h" +#include "decompress.h" #include "event_data.h" #include "field_screen_effect.h" #include "gpu_regs.h" @@ -173,6 +175,7 @@ static EWRAM_DATA struct u8 moveListScrollArrowTask; /*0x113*/ u8 moveDisplayArrowTask; /*0x114*/ u16 scrollOffset; /*0x116*/ + u8 categoryIconSpriteId; /*0x117*/ } *sMoveRelearnerStruct = {0}; static EWRAM_DATA struct { @@ -803,6 +806,9 @@ static void HandleInput(bool8 showContest) ScheduleBgCopyTilemapToVram(1); MoveRelearnerShowHideHearts(GetCurrentSelectedMove()); + if (B_SHOW_CATEGORY_ICON == TRUE) + MoveRelearnerShowHideCategoryIcon(GetCurrentSelectedMove()); + break; case LIST_CANCEL: PlaySE(SE_SELECT); @@ -851,6 +857,10 @@ static void CreateUISprites(void) sMoveRelearnerStruct->moveListScrollArrowTask = TASK_NONE; AddScrollArrows(); + sMoveRelearnerStruct->categoryIconSpriteId = 0xFF; + LoadCompressedSpriteSheet(&gSpriteSheet_CategoryIcons); + LoadSpritePalette(&gSpritePal_CategoryIcons); + // These are the appeal hearts. for (i = 0; i < 8; i++) sMoveRelearnerStruct->heartSpriteIds[i] = CreateSprite(&sConstestMoveHeartSprite, (i - (i / 4) * 4) * 8 + 104, (i / 4) * 8 + 36, 0); @@ -957,3 +967,23 @@ void MoveRelearnerShowHideHearts(s32 moveId) } } } + +void MoveRelearnerShowHideCategoryIcon(s32 moveId) +{ + if (sMoveRelearnerMenuSate.showContestInfo || moveId == LIST_CANCEL) + { + if (sMoveRelearnerStruct->categoryIconSpriteId != 0xFF) + DestroySprite(&gSprites[sMoveRelearnerStruct->categoryIconSpriteId]); + + sMoveRelearnerStruct->categoryIconSpriteId = 0xFF; + gSprites[sMoveRelearnerStruct->categoryIconSpriteId].invisible = TRUE; + } + else + { + if (sMoveRelearnerStruct->categoryIconSpriteId == 0xFF) + sMoveRelearnerStruct->categoryIconSpriteId = CreateSprite(&gSpriteTemplate_CategoryIcons, 66, 40, 0); + + gSprites[sMoveRelearnerStruct->categoryIconSpriteId].invisible = FALSE; + StartSpriteAnim(&gSprites[sMoveRelearnerStruct->categoryIconSpriteId], GetBattleMoveCategory(moveId)); + } +} diff --git a/src/new_game.c b/src/new_game.c index 783c6893c8..4bce5a5b96 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -51,6 +51,7 @@ extern const u8 EventScript_ResetAllMapFlags[]; static void ClearFrontierRecord(void); static void WarpToTruck(void); static void ResetMiniGamesRecords(void); +static void ResetItemFlags(void); EWRAM_DATA bool8 gDifferentSaveFile = FALSE; EWRAM_DATA bool8 gEnableContestDebugging = FALSE; @@ -204,6 +205,7 @@ void NewGameInitData(void) WipeTrainerNameRecords(); ResetTrainerHillResults(); ResetContestLinkResults(); + ResetItemFlags(); } static void ResetMiniGamesRecords(void) @@ -213,3 +215,10 @@ static void ResetMiniGamesRecords(void) ResetPokemonJumpRecords(); CpuFill16(0, &gSaveBlock2Ptr->berryPick, sizeof(struct BerryPickingResults)); } + +static void ResetItemFlags(void) +{ +#if OW_SHOW_ITEM_DESCRIPTIONS == OW_ITEM_DESCRIPTIONS_FIRST_TIME + memset(&gSaveBlock3Ptr->itemFlags, 0, sizeof(gSaveBlock3Ptr->itemFlags)); +#endif +} diff --git a/src/overworld.c b/src/overworld.c index babdfad7b6..e104cbdcf0 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -24,6 +24,8 @@ #include "gpu_regs.h" #include "heal_location.h" #include "io_reg.h" +#include "item.h" +#include "item_icon.h" #include "link.h" #include "link_rfu.h" #include "load_save.h" @@ -51,6 +53,7 @@ #include "secret_base.h" #include "sound.h" #include "start_menu.h" +#include "string_util.h" #include "task.h" #include "tileset_anims.h" #include "time_events.h" @@ -624,7 +627,7 @@ static void LoadCurrentMapData(void) static void LoadSaveblockMapHeader(void) { gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum); - gMapHeader.mapLayout = GetMapLayout(gMapHeader.mapLayoutId); + gMapHeader.mapLayout = GetMapLayout(gSaveBlock1Ptr->mapLayoutId); } static void SetPlayerCoordsFromWarp(void) @@ -1500,6 +1503,7 @@ static void DoCB1_Overworld(u16 newKeys, u16 heldKeys) UpdatePlayerAvatarTransitionState(); FieldClearPlayerInput(&inputStruct); FieldGetPlayerInput(&inputStruct, newKeys, heldKeys); + CancelSignPostMessageBox(&inputStruct); if (!ArePlayerFieldControlsLocked()) { if (ProcessPlayerFieldInput(&inputStruct) == 1) @@ -3290,3 +3294,207 @@ static void SpriteCB_LinkPlayer(struct Sprite *sprite) sprite->data[7]++; } } + +// ---------------- +// Item Header Descriptions +// Item Description Header + +#define ITEM_ICON_X 26 +#define ITEM_ICON_Y 24 +#define ITEM_TAG 0x2722 //same as money label + +bool8 GetSetItemObtained(u16 item, enum ItemObtainFlags caseId) +{ +#if OW_SHOW_ITEM_DESCRIPTIONS == OW_ITEM_DESCRIPTIONS_FIRST_TIME + u8 index = item / 8; + u8 bit = item % 8; + u8 mask = 1 << bit; + switch (caseId) + { + case FLAG_GET_ITEM_OBTAINED: + return gSaveBlock3Ptr->itemFlags[index] & mask; + case FLAG_SET_ITEM_OBTAINED: + gSaveBlock3Ptr->itemFlags[index] |= mask; + return TRUE; + } +#endif + return FALSE; +} + +#if OW_SHOW_ITEM_DESCRIPTIONS != OW_ITEM_DESCRIPTIONS_OFF + +EWRAM_DATA static u8 sHeaderBoxWindowId = 0; +EWRAM_DATA u8 sItemIconSpriteId = 0; +EWRAM_DATA u8 sItemIconSpriteId2 = 0; + +static void ShowItemIconSprite(u16 item, bool8 firstTime, bool8 flash); +static void DestroyItemIconSprite(void); + +static u8 ReformatItemDescription(u16 item, u8 *dest) +{ + u8 count = 0; + u8 numLines = 1; + u8 maxChars = 32; + u8 *desc = (u8 *)gItemsInfo[item].description; + + while (*desc != EOS) + { + if (count >= maxChars) + { + while (*desc != CHAR_SPACE && *desc != CHAR_NEWLINE) + { + *dest = *desc; //finish word + dest++; + desc++; + } + + *dest = CHAR_NEWLINE; + count = 0; + numLines++; + dest++; + desc++; + continue; + } + + *dest = *desc; + if (*desc == CHAR_NEWLINE) + { + *dest = CHAR_SPACE; + } + + dest++; + desc++; + count++; + } + + // finish string + *dest = EOS; + return numLines; +} + +void ScriptShowItemDescription(struct ScriptContext *ctx) +{ + u8 headerType = ScriptReadByte(ctx); + struct WindowTemplate template; + u16 item = gSpecialVar_0x8006; + u8 textY; + u8 *dst; + bool8 handleFlash = FALSE; + + if (GetFlashLevel() > 0 || InBattlePyramid_()) + handleFlash = TRUE; + + if (headerType == 1) // berry + dst = gStringVar3; + else + dst = gStringVar1; + + if (GetSetItemObtained(item, FLAG_GET_ITEM_OBTAINED)) + { + ShowItemIconSprite(item, FALSE, handleFlash); + return; //no box if item obtained previously + } + + SetWindowTemplateFields(&template, 0, 1, 1, 28, 3, 15, 8); + sHeaderBoxWindowId = AddWindow(&template); + FillWindowPixelBuffer(sHeaderBoxWindowId, PIXEL_FILL(0)); + PutWindowTilemap(sHeaderBoxWindowId); + CopyWindowToVram(sHeaderBoxWindowId, 3); + SetStandardWindowBorderStyle(sHeaderBoxWindowId, FALSE); + DrawStdFrameWithCustomTileAndPalette(sHeaderBoxWindowId, FALSE, 0x214, 14); + + if (ReformatItemDescription(item, dst) == 1) + textY = 4; + else + textY = 0; + + ShowItemIconSprite(item, TRUE, handleFlash); + AddTextPrinterParameterized(sHeaderBoxWindowId, 0, dst, ITEM_ICON_X + 2, textY, 0, NULL); +} + +void ScriptHideItemDescription(struct ScriptContext *ctx) +{ + DestroyItemIconSprite(); + + if (!GetSetItemObtained(gSpecialVar_0x8006, FLAG_GET_ITEM_OBTAINED)) + { + //header box only exists if haven't seen item before + GetSetItemObtained(gSpecialVar_0x8006, FLAG_SET_ITEM_OBTAINED); + ClearStdWindowAndFrameToTransparent(sHeaderBoxWindowId, FALSE); + CopyWindowToVram(sHeaderBoxWindowId, 3); + RemoveWindow(sHeaderBoxWindowId); + } +} + +static void ShowItemIconSprite(u16 item, bool8 firstTime, bool8 flash) +{ + s16 x = 0, y = 0; + u8 iconSpriteId; + u8 spriteId2 = MAX_SPRITES; + + if (flash) + { + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); + SetGpuRegBits(REG_OFFSET_WINOUT, WINOUT_WINOBJ_OBJ); + } + + iconSpriteId = AddItemIconSprite(ITEM_TAG, ITEM_TAG, item); + if (flash) + spriteId2 = AddItemIconSprite(ITEM_TAG, ITEM_TAG, item); + if (iconSpriteId != MAX_SPRITES) + { + if (!firstTime) + { + //show in message box + x = 213; + y = 140; + } + else + { + // show in header box + x = ITEM_ICON_X; + y = ITEM_ICON_Y; + } + + gSprites[iconSpriteId].x2 = x; + gSprites[iconSpriteId].y2 = y; + gSprites[iconSpriteId].oam.priority = 0; + } + + if (spriteId2 != MAX_SPRITES) + { + gSprites[spriteId2].x2 = x; + gSprites[spriteId2].y2 = y; + gSprites[spriteId2].oam.priority = 0; + gSprites[spriteId2].oam.objMode = ST_OAM_OBJ_WINDOW; + sItemIconSpriteId2 = spriteId2; + } + + sItemIconSpriteId = iconSpriteId; +} + +static void DestroyItemIconSprite(void) +{ + FreeSpriteTilesByTag(ITEM_TAG); + FreeSpritePaletteByTag(ITEM_TAG); + FreeSpriteOamMatrix(&gSprites[sItemIconSpriteId]); + DestroySprite(&gSprites[sItemIconSpriteId]); + + if ((GetFlashLevel() > 0 || InBattlePyramid_()) && sItemIconSpriteId2 != MAX_SPRITES) + { + FreeSpriteOamMatrix(&gSprites[sItemIconSpriteId2]); + DestroySprite(&gSprites[sItemIconSpriteId2]); + } +} + +#else +void ScriptShowItemDescription(struct ScriptContext *ctx) +{ + (void) ScriptReadByte(ctx); +} +void ScriptHideItemDescription(struct ScriptContext *ctx) +{ +} +#endif // OW_SHOW_ITEM_DESCRIPTIONS + + diff --git a/src/palette.c b/src/palette.c index fccff062a8..2526479ca8 100644 --- a/src/palette.c +++ b/src/palette.c @@ -13,62 +13,20 @@ enum HARDWARE_FADE, }; -// These are structs for some unused palette system. -// The full functionality of this system is unknown. - -#define NUM_PALETTE_STRUCTS 16 - -struct PaletteStructTemplate -{ - u16 id; - u16 *src; - bool16 pst_field_8_0:1; - u16 unused:9; - u16 size:5; - u8 time1; - u8 srcCount:5; - u8 state:3; - u8 time2; -}; - -struct PaletteStruct -{ - const struct PaletteStructTemplate *template; - bool32 active:1; - bool32 flag:1; - u32 baseDestOffset:9; - u32 destOffset:10; - u32 srcIndex:7; - u8 countdown1; - u8 countdown2; -}; - -static void PaletteStruct_Copy(struct PaletteStruct *, u32 *); -static void PaletteStruct_Blend(struct PaletteStruct *, u32 *); -static void PaletteStruct_TryEnd(struct PaletteStruct *); -static void PaletteStruct_Reset(u8); -static u8 PaletteStruct_GetPalNum(u16); -static u8 UpdateNormalPaletteFade(void); -static void BeginFastPaletteFadeInternal(u8); -static u8 UpdateFastPaletteFade(void); -static u8 UpdateHardwarePaletteFade(void); +static u32 UpdateNormalPaletteFade(void); +static void BeginFastPaletteFadeInternal(u32); +static u32 UpdateFastPaletteFade(void); +static u32 UpdateHardwarePaletteFade(void); static void UpdateBlendRegisters(void); -static bool8 IsSoftwarePaletteFadeFinishing(void); +static bool32 IsSoftwarePaletteFadeFinishing(void); static void Task_BlendPalettesGradually(u8 taskId); // palette buffers require alignment with agbcc because // unaligned word reads are issued in BlendPalette otherwise 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 sPlttBufferTransferPending = 0; -EWRAM_DATA u8 ALIGNED(2) gPaletteDecompressionBuffer[PLTT_SIZE] = {0}; - -static const struct PaletteStructTemplate sDummyPaletteStructTemplate = { - .id = 0xFFFF, - .state = 1 -}; static const u8 sRoundedDownGrayscaleMap[] = { 0, 0, 0, 0, 0, @@ -80,20 +38,20 @@ static const u8 sRoundedDownGrayscaleMap[] = { 31, 31 }; -void LoadCompressedPalette(const u32 *src, u16 offset, u16 size) +void LoadCompressedPalette(const u32 *src, u32 offset, u32 size) { - LZDecompressWram(src, gPaletteDecompressionBuffer); - CpuCopy16(gPaletteDecompressionBuffer, &gPlttBufferUnfaded[offset], size); - CpuCopy16(gPaletteDecompressionBuffer, &gPlttBufferFaded[offset], size); + LZDecompressWram(src, gDecompressionBuffer); + CpuCopy16(gDecompressionBuffer, &gPlttBufferUnfaded[offset], size); + CpuCopy16(gDecompressionBuffer, &gPlttBufferFaded[offset], size); } -void LoadPalette(const void *src, u16 offset, u16 size) +void LoadPalette(const void *src, u32 offset, u32 size) { CpuCopy16(src, &gPlttBufferUnfaded[offset], size); CpuCopy16(src, &gPlttBufferFaded[offset], size); } -void FillPalette(u16 value, u16 offset, u16 size) +void FillPalette(u32 value, u32 offset, u32 size) { CpuFill16(value, &gPlttBufferUnfaded[offset], size); CpuFill16(value, &gPlttBufferFaded[offset], size); @@ -112,10 +70,9 @@ void TransferPlttBuffer(void) } } -u8 UpdatePaletteFade(void) +u32 UpdatePaletteFade(void) { - u8 result; - u8 dummy = 0; + u32 result; if (sPlttBufferTransferPending) return PALETTE_FADE_STATUS_LOADING; @@ -127,37 +84,19 @@ u8 UpdatePaletteFade(void) else result = UpdateHardwarePaletteFade(); - sPlttBufferTransferPending = gPaletteFade.multipurpose1 | dummy; + sPlttBufferTransferPending = gPaletteFade.multipurpose1; return result; } void ResetPaletteFade(void) { - u8 i; - - for (i = 0; i < NUM_PALETTE_STRUCTS; i++) - PaletteStruct_Reset(i); - ResetPaletteFadeControl(); } -static void ReadPlttIntoBuffers(void) -{ - u16 i; - u16 *pltt = (u16 *)PLTT; - - for (i = 0; i < PLTT_BUFFER_SIZE; i++) - { - gPlttBufferUnfaded[i] = pltt[i]; - gPlttBufferFaded[i] = pltt[i]; - } -} - -bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targetY, u16 blendColor) +bool32 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targetY, u32 blendColor) { u8 temp; - u16 color = blendColor; if (gPaletteFade.active) { @@ -178,7 +117,7 @@ bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targe gPaletteFade_delay = delay; gPaletteFade.y = startY; gPaletteFade.targetY = targetY; - gPaletteFade.blendColor = color; + gPaletteFade.blendColor = blendColor; gPaletteFade.active = TRUE; gPaletteFade.mode = NORMAL_FADE; @@ -200,165 +139,6 @@ bool8 BeginNormalPaletteFade(u32 selectedPalettes, s8 delay, u8 startY, u8 targe } } -static bool8 UNUSED BeginPlttFade(u32 selectedPalettes, u8 delay, u8 startY, u8 targetY, u16 blendColor) -{ - ReadPlttIntoBuffers(); - return BeginNormalPaletteFade(selectedPalettes, delay, startY, targetY, blendColor); -} - -static void UNUSED PaletteStruct_Run(u8 a1, u32 *unkFlags) -{ - u8 i; - - for (i = 0; i < NUM_PALETTE_STRUCTS; i++) - { - struct PaletteStruct *palstruct = &sPaletteStructs[i]; - if (palstruct->active) - { - if (palstruct->template->pst_field_8_0 == a1) - { - if (palstruct->srcIndex == palstruct->template->srcCount) - { - PaletteStruct_TryEnd(palstruct); - if (!palstruct->active) - continue; - } - if (palstruct->countdown1 == 0) - PaletteStruct_Copy(palstruct, unkFlags); - else - palstruct->countdown1--; - - PaletteStruct_Blend(palstruct, unkFlags); - } - } - } -} - -static void PaletteStruct_Copy(struct PaletteStruct *palStruct, u32 *unkFlags) -{ - s32 srcIndex; - s32 srcCount; - u8 i = 0; - u16 srcOffset = palStruct->srcIndex * palStruct->template->size; - - if (!palStruct->template->pst_field_8_0) - { - while (i < palStruct->template->size) - { - gPlttBufferUnfaded[palStruct->destOffset] = palStruct->template->src[srcOffset]; - gPlttBufferFaded[palStruct->destOffset] = palStruct->template->src[srcOffset]; - i++; - palStruct->destOffset++; - srcOffset++; - } - } - else - { - while (i < palStruct->template->size) - { - gPlttBufferFaded[palStruct->destOffset] = palStruct->template->src[srcOffset]; - i++; - palStruct->destOffset++; - srcOffset++; - } - } - - palStruct->destOffset = palStruct->baseDestOffset; - palStruct->countdown1 = palStruct->template->time1; - palStruct->srcIndex++; - - srcIndex = palStruct->srcIndex; - srcCount = palStruct->template->srcCount; - - if (srcIndex >= srcCount) - { - if (palStruct->countdown2) - palStruct->countdown2--; - palStruct->srcIndex = 0; - } - - *unkFlags |= 1 << (palStruct->baseDestOffset >> 4); -} - -static void PaletteStruct_Blend(struct PaletteStruct *palStruct, u32 *unkFlags) -{ - if (gPaletteFade.active && ((1 << (palStruct->baseDestOffset >> 4)) & gPaletteFade_selectedPalettes)) - { - if (!palStruct->template->pst_field_8_0) - { - if (gPaletteFade.delayCounter != gPaletteFade_delay) - { - BlendPalette( - palStruct->baseDestOffset, - palStruct->template->size, - gPaletteFade.y, - gPaletteFade.blendColor); - } - } - else - { - if (!gPaletteFade.delayCounter) - { - if (palStruct->countdown1 != palStruct->template->time1) - { - u32 srcOffset = palStruct->srcIndex * palStruct->template->size; - u8 i; - - for (i = 0; i < palStruct->template->size; i++) - gPlttBufferFaded[palStruct->baseDestOffset + i] = palStruct->template->src[srcOffset + i]; - } - } - } - } -} - -static void PaletteStruct_TryEnd(struct PaletteStruct *pal) -{ - if (pal->countdown2 == 0) - { - s32 state = pal->template->state; - - if (state == 0) - { - pal->srcIndex = 0; - pal->countdown1 = pal->template->time1; - pal->countdown2 = pal->template->time2; - pal->destOffset = pal->baseDestOffset; - } - else - { - if (state < 0) - return; - if (state > 2) - return; - PaletteStruct_ResetById(pal->template->id); - } - } - else - { - pal->countdown2--; - } -} - -void PaletteStruct_ResetById(u16 id) -{ - u8 paletteNum = PaletteStruct_GetPalNum(id); - if (paletteNum != NUM_PALETTE_STRUCTS) - PaletteStruct_Reset(paletteNum); -} - -static void PaletteStruct_Reset(u8 paletteNum) -{ - sPaletteStructs[paletteNum].template = &sDummyPaletteStructTemplate; - sPaletteStructs[paletteNum].active = FALSE; - sPaletteStructs[paletteNum].baseDestOffset = 0; - sPaletteStructs[paletteNum].destOffset = 0; - sPaletteStructs[paletteNum].srcIndex = 0; - sPaletteStructs[paletteNum].flag = 0; - sPaletteStructs[paletteNum].countdown1 = 0; - sPaletteStructs[paletteNum].countdown2 = 0; -} - void ResetPaletteFadeControl(void) { gPaletteFade.multipurpose1 = 0; @@ -379,32 +159,7 @@ void ResetPaletteFadeControl(void) gPaletteFade.deltaY = 2; } -static void UNUSED PaletteStruct_SetUnusedFlag(u16 id) -{ - u8 paletteNum = PaletteStruct_GetPalNum(id); - if (paletteNum != NUM_PALETTE_STRUCTS) - sPaletteStructs[paletteNum].flag = TRUE; -} - -static void UNUSED PaletteStruct_ClearUnusedFlag(u16 id) -{ - u8 paletteNum = PaletteStruct_GetPalNum(id); - if (paletteNum != NUM_PALETTE_STRUCTS) - sPaletteStructs[paletteNum].flag = FALSE; -} - -static u8 PaletteStruct_GetPalNum(u16 id) -{ - u8 i; - - for (i = 0; i < NUM_PALETTE_STRUCTS; i++) - if (sPaletteStructs[i].template->id == id) - return i; - - return NUM_PALETTE_STRUCTS; -} - -static u8 UpdateNormalPaletteFade(void) +static u32 UpdateNormalPaletteFade(void) { u16 paletteOffset; u16 selectedPalettes; @@ -498,7 +253,7 @@ void InvertPlttBuffer(u32 selectedPalettes) { if (selectedPalettes & 1) { - u8 i; + u32 i; for (i = 0; i < 16; i++) gPlttBufferFaded[paletteOffset + i] = ~gPlttBufferFaded[paletteOffset + i]; } @@ -515,7 +270,7 @@ void TintPlttBuffer(u32 selectedPalettes, s8 r, s8 g, s8 b) { if (selectedPalettes & 1) { - u8 i; + u32 i; for (i = 0; i < 16; i++) { struct PlttData *data = (struct PlttData *)&gPlttBufferFaded[paletteOffset + i]; @@ -546,13 +301,13 @@ void UnfadePlttBuffer(u32 selectedPalettes) } } -void BeginFastPaletteFade(u8 submode) +void BeginFastPaletteFade(u32 submode) { gPaletteFade.deltaY = 2; BeginFastPaletteFadeInternal(submode); } -static void BeginFastPaletteFadeInternal(u8 submode) +static void BeginFastPaletteFadeInternal(u32 submode) { gPaletteFade.y = 31; gPaletteFade_submode = submode & 0x3F; @@ -568,9 +323,9 @@ static void BeginFastPaletteFadeInternal(u8 submode) UpdatePaletteFade(); } -static u8 UpdateFastPaletteFade(void) +static u32 UpdateFastPaletteFade(void) { - u16 i; + u32 i; u16 paletteOffsetStart; u16 paletteOffsetEnd; s8 r0; @@ -726,7 +481,7 @@ static u8 UpdateFastPaletteFade(void) return gPaletteFade.active ? PALETTE_FADE_STATUS_ACTIVE : PALETTE_FADE_STATUS_DONE; } -void BeginHardwarePaletteFade(u8 blendCnt, u8 delay, u8 y, u8 targetY, u8 shouldResetBlendRegisters) +void BeginHardwarePaletteFade(u32 blendCnt, u32 delay, u32 y, u32 targetY, u32 shouldResetBlendRegisters) { gPaletteFade_blendCnt = blendCnt; gPaletteFade.delayCounter = delay; @@ -744,7 +499,7 @@ void BeginHardwarePaletteFade(u8 blendCnt, u8 delay, u8 y, u8 targetY, u8 should gPaletteFade.yDec = 1; } -static u8 UpdateHardwarePaletteFade(void) +static u32 UpdateHardwarePaletteFade(void) { if (!gPaletteFade.active) return PALETTE_FADE_STATUS_DONE; @@ -805,7 +560,7 @@ static void UpdateBlendRegisters(void) } } -static bool8 IsSoftwarePaletteFadeFinishing(void) +static bool32 IsSoftwarePaletteFadeFinishing(void) { if (gPaletteFade.softwareFadeFinishing) { @@ -828,7 +583,7 @@ static bool8 IsSoftwarePaletteFadeFinishing(void) } } -void BlendPalettes(u32 selectedPalettes, u8 coeff, u16 color) +void BlendPalettes(u32 selectedPalettes, u8 coeff, u32 color) { u16 paletteOffset; @@ -840,7 +595,7 @@ void BlendPalettes(u32 selectedPalettes, u8 coeff, u16 color) } } -void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u16 color) +void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u32 color) { void *src = gPlttBufferUnfaded; void *dest = gPlttBufferFaded; @@ -848,10 +603,10 @@ void BlendPalettesUnfaded(u32 selectedPalettes, u8 coeff, u16 color) BlendPalettes(selectedPalettes, coeff, color); } -void TintPalette_GrayScale(u16 *palette, u16 count) +void TintPalette_GrayScale(u16 *palette, u32 count) { - s32 r, g, b, i; - u32 gray; + s32 r, g, b; + u32 i, gray; for (i = 0; i < count; i++) { @@ -865,10 +620,10 @@ void TintPalette_GrayScale(u16 *palette, u16 count) } } -void TintPalette_GrayScale2(u16 *palette, u16 count) +void TintPalette_GrayScale2(u16 *palette, u32 count) { - s32 r, g, b, i; - u32 gray; + s32 r, g, b; + u32 i, gray; for (i = 0; i < count; i++) { @@ -887,10 +642,10 @@ void TintPalette_GrayScale2(u16 *palette, u16 count) } } -void TintPalette_SepiaTone(u16 *palette, u16 count) +void TintPalette_SepiaTone(u16 *palette, u32 count) { - s32 r, g, b, i; - u32 gray; + s32 r, g, b; + u32 i, gray; for (i = 0; i < count; i++) { @@ -911,10 +666,10 @@ void TintPalette_SepiaTone(u16 *palette, u16 count) } } -void TintPalette_CustomTone(u16 *palette, u16 count, u16 rTone, u16 gTone, u16 bTone) +void TintPalette_CustomTone(u16 *palette, u32 count, u16 rTone, u16 gTone, u16 bTone) { - s32 r, g, b, i; - u32 gray; + s32 r, g, b; + u32 i, gray; for (i = 0; i < count; i++) { diff --git a/src/party_menu.c b/src/party_menu.c index 5214ddc2be..5def34b3eb 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -1353,7 +1353,7 @@ static void DrawCancelConfirmButtons(void) bool8 IsMultiBattle(void) { - if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gMain.inBattle) + if (gBattleTypeFlags & BATTLE_TYPE_MULTI && IsDoubleBattle() && gMain.inBattle) return TRUE; else return FALSE; @@ -6413,13 +6413,13 @@ static void Task_TryItemUseFormChange(u8 taskId) case 6: if (!IsPartyMenuTextPrinterActive()) { - if (gSpecialVar_ItemId == ITEM_ROTOM_CATALOG) //only for rotom currently + 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 (I_ROTOM_CATALOG_THUNDER_SHOCK < GEN_9 && gSpecialVar_0x8000 == ROTOM_BASE_MOVE) { if (!DoesMonHaveAnyMoves(mon)) FormChangeTeachMove(taskId, gSpecialVar_0x8000, gPartyMenu.slotId); @@ -6517,42 +6517,42 @@ bool32 TryMultichoiceFormChange(u8 taskId) static void CursorCb_CatalogBulb(u8 taskId) { gSpecialVar_Result = 0; - gSpecialVar_0x8000 = MOVE_THUNDER_SHOCK; + gSpecialVar_0x8000 = ROTOM_BASE_MOVE; TryMultichoiceFormChange(taskId); } static void CursorCb_CatalogOven(u8 taskId) { gSpecialVar_Result = 1; - gSpecialVar_0x8000 = MOVE_OVERHEAT; + gSpecialVar_0x8000 = ROTOM_HEAT_MOVE; TryMultichoiceFormChange(taskId); } static void CursorCb_CatalogWashing(u8 taskId) { gSpecialVar_Result = 2; - gSpecialVar_0x8000 = MOVE_HYDRO_PUMP; + gSpecialVar_0x8000 = ROTOM_WASH_MOVE; TryMultichoiceFormChange(taskId); } static void CursorCb_CatalogFridge(u8 taskId) { gSpecialVar_Result = 3; - gSpecialVar_0x8000 = MOVE_BLIZZARD; + gSpecialVar_0x8000 = ROTOM_FROST_MOVE; TryMultichoiceFormChange(taskId); } static void CursorCb_CatalogFan(u8 taskId) { gSpecialVar_Result = 4; - gSpecialVar_0x8000 = MOVE_AIR_SLASH; + gSpecialVar_0x8000 = ROTOM_FAN_MOVE; TryMultichoiceFormChange(taskId); } static void CursorCb_CatalogMower(u8 taskId) { gSpecialVar_Result = 5; - gSpecialVar_0x8000 = MOVE_LEAF_STORM; + gSpecialVar_0x8000 = ROTOM_MOW_MOVE; TryMultichoiceFormChange(taskId); } diff --git a/src/pokeball.c b/src/pokeball.c index 914455af5a..21557d973a 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -1571,12 +1571,8 @@ void FreeBallGfx(u8 ballId) static u16 GetBattlerPokeballItemId(u8 battlerId) { - struct Pokemon *mon, *illusionMon; - - if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) - mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]]; - else - mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]]; + struct Pokemon *illusionMon; + struct Pokemon *mon = GetPartyBattlerData(battlerId); illusionMon = GetIllusionMonPtr(battlerId); if (illusionMon != NULL) diff --git a/src/pokeblock.c b/src/pokeblock.c index e01e821f7e..b68fe16ce3 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -130,6 +130,11 @@ static void ReturnToPokeblockCaseOnField(void); static void CreateTossPokeblockYesNoMenu(u8); static void TossPokeblock(u8); +static const u8 sText_StowCase[] = _("Stow CASE."); +static const u8 sText_LvVar1[] = _("{LV}{STR_VAR_1}"); +static const u8 sText_ThrowAwayVar1[] = _("Throw away this\n{STR_VAR_1}?"); +static const u8 sText_Var1ThrownAway[] = _("The {STR_VAR_1}\nwas thrown away."); + EWRAM_DATA static struct PokeblockSavedData sSavedPokeblockData = {0}; EWRAM_DATA static struct PokeblockMenuStruct *sPokeblockMenu = NULL; @@ -197,20 +202,20 @@ static const struct BgTemplate sBgTemplatesForPokeblockMenu[] = const u8 *const gPokeblockNames[] = { [PBLOCK_CLR_NONE] = NULL, - [PBLOCK_CLR_RED] = gText_RedPokeblock, - [PBLOCK_CLR_BLUE] = gText_BluePokeblock, - [PBLOCK_CLR_PINK] = gText_PinkPokeblock, - [PBLOCK_CLR_GREEN] = gText_GreenPokeblock, - [PBLOCK_CLR_YELLOW] = gText_YellowPokeblock, - [PBLOCK_CLR_PURPLE] = gText_PurplePokeblock, - [PBLOCK_CLR_INDIGO] = gText_IndigoPokeblock, - [PBLOCK_CLR_BROWN] = gText_BrownPokeblock, - [PBLOCK_CLR_LITE_BLUE] = gText_LiteBluePokeblock, - [PBLOCK_CLR_OLIVE] = gText_OlivePokeblock, - [PBLOCK_CLR_GRAY] = gText_GrayPokeblock, - [PBLOCK_CLR_BLACK] = gText_BlackPokeblock, - [PBLOCK_CLR_WHITE] = gText_WhitePokeblock, - [PBLOCK_CLR_GOLD] = gText_GoldPokeblock + [PBLOCK_CLR_RED] = COMPOUND_STRING("RED {POKEBLOCK}"), + [PBLOCK_CLR_BLUE] = COMPOUND_STRING("BLUE {POKEBLOCK}"), + [PBLOCK_CLR_PINK] = COMPOUND_STRING("PINK {POKEBLOCK}"), + [PBLOCK_CLR_GREEN] = COMPOUND_STRING("GREEN {POKEBLOCK}"), + [PBLOCK_CLR_YELLOW] = COMPOUND_STRING("YELLOW {POKEBLOCK}"), + [PBLOCK_CLR_PURPLE] = COMPOUND_STRING("PURPLE {POKEBLOCK}"), + [PBLOCK_CLR_INDIGO] = COMPOUND_STRING("INDIGO {POKEBLOCK}"), + [PBLOCK_CLR_BROWN] = COMPOUND_STRING("BROWN {POKEBLOCK}"), + [PBLOCK_CLR_LITE_BLUE] = COMPOUND_STRING("LITEBLUE {POKEBLOCK}"), + [PBLOCK_CLR_OLIVE] = COMPOUND_STRING("OLIVE {POKEBLOCK}"), + [PBLOCK_CLR_GRAY] = COMPOUND_STRING("GRAY {POKEBLOCK}"), + [PBLOCK_CLR_BLACK] = COMPOUND_STRING("BLACK {POKEBLOCK}"), + [PBLOCK_CLR_WHITE] = COMPOUND_STRING("WHITE {POKEBLOCK}"), + [PBLOCK_CLR_GOLD] = COMPOUND_STRING("GOLD {POKEBLOCK}") }; static const struct MenuAction sPokeblockMenuActions[] = @@ -702,11 +707,11 @@ static void DrawPokeblockMenuTitleText(void) const u8 *itemName = ItemId_GetName(ITEM_POKEBLOCK_CASE); PrintOnPokeblockWindow(WIN_TITLE, itemName, GetStringCenterAlignXOffset(FONT_NORMAL, itemName, 0x48)); - PrintOnPokeblockWindow(WIN_SPICY, gText_Spicy, 0); - PrintOnPokeblockWindow(WIN_DRY, gText_Dry, 0); - PrintOnPokeblockWindow(WIN_SWEET, gText_Sweet, 0); - PrintOnPokeblockWindow(WIN_BITTER, gText_Bitter, 0); - PrintOnPokeblockWindow(WIN_SOUR, gText_Sour, 0); + PrintOnPokeblockWindow(WIN_SPICY, COMPOUND_STRING("SPICY"), 0); + PrintOnPokeblockWindow(WIN_DRY, COMPOUND_STRING("DRY"), 0); + PrintOnPokeblockWindow(WIN_SWEET, COMPOUND_STRING("SWEET"), 0); + PrintOnPokeblockWindow(WIN_BITTER, COMPOUND_STRING("BITTER"), 0); + PrintOnPokeblockWindow(WIN_SOUR, COMPOUND_STRING("SOUR"), 0); for (i = 0; i < WIN_ACTIONS_TALL; i++) PutWindowTilemap(i); @@ -723,7 +728,7 @@ static void UpdatePokeblockList(void) sPokeblockMenu->items[i].id = i; } - StringCopy(sPokeblockMenu->menuItemsStrings[i], gText_StowCase); + StringCopy(sPokeblockMenu->menuItemsStrings[i], sText_StowCase); sPokeblockMenu->items[i].name = sPokeblockMenu->menuItemsStrings[i]; sPokeblockMenu->items[i].id = LIST_CANCEL; @@ -744,7 +749,7 @@ static void PutPokeblockListMenuString(u8 *dst, u16 pkblId) *(txtPtr++) = CHAR_BLOCK_1; ConvertIntToDecimalStringN(gStringVar1, GetHighestPokeblocksFlavorLevel(pkblock), STR_CONV_MODE_LEFT_ALIGN, 3); - StringExpandPlaceholders(txtPtr, gText_LvVar1); + StringExpandPlaceholders(txtPtr, sText_LvVar1); } static void MovePokeblockMenuCursor(s32 pkblId, bool8 onInit, struct ListMenu *list) @@ -1203,7 +1208,7 @@ static void PokeblockAction_Toss(u8 taskId) ClearStdWindowAndFrameToTransparent(tWindowId, FALSE); StringCopy(gStringVar1, gPokeblockNames[gSaveBlock1Ptr->pokeblocks[gSpecialVar_ItemId].color]); - StringExpandPlaceholders(gStringVar4, gText_ThrowAwayVar1); + StringExpandPlaceholders(gStringVar4, sText_ThrowAwayVar1); DisplayMessageAndContinueTask(taskId, WIN_TOSS_MSG, 10, 13, FONT_NORMAL, GetPlayerTextSpeedDelay(), gStringVar4, CreateTossPokeblockYesNoMenu); } @@ -1214,7 +1219,7 @@ static void CreateTossPokeblockYesNoMenu(u8 taskId) static void TossedPokeblockMessage(u8 taskId) { - StringExpandPlaceholders(gStringVar4, gText_Var1ThrownAway); + StringExpandPlaceholders(gStringVar4, sText_Var1ThrownAway); DisplayMessageAndContinueTask(taskId, WIN_TOSS_MSG, 10, 13, FONT_NORMAL, GetPlayerTextSpeedDelay(), gStringVar4, TossPokeblock); } diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c index f31896a4cb..f79f35a781 100644 --- a/src/pokeblock_feed.c +++ b/src/pokeblock_feed.c @@ -96,6 +96,10 @@ static u8 CreatePokeblockCaseSpriteForFeeding(void); static u8 CreateMonSprite(struct Pokemon *); static void SpriteCB_ThrownPokeblock(struct Sprite *); +static const u8 sText_Var1AteTheVar2[] = _("{STR_VAR_1} ate the\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}"); +static const u8 sText_Var1HappilyAteVar2[] = _("{STR_VAR_1} happily ate the\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}"); +static const u8 sText_Var1DisdainfullyAteVar2[] = _("{STR_VAR_1} disdainfully ate the\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}"); + EWRAM_DATA static struct PokeblockFeed *sPokeblockFeed = NULL; EWRAM_DATA static struct CompressedSpritePalette sPokeblockSpritePal = {0}; @@ -792,11 +796,11 @@ static void Task_PrintAtePokeblockMessage(u8 taskId) PokeblockCopyName(pokeblock, gStringVar2); if (gPokeblockGain == 0) - StringExpandPlaceholders(gStringVar4, gText_Var1AteTheVar2); + StringExpandPlaceholders(gStringVar4, sText_Var1AteTheVar2); else if (gPokeblockGain > 0) - StringExpandPlaceholders(gStringVar4, gText_Var1HappilyAteVar2); + StringExpandPlaceholders(gStringVar4, sText_Var1HappilyAteVar2); else - StringExpandPlaceholders(gStringVar4, gText_Var1DisdainfullyAteVar2); + StringExpandPlaceholders(gStringVar4, sText_Var1DisdainfullyAteVar2); gTextFlags.canABSpeedUpPrint = TRUE; AddTextPrinterParameterized2(0, FONT_NORMAL, gStringVar4, GetPlayerTextSpeedDelay(), NULL, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY); diff --git a/src/pokedex_plus_hgss.c b/src/pokedex_plus_hgss.c index fa5279441b..e3b7793bbd 100644 --- a/src/pokedex_plus_hgss.c +++ b/src/pokedex_plus_hgss.c @@ -3511,14 +3511,14 @@ static void SpriteCB_DexListStartMenuCursor(struct Sprite *sprite) //************************************ //Stat bars on main screen, code by DizzyEgg, idea by Jaizu -#define PIXEL_COORDS_TO_OFFSET(x, y)( \ -/*Add tiles by X*/ \ -((y / 8) * 32 * 8) \ -/*Add tiles by X*/ \ -+ ((x / 8) * 32) \ -/*Add pixels by Y*/ \ -+ ((((y) - ((y / 8) * 8))) * 4) \ -/*Add pixels by X*/ \ +#define PIXEL_COORDS_TO_OFFSET(x, y)( \ +/*Add tiles by X*/ \ +((y / 8) * 32 * 8) \ +/*Add tiles by X*/ \ ++ ((x / 8) * 32) \ +/*Add pixels by Y*/ \ ++ ((((y) - ((y / 8) * 8))) * 4) \ +/*Add pixels by X*/ \ + ((((x) - ((x / 8) * 8)) / 2))) static inline void WritePixel(u8 *dst, u32 x, u32 y, u32 value) diff --git a/src/pokemon.c b/src/pokemon.c index 2b731ef13c..faa1a65aef 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2,6 +2,7 @@ #include "malloc.h" #include "apprentice.h" #include "battle.h" +#include "battle_ai_switch_items.h" #include "battle_anim.h" #include "battle_controllers.h" #include "battle_message.h" @@ -59,6 +60,7 @@ #include "constants/union_room.h" #include "constants/weather.h" #include "wild_encounter.h" +#include "ev_caps.h" #define FRIENDSHIP_EVO_THRESHOLD ((P_FRIENDSHIP_EVO_THRESHOLD >= GEN_9) ? 160 : 220) @@ -1108,7 +1110,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, u16 checksum; u8 i; u8 availableIVs[NUM_STATS]; - u8 selectedIvs[LEGENDARY_PERFECT_IV_COUNT]; + u8 selectedIvs[NUM_STATS]; bool32 isShiny; ZeroBoxMonData(boxMon); @@ -1225,21 +1227,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, iv = (value & (MAX_IV_MASK << 10)) >> 10; SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &iv); - if (gSpeciesInfo[species].allPerfectIVs) - { - iv = MAX_PER_STAT_IVS; - SetBoxMonData(boxMon, MON_DATA_HP_IV, &iv); - SetBoxMonData(boxMon, MON_DATA_ATK_IV, &iv); - SetBoxMonData(boxMon, MON_DATA_DEF_IV, &iv); - SetBoxMonData(boxMon, MON_DATA_SPEED_IV, &iv); - SetBoxMonData(boxMon, MON_DATA_SPATK_IV, &iv); - SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &iv); - } - else if (P_LEGENDARY_PERFECT_IVS >= GEN_6 - && (gSpeciesInfo[species].isLegendary - || gSpeciesInfo[species].isMythical - || gSpeciesInfo[species].isUltraBeast - || gSpeciesInfo[species].isTotem)) + if (gSpeciesInfo[species].perfectIVCount != 0) { iv = MAX_PER_STAT_IVS; // Initialize a list of IV indices. @@ -1248,14 +1236,14 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, availableIVs[i] = i; } - // Select the 3 IVs that will be perfected. - for (i = 0; i < LEGENDARY_PERFECT_IV_COUNT; i++) + // Select the IVs that will be perfected. + for (i = 0; i < NUM_STATS && i < gSpeciesInfo[species].perfectIVCount; i++) { u8 index = Random() % (NUM_STATS - i); selectedIvs[i] = availableIVs[index]; RemoveIVIndexFromList(availableIVs, index); } - for (i = 0; i < LEGENDARY_PERFECT_IV_COUNT; i++) + for (i = 0; i < NUM_STATS && i < gSpeciesInfo[species].perfectIVCount; i++) { switch (selectedIvs[i]) { @@ -1812,29 +1800,19 @@ void CalculateMonStats(struct Pokemon *mon) CALC_STAT(baseSpAttack, spAttackIV, spAttackEV, STAT_SPATK, MON_DATA_SPATK) CALC_STAT(baseSpDefense, spDefenseIV, spDefenseEV, STAT_SPDEF, MON_DATA_SPDEF) - if (species == SPECIES_SHEDINJA) - { - if (currentHP != 0 || oldMaxHP == 0) - currentHP = 1; - else - return; - } - else - { - if (currentHP == 0 && oldMaxHP == 0) - currentHP = newMaxHP; - else if (currentHP != 0) - { - if (newMaxHP > oldMaxHP) - currentHP += newMaxHP - oldMaxHP; - if (currentHP <= 0) - currentHP = 1; - if (currentHP > newMaxHP) - currentHP = newMaxHP; - } - else - return; - } + // Since a pokemon's maxHP data could either not have + // been initialized at this point or this pokemon is + // just fainted, the check for oldMaxHP is important. + if (currentHP == 0 && oldMaxHP != 0) + return; + + // Only add to currentHP if newMaxHP went up. + if (newMaxHP > oldMaxHP) + currentHP += newMaxHP - oldMaxHP; + + // Ensure currentHP does not surpass newMaxHP. + if (currentHP > newMaxHP) + currentHP = newMaxHP; SetMonData(mon, MON_DATA_HP, ¤tHP); } @@ -2093,14 +2071,14 @@ u8 CountAliveMonsInBattle(u8 caseId, u32 battler) case BATTLE_ALIVE_EXCEPT_BATTLER: for (i = 0; i < MAX_BATTLERS_COUNT; i++) { - if (i != battler && !(gAbsentBattlerFlags & gBitTable[i])) + if (i != battler && !(gAbsentBattlerFlags & (1u << i))) retVal++; } break; case BATTLE_ALIVE_SIDE: for (i = 0; i < MAX_BATTLERS_COUNT; i++) { - if (GetBattlerSide(i) == GetBattlerSide(battler) && !(gAbsentBattlerFlags & gBitTable[i])) + if (GetBattlerSide(i) == GetBattlerSide(battler) && !(gAbsentBattlerFlags & (1u << i))) retVal++; } break; @@ -2113,7 +2091,7 @@ u8 GetDefaultMoveTarget(u8 battlerId) { u8 opposing = BATTLE_OPPOSITE(GetBattlerSide(battlerId)); - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + if (!IsDoubleBattle()) return GetBattlerAtPosition(opposing); if (CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_BATTLER, battlerId) > 1) { @@ -2128,7 +2106,7 @@ u8 GetDefaultMoveTarget(u8 battlerId) } else { - if ((gAbsentBattlerFlags & gBitTable[opposing])) + if ((gAbsentBattlerFlags & (1u << opposing))) return GetBattlerAtPosition(BATTLE_PARTNER(opposing)); else return GetBattlerAtPosition(opposing); @@ -2704,7 +2682,7 @@ u32 GetBoxMonData3(struct BoxPokemon *boxMon, s32 field, u8 *data) || substruct1->move2 == move || substruct1->move3 == move || substruct1->move4 == move) - retVal |= gBitTable[i]; + retVal |= (1u << i); i++; } } @@ -3682,9 +3660,9 @@ void PokemonToBattleMon(struct Pokemon *src, struct BattlePokemon *dst) dst->spDefense = GetMonData(src, MON_DATA_SPDEF, NULL); dst->abilityNum = GetMonData(src, MON_DATA_ABILITY_NUM, NULL); dst->otId = GetMonData(src, MON_DATA_OT_ID, NULL); - dst->type1 = gSpeciesInfo[dst->species].types[0]; - dst->type2 = gSpeciesInfo[dst->species].types[1]; - dst->type3 = TYPE_MYSTERY; + dst->types[0] = gSpeciesInfo[dst->species].types[0]; + dst->types[1] = gSpeciesInfo[dst->species].types[1]; + dst->types[2] = TYPE_MYSTERY; dst->isShiny = IsMonShiny(src); dst->ability = GetAbilityBySpecies(dst->species, dst->abilityNum); GetMonData(src, MON_DATA_NICKNAME, nickname); @@ -3765,6 +3743,9 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov s8 evChange; u16 evCount; + // Determine the EV cap to use + u32 maxAllowedEVs = !B_EV_ITEMS_CAP ? MAX_TOTAL_EVS : GetCurrentEVCap(); + // Get item hold effect heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL); if (heldItem == ITEM_ENIGMA_BERRY_E_READER) @@ -3892,27 +3873,31 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov if (evChange > 0) // Increasing EV (HP or Atk) { - // Has EV increase limit already been reached? - if (evCount >= MAX_TOTAL_EVS) + // Check if the total EV limit is reached + if (evCount >= maxAllowedEVs) return TRUE; - if (itemEffect[10] & ITEM10_IS_VITAMIN) - evCap = EV_ITEM_RAISE_LIMIT; - else - evCap = MAX_PER_STAT_EVS; - + // Ensure the increase does not exceed the max EV per stat (252) + evCap = (itemEffect[10] & ITEM10_IS_VITAMIN) ? EV_ITEM_RAISE_LIMIT : MAX_PER_STAT_EVS; + + // Check if the per-stat limit is reached if (dataSigned >= evCap) - break; - - // Limit the increase + return TRUE; // Prevents item use if the per-stat cap is already reached + if (dataSigned + evChange > evCap) - temp2 = evCap - (dataSigned + evChange) + evChange; + temp2 = evCap - dataSigned; else temp2 = evChange; - if (evCount + temp2 > MAX_TOTAL_EVS) - temp2 += MAX_TOTAL_EVS - (evCount + temp2); + // Ensure the total EVs do not exceed the maximum allowed (510) + if (evCount + temp2 > maxAllowedEVs) + temp2 = maxAllowedEVs - evCount; + // Prevent item use if no EVs can be increased + if (temp2 == 0) + return TRUE; + + // Apply the EV increase dataSigned += temp2; } else if (evChange < 0) // Decreasing EV (HP or Atk) @@ -4077,27 +4062,31 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov evChange = temp2; if (evChange > 0) // Increasing EV { - // Has EV increase limit already been reached? - if (evCount >= MAX_TOTAL_EVS) + // Check if the total EV limit is reached + if (evCount >= maxAllowedEVs) return TRUE; - if (itemEffect[10] & ITEM10_IS_VITAMIN) - evCap = EV_ITEM_RAISE_LIMIT; - else - evCap = MAX_PER_STAT_EVS; - + // Ensure the increase does not exceed the max EV per stat (252) + evCap = (itemEffect[10] & ITEM10_IS_VITAMIN) ? EV_ITEM_RAISE_LIMIT : MAX_PER_STAT_EVS; + + // Check if the per-stat limit is reached if (dataSigned >= evCap) - break; - - // Limit the increase + return TRUE; // Prevents item use if the per-stat cap is already reached + if (dataSigned + evChange > evCap) - temp2 = evCap - (dataSigned + evChange) + evChange; + temp2 = evCap - dataSigned; else temp2 = evChange; - if (evCount + temp2 > MAX_TOTAL_EVS) - temp2 += MAX_TOTAL_EVS - (evCount + temp2); + // Ensure the total EVs do not exceed the maximum allowed (510) + if (evCount + temp2 > maxAllowedEVs) + temp2 = maxAllowedEVs - evCount; + // Prevent item use if no EVs can be increased + if (temp2 == 0) + return TRUE; + + // Apply the EV increase dataSigned += temp2; } else if (evChange < 0) // Decreasing EV @@ -4410,7 +4399,7 @@ static u32 GetGMaxTargetSpecies(u32 species) return SPECIES_NONE; } -u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, struct Pokemon *tradePartner) +u16 GetEvolutionTargetSpecies(struct Pokemon *mon, enum EvolutionMode mode, u16 evolutionItem, struct Pokemon *tradePartner) { int i, j; u16 targetSpecies = SPECIES_NONE; @@ -5208,6 +5197,7 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies) int i, multiplier; u8 stat; u8 bonus; + u32 currentEVCap = GetCurrentEVCap(); heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, 0); if (heldItem == ITEM_ENIGMA_BERRY_E_READER) @@ -5237,7 +5227,7 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies) for (i = 0; i < NUM_STATS; i++) { - if (totalEVs >= MAX_TOTAL_EVS) + if (totalEVs >= currentEVCap) break; if (CheckPartyHasHadPokerus(mon, 0)) @@ -5288,8 +5278,8 @@ void MonGainEVs(struct Pokemon *mon, u16 defeatedSpecies) if (holdEffect == HOLD_EFFECT_MACHO_BRACE) evIncrease *= 2; - if (totalEVs + (s16)evIncrease > MAX_TOTAL_EVS) - evIncrease = ((s16)evIncrease + MAX_TOTAL_EVS) - (totalEVs + evIncrease); + if (totalEVs + (s16)evIncrease > currentEVCap) + evIncrease = ((s16)evIncrease + currentEVCap) - (totalEVs + evIncrease); if (evs[i] + (s16)evIncrease > MAX_PER_STAT_EVS) { @@ -5329,7 +5319,7 @@ void RandomlyGivePartyPokerus(struct Pokemon *party) } while (!GetMonData(mon, MON_DATA_SPECIES, 0) || GetMonData(mon, MON_DATA_IS_EGG, 0)); - if (!(CheckPartyHasHadPokerus(party, gBitTable[rnd]))) + if (!(CheckPartyHasHadPokerus(party, 1u << rnd))) { u8 rnd2; @@ -6664,9 +6654,9 @@ void TrySpecialOverworldEvo(void) for (i = 0; i < PARTY_SIZE; i++) { u16 targetSpecies = GetEvolutionTargetSpecies(&gPlayerParty[i], EVO_MODE_OVERWORLD_SPECIAL, evoMethod, SPECIES_NONE); - if (targetSpecies != SPECIES_NONE && !(sTriedEvolving & gBitTable[i])) + if (targetSpecies != SPECIES_NONE && !(sTriedEvolving & (1u << i))) { - sTriedEvolving |= gBitTable[i]; + sTriedEvolving |= 1u << i; if(gMain.callback2 == TrySpecialOverworldEvo) // This fixes small graphics glitches. EvolutionScene(&gPlayerParty[i], targetSpecies, canStopEvo, i); else @@ -6902,7 +6892,7 @@ const u8 *GetMoveAnimationScript(u16 moveId) if (gMovesInfo[moveId].battleAnimScript == NULL) { DebugPrintfLevel(MGBA_LOG_WARN, "No animation for moveId=%u", moveId); - return Move_TACKLE; + return gMovesInfo[MOVE_NONE].battleAnimScript; } return gMovesInfo[moveId].battleAnimScript; } @@ -6941,3 +6931,30 @@ void UpdateDaysPassedSinceFormChange(u16 days) } } } + +static inline u32 CalculateHiddenPowerType(struct Pokemon *mon) +{ + u32 typehp; + u32 type; + u8 typeBits = ((GetMonData(mon, MON_DATA_HP_IV) & 1) << 0) + | ((GetMonData(mon, MON_DATA_ATK_IV) & 1) << 1) + | ((GetMonData(mon, MON_DATA_DEF_IV) & 1) << 2) + | ((GetMonData(mon, MON_DATA_SPEED_IV) & 1) << 3) + | ((GetMonData(mon, MON_DATA_SPATK_IV) & 1) << 4) + | ((GetMonData(mon, MON_DATA_SPDEF_IV) & 1) << 5); + + type = (15 * typeBits) / 63 + 2; + if (type >= TYPE_MYSTERY) + type++; + type |= 0xC0; + typehp = type & 0x3F; + return typehp; +} + +u32 CheckDynamicMoveType(struct Pokemon *mon, u32 move, u32 battler) +{ + u32 moveType = GetDynamicMoveType(mon, move, battler, NULL); + if (moveType != TYPE_NONE) + return moveType; + return gMovesInfo[move].type; +} diff --git a/src/pokemon_sprite_visualizer.c b/src/pokemon_sprite_visualizer.c index c83716aeda..fea6324129 100644 --- a/src/pokemon_sprite_visualizer.c +++ b/src/pokemon_sprite_visualizer.c @@ -4,8 +4,6 @@ #include "battle_anim.h" #include "battle_gfx_sfx_util.h" #include "bg.h" -#include "constants/rgb.h" -#include "constants/songs.h" #include "data.h" #include "decompress.h" #include "event_object_movement.h" @@ -38,12 +36,15 @@ #include "text_window.h" #include "trainer_pokemon_sprites.h" +#include "constants/global.h" #include "constants/items.h" #include "constants/event_objects.h" +#include "constants/rgb.h" +#include "constants/songs.h" -#if DEBUG_POKEMON_SPRITE_VISUALIZER == TRUE extern const struct BattleBackground sBattleTerrainTable[]; extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow; +extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadowsSized; extern const struct SpriteTemplate gSpriteTemplate_EnemyShadow; extern const struct SpritePalette sSpritePalettes_HealthBoxHealthBar[2]; extern const struct UCoords8 sBattlerCoords[][MAX_BATTLERS_COUNT] ; @@ -397,6 +398,13 @@ const u8 gBattleBackgroundTerrainNames[][26] = [BATTLE_TERRAIN_BUILDING] = _("NORMAL - BUILDING "), [BATTLE_TERRAIN_PLAIN] = _("NORMAL - PLAIN "), }; +const u8 sShadowSizeLabels[][4] = +{ + [SHADOW_SIZE_S] = _(" S"), + [SHADOW_SIZE_M] = _(" M"), + [SHADOW_SIZE_L] = _(" L"), + [SHADOW_SIZE_XL_BATTLE_ONLY] = _(" XL"), +}; //Function declarations static void PrintDigitChars(struct PokemonSpriteVisualizer *data); static void SetUpModifyArrows(struct PokemonSpriteVisualizer *data); @@ -427,17 +435,27 @@ static void PrintInstructionsOnWindow(struct PokemonSpriteVisualizer *data) { u8 fontId = 0; u8 x = 2; - u8 textInstructions[] = _("{START_BUTTON} Shiny\n{B_BUTTON} Exit {A_BUTTON} Submenu 1$"); - u8 textInstructionsGender[] = _("{START_BUTTON} Shiny {SELECT_BUTTON} Gender\n{B_BUTTON} Exit {A_BUTTON} Submenu 1$"); - u8 textInstructionsSubmenuOne[] = _("{START_BUTTON} Shiny\n{B_BUTTON} Back {A_BUTTON} Submenu 2$"); - u8 textInstructionsSubmenuOneGender[] = _("{START_BUTTON} Shiny {SELECT_BUTTON} Gender\n{B_BUTTON} Back {A_BUTTON} Submenu 2$"); + u8 textInstructions[] = _("{START_BUTTON} Shiny\n{B_BUTTON} Exit {A_BUTTON} Anims and BG$"); + u8 textInstructionsGender[] = _("{START_BUTTON} Shiny {SELECT_BUTTON} Gender\n{B_BUTTON} Exit {A_BUTTON} Anims and BG$"); + u8 textInstructionsSubmenuOne[] = _("{START_BUTTON} Shiny\n{B_BUTTON} Back {A_BUTTON} Sprite Coords$"); + u8 textInstructionsSubmenuOneGender[] = _("{START_BUTTON} Shiny {SELECT_BUTTON} Gender\n{B_BUTTON} Back {A_BUTTON} Sprite Coords$"); +#if B_ENEMY_MON_SHADOW_STYLE >= GEN_4 + u8 textInstructionsSubmenuTwo[] = _("{START_BUTTON} Shiny\n{B_BUTTON} Back {A_BUTTON} Shadow Coords$"); + u8 textInstructionsSubmenuTwoGender[] = _("{START_BUTTON} Shiny {SELECT_BUTTON} Gender\n{B_BUTTON} Back {A_BUTTON} Shadow Coords$"); + u8 textInstructionsSubmenuThree[] = _("{START_BUTTON} Shiny\n{B_BUTTON} Back"); + u8 textInstructionsSubmenuThreeGender[] = _("{START_BUTTON} Shiny {SELECT_BUTTON} Gender\n{B_BUTTON} Back$"); +#else u8 textInstructionsSubmenuTwo[] = _("{START_BUTTON} Shiny\n{B_BUTTON} Back$"); u8 textInstructionsSubmenuTwoGender[] = _("{START_BUTTON} Shiny {SELECT_BUTTON} Gender\n{B_BUTTON} Back$"); + u8 textInstructionsSubmenuThree[] = _("$"); + u8 textInstructionsSubmenuThreeGender[] = _("$"); +#endif u8 textBottom[] = _("BACK:\nFRONT:\nBG:$"); u8 textBottomForms[] = _("BACK:\nFRONT:\nBG:\nFORMS:$"); u8 textBottomSubmenuTwo[] = _("B coords:\nF coords:\nF elev:"); + u8 textBottomSubmenuThree[] = _("X coords:\nY coords:\nSize:"); u16 species = data->modifyArrows.currValue; u8 textL[] = _("{L_BUTTON}"); @@ -466,11 +484,18 @@ static void PrintInstructionsOnWindow(struct PokemonSpriteVisualizer *data) else AddTextPrinterParameterized(WIN_INSTRUCTIONS, fontId, textInstructionsSubmenuTwo, x, 0, 0, NULL); } + else if (data->currentSubmenu == 3) + { + if (SpeciesHasGenderDifferences(species)) + AddTextPrinterParameterized(WIN_INSTRUCTIONS, fontId, textInstructionsSubmenuThreeGender, x, 0, 0, NULL); + else + AddTextPrinterParameterized(WIN_INSTRUCTIONS, fontId, textInstructionsSubmenuThree, x, 0, 0, NULL); + } CopyWindowToVram(WIN_INSTRUCTIONS, COPYWIN_FULL); //Bottom left text FillWindowPixelBuffer(WIN_BOTTOM_LEFT, PIXEL_FILL(0)); - if (data->currentSubmenu != 2) + if (data->currentSubmenu < 2) { AddTextPrinterParameterized(WIN_BOTTOM_LEFT, fontId, textL, 30, 0, 0, NULL); AddTextPrinterParameterized(WIN_BOTTOM_LEFT, fontId, textR, 30, 12, 0, NULL); @@ -479,8 +504,10 @@ static void PrintInstructionsOnWindow(struct PokemonSpriteVisualizer *data) else AddTextPrinterParameterized(WIN_BOTTOM_LEFT, fontId, textBottom, 0, 0, 0, NULL); } - else + else if (data->currentSubmenu == 2) AddTextPrinterParameterized(WIN_BOTTOM_LEFT, fontId, textBottomSubmenuTwo, 0, 0, 0, NULL); + else if (data->currentSubmenu == 3) + AddTextPrinterParameterized(WIN_BOTTOM_LEFT, fontId, textBottomSubmenuThree, 0, 0, 0, NULL); } static void VBlankCB(void) @@ -589,6 +616,7 @@ static void SetArrowInvisibility(struct PokemonSpriteVisualizer *data) gSprites[data->yPosModifyArrows.arrowSpriteId[0]].invisible = TRUE; break; case 2: + case 3: gSprites[data->modifyArrows.arrowSpriteId[0]].invisible = TRUE; gSprites[data->modifyArrows.arrowSpriteId[1]].invisible = TRUE; gSprites[data->optionArrows.arrowSpriteId[0]].invisible = TRUE; @@ -736,6 +764,20 @@ static void ResetOffsetSpriteValues(struct PokemonSpriteVisualizer *data) data->offsetsSpriteValues.offset_front_elevation = 0; } +static void ResetShadowSettings(struct PokemonSpriteVisualizer *data, u16 species) +{ + if (B_ENEMY_MON_SHADOW_STYLE <= GEN_3) + return; + + data->shadowSettings.definedX = gSpeciesInfo[species].enemyShadowXOffset; + data->shadowSettings.definedY = gSpeciesInfo[species].enemyShadowYOffset; + data->shadowSettings.definedSize = gSpeciesInfo[species].enemyShadowSize; + + data->shadowSettings.overrideX = data->shadowSettings.definedX; + data->shadowSettings.overrideY = data->shadowSettings.definedY; + data->shadowSettings.overrideSize = data->shadowSettings.definedSize; +} + static u8 GetBattlerSpriteFinal_YCustom(u16 species, s8 offset_picCoords, s8 offset_elevation) { u16 offset; @@ -759,18 +801,39 @@ static u8 GetBattlerSpriteFinal_YCustom(u16 species, s8 offset_picCoords, s8 off static void UpdateShadowSpriteInvisible(struct PokemonSpriteVisualizer *data) { + if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4) + return; + if (data->constSpriteValues.frontElevation + data->offsetsSpriteValues.offset_front_elevation == 0) - gSprites[data->frontShadowSpriteId].invisible = TRUE; + gSprites[data->frontShadowSpriteIdPrimary].invisible = TRUE; else - gSprites[data->frontShadowSpriteId].invisible = FALSE; + gSprites[data->frontShadowSpriteIdPrimary].invisible = FALSE; } +#define tFrontSpriteId data[0] +#define tSpriteSide data[1] +#define tShadowXOffset data[2] +#define tShadowYOffset data[3] + +#define SPRITE_SIDE_LEFT 0 +#define SPRITE_SIDE_RIGHT 1 + + static void SpriteCB_EnemyShadowCustom(struct Sprite *shadowSprite) { - u8 frontSpriteId = shadowSprite->data[0]; + u8 frontSpriteId = shadowSprite->tFrontSpriteId; struct Sprite *battlerSprite = &gSprites[frontSpriteId]; - shadowSprite->x = battlerSprite->x; + s8 xOffset = 0, yOffset = 0; + if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4) + { + xOffset = shadowSprite->tShadowXOffset + (shadowSprite->tSpriteSide == SPRITE_SIDE_LEFT ? -16 : 16); + yOffset = shadowSprite->tShadowYOffset + 16; + + shadowSprite->y = battlerSprite->y + yOffset; + } + + shadowSprite->x = battlerSprite->x + xOffset; shadowSprite->x2 = battlerSprite->x2; } @@ -802,25 +865,60 @@ static void SpriteCB_Follower(struct Sprite *sprite) sprite->animDelayCounter--; } } - static void LoadAndCreateEnemyShadowSpriteCustom(struct PokemonSpriteVisualizer *data, u16 species) { - u8 x, y; bool8 invisible = FALSE; species = SanitizeSpeciesId(species); - if (gSpeciesInfo[species].enemyMonElevation == 0) - invisible = TRUE; - LoadCompressedSpriteSheet(&gSpriteSheet_EnemyShadow); - LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[0]); - x = sBattlerCoords[0][1].x; - y = sBattlerCoords[0][1].y; - data->frontShadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow, x, y + 29, 0xC8); - gSprites[data->frontShadowSpriteId].data[0] = data->frontspriteId; + if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4) + { + invisible = gSpeciesInfo[species].suppressEnemyShadow; - gSprites[data->frontShadowSpriteId].callback = SpriteCB_EnemyShadowCustom; - gSprites[data->frontShadowSpriteId].oam.priority = 0; - gSprites[data->frontShadowSpriteId].invisible = invisible; + LoadCompressedSpriteSheet(&gSpriteSheet_EnemyShadowsSized); + LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[0]); + u8 x = sBattlerCoords[0][1].x; + u8 y = sBattlerCoords[0][1].y; + s8 xOffset = data->shadowSettings.overrideX; + s8 yOffset = data->shadowSettings.overrideY; + u8 size = data->shadowSettings.overrideSize; + + data->frontShadowSpriteIdPrimary = CreateSprite(&gSpriteTemplate_EnemyShadow, x, y, 0xC8); + gSprites[data->frontShadowSpriteIdPrimary].tFrontSpriteId = data->frontspriteId; + gSprites[data->frontShadowSpriteIdPrimary].tSpriteSide = SPRITE_SIDE_LEFT; + gSprites[data->frontShadowSpriteIdPrimary].tShadowXOffset = (u8)xOffset; + gSprites[data->frontShadowSpriteIdPrimary].tShadowYOffset = (u8)yOffset; + gSprites[data->frontShadowSpriteIdPrimary].callback = SpriteCB_EnemyShadowCustom; + gSprites[data->frontShadowSpriteIdPrimary].oam.priority = 0; + gSprites[data->frontShadowSpriteIdPrimary].oam.tileNum += 8 * size; + gSprites[data->frontShadowSpriteIdPrimary].invisible = invisible; + + data->frontShadowSpriteIdSecondary = CreateSprite(&gSpriteTemplate_EnemyShadow, x, y, 0xC8); + gSprites[data->frontShadowSpriteIdSecondary].tFrontSpriteId = data->frontspriteId; + gSprites[data->frontShadowSpriteIdSecondary].tSpriteSide = SPRITE_SIDE_RIGHT; + gSprites[data->frontShadowSpriteIdSecondary].tShadowXOffset = (u8)xOffset; + gSprites[data->frontShadowSpriteIdSecondary].tShadowYOffset = (u8)yOffset; + gSprites[data->frontShadowSpriteIdSecondary].callback = SpriteCB_EnemyShadowCustom; + gSprites[data->frontShadowSpriteIdSecondary].oam.priority = 0; + gSprites[data->frontShadowSpriteIdSecondary].oam.tileNum += (8 * size) + 4; + gSprites[data->frontShadowSpriteIdSecondary].invisible = invisible; + } + else + { + if (gSpeciesInfo[species].enemyMonElevation == 0) + invisible = TRUE; + + LoadCompressedSpriteSheet(&gSpriteSheet_EnemyShadow); + LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[0]); + u8 x = sBattlerCoords[0][1].x; + u8 y = sBattlerCoords[0][1].y; + + data->frontShadowSpriteIdPrimary = CreateSprite(&gSpriteTemplate_EnemyShadow, x, y + 29, 0xC8); + gSprites[data->frontShadowSpriteIdPrimary].data[0] = data->frontspriteId; + + gSprites[data->frontShadowSpriteIdPrimary].callback = SpriteCB_EnemyShadowCustom; + gSprites[data->frontShadowSpriteIdPrimary].oam.priority = 0; + gSprites[data->frontShadowSpriteIdPrimary].invisible = invisible; + } } //Battle background functions @@ -1045,6 +1143,55 @@ static void UpdateYPosOffsetText(struct PokemonSpriteVisualizer *data) AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, text, x_new_val, y, 0, NULL); } +#define ABS(val) (val < 0 ? val * -1 : val) +#define ITOA_SIGNED(buf, val) \ +{ \ + buf[0] = val < 0 ? CHAR_HYPHEN : CHAR_SPACER; \ + ConvertIntToDecimalStringN(&text[1], ABS(val), STR_CONV_MODE_LEFT_ALIGN, 2); \ +} + +static void UpdateShadowSettingsText(struct PokemonSpriteVisualizer *data) +{ + if (B_ENEMY_MON_SHADOW_STYLE <= GEN_3) + return; + + u8 text[16]; + u8 fontId = 0; + u8 textConst[] = _("const val:"); + u8 textNew[] = _("new val:"); + u8 x_const_val = 50; + u8 x_new_text = 70; + u8 x_new_val = 110; + u8 y = 0; + + FillWindowPixelBuffer(WIN_BOTTOM_RIGHT, PIXEL_FILL(0)); + + // X offset + y = 0; + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, textConst, 0, y, 0, NULL); + ITOA_SIGNED(text, data->shadowSettings.definedX); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, text, x_const_val, y, 0, NULL); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, textNew, x_new_text, y, 0, NULL); + ITOA_SIGNED(text, data->shadowSettings.overrideX); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, text, x_new_val, y, 0, NULL); + + // Y offset + y = 12; + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, textConst, 0, y, 0, NULL); + ITOA_SIGNED(text, data->shadowSettings.definedY); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, text, x_const_val, y, 0, NULL); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, textNew, x_new_text, y, 0, NULL); + ITOA_SIGNED(text, data->shadowSettings.overrideY); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, text, x_new_val, y, 0, NULL); + + // Shadow Size + y = 24; + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, textConst, 0, y, 0, NULL); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, sShadowSizeLabels[data->shadowSettings.definedSize], x_const_val, y, 0, NULL); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, textNew, x_new_text, y, 0, NULL); + AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, sShadowSizeLabels[data->shadowSettings.overrideSize], x_new_val, y, 0, NULL); +} + static void ResetPokemonSpriteVisualizerWindows(void) { u8 i; @@ -1335,6 +1482,7 @@ static void UpdateSubmenuOneOptionValue(u8 taskId, bool8 increment) data->animIdFront = gSpeciesInfo[modArrows->currValue].frontAnimId; UpdateMonAnimNames(taskId); ResetOffsetSpriteValues(data); + ResetShadowSettings(data, modArrows->currValue); UpdateBattlerValue(data); ReloadPokemonSprites(data); @@ -1422,6 +1570,79 @@ static void UpdateSubmenuTwoOptionValue(u8 taskId, bool8 increment) UpdateYPosOffsetText(data); } +static void UpdateShadowSettingsValue(u8 taskId, bool8 increment) +{ + if (B_ENEMY_MON_SHADOW_STYLE <= GEN_3) + return; + + struct PokemonSpriteVisualizer *data = GetStructPtr(taskId); + u8 option = data->submenuYpos[2]; + s8 *offset; + s16 *leftTarget, *rightTarget; + if (option == 0) + { + offset = &data->shadowSettings.overrideX; + leftTarget = &gSprites[data->frontShadowSpriteIdPrimary].tShadowXOffset; + rightTarget = &gSprites[data->frontShadowSpriteIdSecondary].tShadowXOffset; + } + else + { + offset = &data->shadowSettings.overrideY; + leftTarget = &gSprites[data->frontShadowSpriteIdPrimary].tShadowYOffset; + rightTarget = &gSprites[data->frontShadowSpriteIdSecondary].tShadowYOffset; + } + + *offset = *offset + (increment ? 1 : -1); + if (*offset > 20) + *offset = -20; + else if (*offset < -20) + *offset = 20; + UpdateShadowSettingsText(data); + + *leftTarget = (s16)*offset; + *rightTarget = (s16)*offset; +} + +static void UpdateShadowSizeValue(u8 taskId, bool8 increment) +{ + if (B_ENEMY_MON_SHADOW_STYLE <= GEN_3) + return; + + struct PokemonSpriteVisualizer *data = GetStructPtr(taskId); + s8 update; + + if (increment) + { + if (data->shadowSettings.overrideSize == SHADOW_SIZE_XL_BATTLE_ONLY) + { + update = -data->shadowSettings.overrideSize; + data->shadowSettings.overrideSize = SHADOW_SIZE_S; + } + else + { + update = 1; + data->shadowSettings.overrideSize += 1; + } + } + else + { + if (data->shadowSettings.overrideSize == SHADOW_SIZE_S) + { + update = SHADOW_SIZE_XL_BATTLE_ONLY; + data->shadowSettings.overrideSize = update; + } + else + { + update = -1; + data->shadowSettings.overrideSize -= 1; + } + } + + UpdateShadowSettingsText(data); + gSprites[data->frontShadowSpriteIdPrimary].oam.tileNum += (8 * update); + gSprites[data->frontShadowSpriteIdSecondary].oam.tileNum += (8 * update); +} + #define READ_PTR_FROM_TASK(taskId, dataId) \ (void *)( \ ((u16)(gTasks[taskId].data[dataId]) | \ @@ -1518,6 +1739,7 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId) data->isFemale = FALSE; PrintDigitChars(data); UpdateBattlerValue(data); + ResetShadowSettings(data, data->currentmonId); ReloadPokemonSprites(data); data->animIdBack = GetSpeciesBackAnimSet(data->currentmonId) + 1; data->animIdFront = gSpeciesInfo[data->currentmonId].frontAnimId; @@ -1534,6 +1756,7 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId) data->isFemale = FALSE; PrintDigitChars(data); UpdateBattlerValue(data); + ResetShadowSettings(data, data->currentmonId); ReloadPokemonSprites(data); data->animIdBack = GetSpeciesBackAnimSet(data->currentmonId) + 1; data->animIdFront = gSpeciesInfo[data->currentmonId].frontAnimId; @@ -1572,6 +1795,8 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId) SetArrowInvisibility(data); SetConstSpriteValues(data); UpdateYPosOffsetText(data); + + gSprites[data->followerspriteId].invisible = TRUE; } else if (JOY_NEW(B_BUTTON)) { @@ -1622,13 +1847,22 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId) } else if (data->currentSubmenu == 2) //Submenu 2 { - if (JOY_NEW(B_BUTTON)) + if (JOY_NEW(A_BUTTON) && B_ENEMY_MON_SHADOW_STYLE >= GEN_4) + { + data->currentSubmenu = 3; + PrintInstructionsOnWindow(data); + SetArrowInvisibility(data); + UpdateShadowSettingsText(data); + } + else if (JOY_NEW(B_BUTTON)) { data->currentSubmenu = 1; SetArrowInvisibility(data); PrintInstructionsOnWindow(data); UpdateMonAnimNames(taskId); + + gSprites[data->followerspriteId].invisible = FALSE; } else if (JOY_NEW(DPAD_DOWN)) { @@ -1658,6 +1892,50 @@ static void HandleInput_PokemonSpriteVisualizer(u8 taskId) UpdateSubmenuTwoOptionValue(taskId, TRUE); } } + else if (data->currentSubmenu == 3) // Submenu 3 + { + if (JOY_NEW(B_BUTTON)) + { + data->currentSubmenu = 2; + PrintInstructionsOnWindow(data); + SetArrowInvisibility(data); + SetConstSpriteValues(data); + UpdateYPosOffsetText(data); + } + else if (JOY_NEW(DPAD_DOWN)) + { + data->submenuYpos[2] += 1; + if (data->submenuYpos[2] >= 3) + data->submenuYpos[2] = 0; + + data->yPosModifyArrows.currentDigit = data->submenuYpos[2]; + gSprites[data->yPosModifyArrows.arrowSpriteId[0]].y = OPTIONS_ARROW_Y + data->yPosModifyArrows.currentDigit * 12; + } + else if (JOY_NEW(DPAD_UP)) + { + if (data->submenuYpos[2] == 0) + data->submenuYpos[2] = 2; + else + data->submenuYpos[2] -= 1; + + data->yPosModifyArrows.currentDigit = data->submenuYpos[2]; + gSprites[data->yPosModifyArrows.arrowSpriteId[0]].y = OPTIONS_ARROW_Y + data->yPosModifyArrows.currentDigit * 12; + } + else if (JOY_NEW(DPAD_LEFT)) + { + if (data->submenuYpos[2] < 2) + UpdateShadowSettingsValue(taskId, FALSE); + else + UpdateShadowSizeValue(taskId, FALSE); + } + else if (JOY_NEW(DPAD_RIGHT)) + { + if (data->submenuYpos[2] < 2) + UpdateShadowSettingsValue(taskId, TRUE); + else + UpdateShadowSizeValue(taskId, TRUE); + } + } } #undef sDelay #undef sAnimId @@ -1675,6 +1953,10 @@ static void ReloadPokemonSprites(struct PokemonSpriteVisualizer *data) DestroySprite(&gSprites[data->iconspriteId]); DestroySprite(&gSprites[data->followerspriteId]); + DestroySprite(&gSprites[data->frontShadowSpriteIdPrimary]); + if (B_ENEMY_MON_SHADOW_STYLE >= GEN_4) + DestroySprite(&gSprites[data->frontShadowSpriteIdSecondary]); + FreeMonSpritesGfx(); ResetSpriteData(); ResetPaletteFade(); @@ -1763,5 +2045,3 @@ static void Exit_PokemonSpriteVisualizer(u8 taskId) m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 0x100); } } - -#endif diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index fe65df0114..ef0c644c7d 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -892,16 +892,20 @@ static void UnkUtil_DmaRun(struct UnkUtilData *); void SetMonFormPSS(struct BoxPokemon *boxMon); void UpdateSpeciesSpritePSS(struct BoxPokemon *boxmon); +static const u8 gText_JustOnePkmn[] = _("There is just one POKéMON with you."); +static const u8 gText_PartyFull[] = _("Your party is full!"); +static const u8 gText_Box[] = _("BOX"); + struct { const u8 *text; const u8 *desc; } static const sMainMenuTexts[OPTIONS_COUNT] = { - [OPTION_WITHDRAW] = {gText_WithdrawPokemon, gText_WithdrawMonDescription}, - [OPTION_DEPOSIT] = {gText_DepositPokemon, gText_DepositMonDescription}, - [OPTION_MOVE_MONS] = {gText_MovePokemon, gText_MoveMonDescription}, - [OPTION_MOVE_ITEMS] = {gText_MoveItems, gText_MoveItemsDescription}, - [OPTION_EXIT] = {gText_SeeYa, gText_SeeYaDescription} + [OPTION_WITHDRAW] = {COMPOUND_STRING("WITHDRAW POKéMON"), COMPOUND_STRING("Move POKéMON stored in BOXES to\nyour party.")}, + [OPTION_DEPOSIT] = {COMPOUND_STRING("DEPOSIT POKéMON"), COMPOUND_STRING("Store POKéMON in your party in BOXES.")}, + [OPTION_MOVE_MONS] = {COMPOUND_STRING("MOVE POKéMON"), COMPOUND_STRING("Organize the POKéMON in BOXES and\nin your party.")}, + [OPTION_MOVE_ITEMS] = {COMPOUND_STRING("MOVE ITEMS"), COMPOUND_STRING("Move items held by any POKéMON\nin a BOX or your party.")}, + [OPTION_EXIT] = {COMPOUND_STRING("SEE YA!"), COMPOUND_STRING("Return to the previous menu.")} }; static const struct WindowTemplate sWindowTemplate_MainMenu = @@ -1078,39 +1082,41 @@ static const struct SpriteTemplate sSpriteTemplate_DisplayMon = .callback = SpriteCallbackDummy, }; +static const u8 gText_PkmnIsSelected[] = _("{DYNAMIC 0} is selected."); + static const struct StorageMessage sMessages[] = { - [MSG_EXIT_BOX] = {gText_ExitFromBox, MSG_VAR_NONE}, - [MSG_WHAT_YOU_DO] = {gText_WhatDoYouWantToDo, MSG_VAR_NONE}, - [MSG_PICK_A_THEME] = {gText_PleasePickATheme, MSG_VAR_NONE}, - [MSG_PICK_A_WALLPAPER] = {gText_PickTheWallpaper, MSG_VAR_NONE}, - [MSG_IS_SELECTED] = {gText_PkmnIsSelected, MSG_VAR_MON_NAME_1}, - [MSG_JUMP_TO_WHICH_BOX] = {gText_JumpToWhichBox, MSG_VAR_NONE}, - [MSG_DEPOSIT_IN_WHICH_BOX] = {gText_DepositInWhichBox, MSG_VAR_NONE}, - [MSG_WAS_DEPOSITED] = {gText_PkmnWasDeposited, MSG_VAR_MON_NAME_1}, - [MSG_BOX_IS_FULL] = {gText_BoxIsFull2, MSG_VAR_NONE}, - [MSG_RELEASE_POKE] = {gText_ReleaseThisPokemon, MSG_VAR_NONE}, - [MSG_WAS_RELEASED] = {gText_PkmnWasReleased, MSG_VAR_RELEASE_MON_1}, - [MSG_BYE_BYE] = {gText_ByeByePkmn, MSG_VAR_RELEASE_MON_3}, - [MSG_MARK_POKE] = {gText_MarkYourPkmn, MSG_VAR_NONE}, - [MSG_LAST_POKE] = {gText_ThatsYourLastPkmn, MSG_VAR_NONE}, - [MSG_PARTY_FULL] = {gText_YourPartysFull, MSG_VAR_NONE}, - [MSG_HOLDING_POKE] = {gText_YoureHoldingAPkmn, MSG_VAR_NONE}, - [MSG_WHICH_ONE_WILL_TAKE] = {gText_WhichOneWillYouTake, MSG_VAR_NONE}, - [MSG_CANT_RELEASE_EGG] = {gText_YouCantReleaseAnEgg, MSG_VAR_NONE}, - [MSG_CONTINUE_BOX] = {gText_ContinueBoxOperations, MSG_VAR_NONE}, - [MSG_CAME_BACK] = {gText_PkmnCameBack, MSG_VAR_MON_NAME_1}, - [MSG_WORRIED] = {gText_WasItWorriedAboutYou, MSG_VAR_NONE}, - [MSG_SURPRISE] = {gText_FourEllipsesExclamation, MSG_VAR_NONE}, - [MSG_PLEASE_REMOVE_MAIL] = {gText_PleaseRemoveTheMail, MSG_VAR_NONE}, - [MSG_IS_SELECTED2] = {gText_PkmnIsSelected, MSG_VAR_ITEM_NAME}, - [MSG_GIVE_TO_MON] = {gText_GiveToAPkmn, MSG_VAR_NONE}, - [MSG_PLACED_IN_BAG] = {gText_PlacedItemInBag, MSG_VAR_ITEM_NAME}, - [MSG_BAG_FULL] = {gText_BagIsFull2, MSG_VAR_NONE}, - [MSG_PUT_IN_BAG] = {gText_PutItemInBag, MSG_VAR_NONE}, - [MSG_ITEM_IS_HELD] = {gText_ItemIsNowHeld, MSG_VAR_ITEM_NAME}, - [MSG_CHANGED_TO_ITEM] = {gText_ChangedToNewItem, MSG_VAR_ITEM_NAME}, - [MSG_CANT_STORE_MAIL] = {gText_MailCantBeStored, MSG_VAR_NONE}, + [MSG_EXIT_BOX] = {COMPOUND_STRING("Exit from the BOX?"), MSG_VAR_NONE}, + [MSG_WHAT_YOU_DO] = {COMPOUND_STRING("What do you want to do?"), MSG_VAR_NONE}, + [MSG_PICK_A_THEME] = {COMPOUND_STRING("Please pick a theme."), MSG_VAR_NONE}, + [MSG_PICK_A_WALLPAPER] = {COMPOUND_STRING("Pick the wallpaper."), MSG_VAR_NONE}, + [MSG_IS_SELECTED] = {gText_PkmnIsSelected, MSG_VAR_MON_NAME_1}, + [MSG_JUMP_TO_WHICH_BOX] = {COMPOUND_STRING("Jump to which BOX?"), MSG_VAR_NONE}, + [MSG_DEPOSIT_IN_WHICH_BOX] = {COMPOUND_STRING("Deposit in which BOX?"), MSG_VAR_NONE}, + [MSG_WAS_DEPOSITED] = {COMPOUND_STRING("{DYNAMIC 0} was deposited."), MSG_VAR_MON_NAME_1}, + [MSG_BOX_IS_FULL] = {COMPOUND_STRING("The BOX is full."), MSG_VAR_NONE}, + [MSG_RELEASE_POKE] = {COMPOUND_STRING("Release this POKéMON?"), MSG_VAR_NONE}, + [MSG_WAS_RELEASED] = {COMPOUND_STRING("{DYNAMIC 0} was released."), MSG_VAR_RELEASE_MON_1}, + [MSG_BYE_BYE] = {COMPOUND_STRING("Bye-bye, {DYNAMIC 0}!"), MSG_VAR_RELEASE_MON_3}, + [MSG_MARK_POKE] = {COMPOUND_STRING("Mark your POKéMON."), MSG_VAR_NONE}, + [MSG_LAST_POKE] = {COMPOUND_STRING("That's your last POKéMON!"), MSG_VAR_NONE}, + [MSG_PARTY_FULL] = {gText_YourPartysFull, MSG_VAR_NONE}, + [MSG_HOLDING_POKE] = {COMPOUND_STRING("You're holding a POKéMON!"), MSG_VAR_NONE}, + [MSG_WHICH_ONE_WILL_TAKE] = {COMPOUND_STRING("Which one will you take?"), MSG_VAR_NONE}, + [MSG_CANT_RELEASE_EGG] = {COMPOUND_STRING("You can't release an EGG."), MSG_VAR_NONE}, + [MSG_CONTINUE_BOX] = {COMPOUND_STRING("Continue BOX operations?"), MSG_VAR_NONE}, + [MSG_CAME_BACK] = {COMPOUND_STRING("{DYNAMIC 0} came back!"), MSG_VAR_MON_NAME_1}, + [MSG_WORRIED] = {COMPOUND_STRING("Was it worried about you?"), MSG_VAR_NONE}, + [MSG_SURPRISE] = {COMPOUND_STRING("… … … … !"), MSG_VAR_NONE}, + [MSG_PLEASE_REMOVE_MAIL] = {COMPOUND_STRING("Please remove the MAIL."), MSG_VAR_NONE}, + [MSG_IS_SELECTED2] = {gText_PkmnIsSelected, MSG_VAR_ITEM_NAME}, + [MSG_GIVE_TO_MON] = {COMPOUND_STRING("GIVE to a POKéMON?"), MSG_VAR_NONE}, + [MSG_PLACED_IN_BAG] = {COMPOUND_STRING("Placed item in the BAG."), MSG_VAR_ITEM_NAME}, + [MSG_BAG_FULL] = {COMPOUND_STRING("The BAG is full."), MSG_VAR_NONE}, + [MSG_PUT_IN_BAG] = {COMPOUND_STRING("Put this item in the BAG?"), MSG_VAR_NONE}, + [MSG_ITEM_IS_HELD] = {COMPOUND_STRING("{DYNAMIC 0} is now held."), MSG_VAR_ITEM_NAME}, + [MSG_CHANGED_TO_ITEM] = {COMPOUND_STRING("Changed to {DYNAMIC 0}."), MSG_VAR_ITEM_NAME}, + [MSG_CANT_STORE_MAIL] = {COMPOUND_STRING("MAIL can't be stored!"), MSG_VAR_NONE}, }; static const struct WindowTemplate sYesNoWindowTemplate = @@ -1998,7 +2004,10 @@ static void VBlankCB_PokeStorage(void) ProcessSpriteCopyRequests(); UnkUtil_Run(); TransferPlttBuffer(); - SetGpuReg(REG_OFFSET_BG2HOFS, sStorage->bg2_X); + if (sStorage != NULL) + { + SetGpuReg(REG_OFFSET_BG2HOFS, sStorage->bg2_X); + } } static void CB2_PokeStorage(void) @@ -4206,11 +4215,14 @@ static void StopFlashingCloseBoxButton(void) static void UpdateCloseBoxButtonFlash(void) { - if (sStorage->closeBoxFlashing && ++sStorage->closeBoxFlashTimer > 30) + if (sStorage != NULL) { - sStorage->closeBoxFlashTimer = 0; - sStorage->closeBoxFlashState = (sStorage->closeBoxFlashState == FALSE); - UpdateCloseBoxButtonTilemap(sStorage->closeBoxFlashState); + if (sStorage->closeBoxFlashing && ++sStorage->closeBoxFlashTimer > 30) + { + sStorage->closeBoxFlashTimer = 0; + sStorage->closeBoxFlashState = (sStorage->closeBoxFlashState == FALSE); + UpdateCloseBoxButtonTilemap(sStorage->closeBoxFlashState); + } } } @@ -8035,47 +8047,49 @@ static void InitMenu(void) sStorage->menuWindow.baseBlock = 92; } +static const u8 gPCText_Give[] = _("GIVE"); + static const u8 *const sMenuTexts[] = { - [MENU_CANCEL] = gPCText_Cancel, - [MENU_STORE] = gPCText_Store, - [MENU_WITHDRAW] = gPCText_Withdraw, - [MENU_MOVE] = gPCText_Move, - [MENU_SHIFT] = gPCText_Shift, - [MENU_PLACE] = gPCText_Place, - [MENU_SUMMARY] = gPCText_Summary, - [MENU_RELEASE] = gPCText_Release, - [MENU_MARK] = gPCText_Mark, - [MENU_JUMP] = gPCText_Jump, - [MENU_WALLPAPER] = gPCText_Wallpaper, - [MENU_NAME] = gPCText_Name, - [MENU_TAKE] = gPCText_Take, + [MENU_CANCEL] = COMPOUND_STRING("CANCEL"), + [MENU_STORE] = COMPOUND_STRING("STORE"), + [MENU_WITHDRAW] = COMPOUND_STRING("WITHDRAW"), + [MENU_MOVE] = COMPOUND_STRING("MOVE"), + [MENU_SHIFT] = COMPOUND_STRING("SHIFT"), + [MENU_PLACE] = COMPOUND_STRING("PLACE"), + [MENU_SUMMARY] = COMPOUND_STRING("SUMMARY"), + [MENU_RELEASE] = COMPOUND_STRING("RELEASE"), + [MENU_MARK] = COMPOUND_STRING("MARK"), + [MENU_JUMP] = COMPOUND_STRING("JUMP"), + [MENU_WALLPAPER] = COMPOUND_STRING("WALLPAPER"), + [MENU_NAME] = COMPOUND_STRING("NAME"), + [MENU_TAKE] = COMPOUND_STRING("TAKE"), [MENU_GIVE] = gPCText_Give, [MENU_GIVE_2] = gPCText_Give, - [MENU_SWITCH] = gPCText_Switch, - [MENU_BAG] = gPCText_Bag, - [MENU_INFO] = gPCText_Info, - [MENU_SCENERY_1] = gPCText_Scenery1, - [MENU_SCENERY_2] = gPCText_Scenery2, - [MENU_SCENERY_3] = gPCText_Scenery3, - [MENU_ETCETERA] = gPCText_Etcetera, - [MENU_FRIENDS] = gPCText_Friends, - [MENU_FOREST] = gPCText_Forest, - [MENU_CITY] = gPCText_City, - [MENU_DESERT] = gPCText_Desert, - [MENU_SAVANNA] = gPCText_Savanna, - [MENU_CRAG] = gPCText_Crag, - [MENU_VOLCANO] = gPCText_Volcano, - [MENU_SNOW] = gPCText_Snow, - [MENU_CAVE] = gPCText_Cave, - [MENU_BEACH] = gPCText_Beach, - [MENU_SEAFLOOR] = gPCText_Seafloor, - [MENU_RIVER] = gPCText_River, - [MENU_SKY] = gPCText_Sky, - [MENU_POLKADOT] = gPCText_PolkaDot, - [MENU_POKECENTER] = gPCText_Pokecenter, - [MENU_MACHINE] = gPCText_Machine, - [MENU_SIMPLE] = gPCText_Simple, + [MENU_SWITCH] = COMPOUND_STRING("SWITCH"), + [MENU_BAG] = COMPOUND_STRING("BAG"), + [MENU_INFO] = COMPOUND_STRING("INFO"), + [MENU_SCENERY_1] = COMPOUND_STRING("SCENERY 1"), + [MENU_SCENERY_2] = COMPOUND_STRING("SCENERY 2"), + [MENU_SCENERY_3] = COMPOUND_STRING("SCENERY 3"), + [MENU_ETCETERA] = COMPOUND_STRING("ETCETERA"), + [MENU_FRIENDS] = COMPOUND_STRING("FRIENDS"), + [MENU_FOREST] = COMPOUND_STRING("FOREST"), + [MENU_CITY] = COMPOUND_STRING("CITY"), + [MENU_DESERT] = COMPOUND_STRING("DESERT"), + [MENU_SAVANNA] = COMPOUND_STRING("SAVANNA"), + [MENU_CRAG] = COMPOUND_STRING("CRAG"), + [MENU_VOLCANO] = COMPOUND_STRING("VOLCANO"), + [MENU_SNOW] = COMPOUND_STRING("SNOW"), + [MENU_CAVE] = COMPOUND_STRING("CAVE"), + [MENU_BEACH] = COMPOUND_STRING("BEACH"), + [MENU_SEAFLOOR] = COMPOUND_STRING("SEAFLOOR"), + [MENU_RIVER] = COMPOUND_STRING("RIVER"), + [MENU_SKY] = COMPOUND_STRING("SKY"), + [MENU_POLKADOT] = COMPOUND_STRING("POLKA-DOT"), + [MENU_POKECENTER] = COMPOUND_STRING("POKéCENTER"), + [MENU_MACHINE] = COMPOUND_STRING("MACHINE"), + [MENU_SIMPLE] = COMPOUND_STRING("SIMPLE"), }; static void SetMenuText(u8 textId) diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index e81ef0b066..06efd2ee42 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -1144,7 +1144,7 @@ static const u16 sMarkings_Pal[] = INCBIN_U16("graphics/summary_screen/markings. static u8 ShowCategoryIcon(u32 category) { if (sMonSummaryScreen->categoryIconSpriteId == 0xFF) - sMonSummaryScreen->categoryIconSpriteId = CreateSprite(&gSpriteTemplate_CategoryIcons, 48, 129, 0); + sMonSummaryScreen->categoryIconSpriteId = CreateSprite(&gSpriteTemplate_CategoryIcons, 48, 128, 0); gSprites[sMonSummaryScreen->categoryIconSpriteId].invisible = FALSE; StartSpriteAnim(&gSprites[sMonSummaryScreen->categoryIconSpriteId], category); @@ -1640,15 +1640,13 @@ static void Task_HandleInput(u8 taskId) PlaySE(SE_SELECT); BeginCloseSummaryScreen(taskId); } - #if DEBUG_POKEMON_SPRITE_VISUALIZER == TRUE - else if (JOY_NEW(SELECT_BUTTON) && !gMain.inBattle) + else if (DEBUG_POKEMON_SPRITE_VISUALIZER && JOY_NEW(SELECT_BUTTON) && !gMain.inBattle) { sMonSummaryScreen->callback = CB2_Pokemon_Sprite_Visualizer; StopPokemonAnimations(); PlaySE(SE_SELECT); CloseSummaryScreen(taskId); } - #endif } } @@ -3957,16 +3955,24 @@ static void SetMonTypeIcons(void) static void SetMoveTypeIcons(void) { - u8 i; + u32 i; struct PokeSummary *summary = &sMonSummaryScreen->summary; + struct Pokemon *mon = &sMonSummaryScreen->currentMon; + u32 type; + for (i = 0; i < MAX_MON_MOVES; i++) { if (summary->moves[i] != MOVE_NONE) { - SetTypeSpritePosAndPal(gMovesInfo[summary->moves[i]].type, 85, 32 + (i * 16), i + SPRITE_ARR_ID_TYPE); + type = gMovesInfo[summary->moves[i]].type; + if (P_SHOW_DYNAMIC_TYPES) + type = CheckDynamicMoveType(mon, summary->moves[i], 0); + SetTypeSpritePosAndPal(type, 85, 32 + (i * 16), i + SPRITE_ARR_ID_TYPE); } else + { SetSpriteInvisibility(i + SPRITE_ARR_ID_TYPE, TRUE); + } } } @@ -3985,6 +3991,12 @@ static void SetContestMoveTypeIcons(void) static void SetNewMoveTypeIcon(void) { + u32 type = gMovesInfo[sMonSummaryScreen->newMove].type; + struct Pokemon *mon = &sMonSummaryScreen->currentMon; + + if (P_SHOW_DYNAMIC_TYPES) + type = CheckDynamicMoveType(mon, sMonSummaryScreen->newMove, 0); + if (sMonSummaryScreen->newMove == MOVE_NONE) { SetSpriteInvisibility(SPRITE_ARR_ID_TYPE + 4, TRUE); @@ -3992,9 +4004,13 @@ static void SetNewMoveTypeIcon(void) else { if (sMonSummaryScreen->currPageIndex == PSS_PAGE_BATTLE_MOVES) - SetTypeSpritePosAndPal(gMovesInfo[sMonSummaryScreen->newMove].type, 85, 96, SPRITE_ARR_ID_TYPE + 4); + { + SetTypeSpritePosAndPal(type, 85, 96, SPRITE_ARR_ID_TYPE + 4); + } else + { SetTypeSpritePosAndPal(NUMBER_OF_MON_TYPES + gMovesInfo[sMonSummaryScreen->newMove].contestCategory, 85, 96, SPRITE_ARR_ID_TYPE + 4); + } } } diff --git a/src/pokenav_conditions_gfx.c b/src/pokenav_conditions_gfx.c index 26d8e99e06..8845307c0e 100644 --- a/src/pokenav_conditions_gfx.c +++ b/src/pokenav_conditions_gfx.c @@ -30,6 +30,8 @@ static const u32 sConditionGraphData_Gfx[] = INCBIN_U32("graphics/pokenav/condit static const u32 sConditionGraphData_Tilemap[] = INCBIN_U32("graphics/pokenav/condition/graph_data.bin.lz"); static const u16 sMonMarkings_Pal[] = INCBIN_U16("graphics/pokenav/condition/mon_markings.gbapal"); +static const u8 gText_Number2[] = _("No. "); + static const struct BgTemplate sMenuBgTemplates[3] = { { diff --git a/src/pokenav_conditions_search_results.c b/src/pokenav_conditions_search_results.c index 9afb2bb2d9..4889dd788c 100644 --- a/src/pokenav_conditions_search_results.c +++ b/src/pokenav_conditions_search_results.c @@ -22,6 +22,8 @@ enum CONDITION_SEARCH_FUNC_SELECT_MON, }; +static const u8 gText_NumberIndex[] = _("No. {DYNAMIC 0}"); + struct Pokenav_SearchResults { u32 (*callback)(struct Pokenav_SearchResults *); diff --git a/src/pokenav_list.c b/src/pokenav_list.c index ed3d40dee2..dbcf137331 100644 --- a/src/pokenav_list.c +++ b/src/pokenav_list.c @@ -96,6 +96,10 @@ static u32 LoopedTask_PrintCheckPageInfo(s32); static const u16 sListArrow_Pal[] = INCBIN_U16("graphics/pokenav/list_arrows.gbapal"); static const u32 sListArrow_Gfx[] = INCBIN_U32("graphics/pokenav/list_arrows.4bpp.lz"); +static const u8 gText_PokenavMatchCall_Strategy[] = _("STRATEGY"); +static const u8 gText_PokenavMatchCall_TrainerPokemon[] = _("TRAINER'S POKéMON"); +static const u8 gText_PokenavMatchCall_SelfIntroduction[] = _("SELF-INTRODUCTION"); + static EWRAM_DATA u32 sMoveWindowDownIndex = 0; // Read, but pointlessly bool32 CreatePokenavList(const struct BgTemplate *bgTemplate, struct PokenavListTemplate *listTemplate, s32 tileOffset) diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c index 761f572d6b..dfd656833d 100644 --- a/src/pokenav_main_menu.c +++ b/src/pokenav_main_menu.c @@ -86,18 +86,18 @@ static const struct WindowTemplate sHelpBarWindowTemplate[] = static const u8 *const sHelpBarTexts[HELPBAR_COUNT] = { - [HELPBAR_NONE] = gText_Pokenav_ClearButtonList, - [HELPBAR_MAP_ZOOMED_OUT] = gText_PokenavMap_ZoomedOutButtons, - [HELPBAR_MAP_ZOOMED_IN] = gText_PokenavMap_ZoomedInButtons, - [HELPBAR_CONDITION_MON_LIST] = gText_PokenavCondition_MonListButtons, - [HELPBAR_CONDITION_MON_STATUS] = gText_PokenavCondition_MonStatusButtons, - [HELPBAR_CONDITION_MARKINGS] = gText_PokenavCondition_MarkingButtons, - [HELPBAR_MC_TRAINER_LIST] = gText_PokenavMatchCall_TrainerListButtons, - [HELPBAR_MC_CALL_MENU] = gText_PokenavMatchCall_CallMenuButtons, - [HELPBAR_MC_CHECK_PAGE] = gText_PokenavMatchCall_CheckTrainerButtons, - [HELPBAR_RIBBONS_MON_LIST] = gText_PokenavRibbons_MonListButtons, - [HELPBAR_RIBBONS_LIST] = gText_PokenavRibbons_RibbonListButtons, - [HELPBAR_RIBBONS_CHECK] = gText_PokenavRibbons_RibbonCheckButtons, + [HELPBAR_NONE] = COMPOUND_STRING("{CLEAR 0x80}"), + [HELPBAR_MAP_ZOOMED_OUT] = COMPOUND_STRING("{A_BUTTON}ZOOM {B_BUTTON}CANCEL"), + [HELPBAR_MAP_ZOOMED_IN] = COMPOUND_STRING("{A_BUTTON}FULL {B_BUTTON}CANCEL"), + [HELPBAR_CONDITION_MON_LIST] = COMPOUND_STRING("{A_BUTTON}CONDITION {B_BUTTON}CANCEL"), + [HELPBAR_CONDITION_MON_STATUS] = COMPOUND_STRING("{A_BUTTON}MARKINGS {B_BUTTON}CANCEL"), + [HELPBAR_CONDITION_MARKINGS] = COMPOUND_STRING("{A_BUTTON}SELECT MARK {B_BUTTON}CANCEL"), + [HELPBAR_MC_TRAINER_LIST] = COMPOUND_STRING("{A_BUTTON}MENU {B_BUTTON}CANCEL"), + [HELPBAR_MC_CALL_MENU] = COMPOUND_STRING("{A_BUTTON}OK {B_BUTTON}CANCEL"), + [HELPBAR_MC_CHECK_PAGE] = COMPOUND_STRING("{B_BUTTON}CANCEL"), + [HELPBAR_RIBBONS_MON_LIST] = COMPOUND_STRING("{A_BUTTON}RIBBONS {B_BUTTON}CANCEL"), + [HELPBAR_RIBBONS_LIST] = COMPOUND_STRING("{A_BUTTON}CHECK {B_BUTTON}CANCEL"), + [HELPBAR_RIBBONS_CHECK] = COMPOUND_STRING("{B_BUTTON}CANCEL"), }; static const u8 sHelpBarTextColors[3] = diff --git a/src/pokenav_match_call_data.c b/src/pokenav_match_call_data.c index ca027380d4..a2cf3f93c4 100644 --- a/src/pokenav_match_call_data.c +++ b/src/pokenav_match_call_data.c @@ -179,8 +179,8 @@ static const struct MatchCallStructNPC sMrStoneMatchCallHeader = .type = MC_TYPE_NPC, .mapSec = MAPSEC_RUSTBORO_CITY, .flag = 0xFFFF, - .desc = gText_MrStoneMatchCallDesc, - .name = gText_MrStoneMatchCallName, + .desc = COMPOUND_STRING("DEVON PRES"), + .name = COMPOUND_STRING("MR. STONE"), .textData = sMrStoneTextScripts }; @@ -203,8 +203,8 @@ static const struct MatchCallStructTrainer sNormanMatchCallHeader = .mapSec = MAPSEC_PETALBURG_CITY, .flag = FLAG_ENABLE_NORMAN_MATCH_CALL, .rematchTableIdx = REMATCH_NORMAN, - .desc = gText_NormanMatchCallDesc, - .name = gText_NormanMatchCallName, + .desc = COMPOUND_STRING("RELIABLE ONE"), + .name = COMPOUND_STRING("DAD"), .textData = sNormanTextScripts }; @@ -213,8 +213,8 @@ static const struct MatchCallBirch sProfBirchMatchCallHeader = .type = MC_TYPE_BIRCH, .mapSec = 0, .flag = FLAG_ENABLE_PROF_BIRCH_MATCH_CALL, - .desc = gText_ProfBirchMatchCallDesc, - .name = gText_ProfBirchMatchCallName + .desc = COMPOUND_STRING("{PKMN} PROF."), + .name = COMPOUND_STRING("PROF. BIRCH") }; static const match_call_text_data_t sMomTextScripts[] = { @@ -229,8 +229,8 @@ static const struct MatchCallStructNPC sMomMatchCallHeader = .type = MC_TYPE_NPC, .mapSec = MAPSEC_LITTLEROOT_TOWN, .flag = FLAG_ENABLE_MOM_MATCH_CALL, - .desc = gText_MomMatchCallDesc, - .name = gText_MomMatchCallName, + .desc = COMPOUND_STRING("CALM & KIND"), + .name = COMPOUND_STRING("MOM"), .textData = sMomTextScripts }; @@ -250,11 +250,13 @@ static const struct MatchCallStructNPC sStevenMatchCallHeader = .type = MC_TYPE_NPC, .mapSec = MAPSEC_NONE, .flag = FLAG_REGISTERED_STEVEN_POKENAV, - .desc = gText_StevenMatchCallDesc, - .name = gText_StevenMatchCallName, + .desc = COMPOUND_STRING("HARD AS ROCK"), + .name = COMPOUND_STRING("STEVEN"), .textData = sStevenTextScripts }; +static const u8 gText_MayBrendanMatchCallDesc[] = _("RAD NEIGHBOR"); + static const match_call_text_data_t sMayTextScripts[] = { { MatchCall_Text_May1, 0xFFFF, 0xFFFF }, { MatchCall_Text_May2, FLAG_DEFEATED_DEWFORD_GYM, 0xFFFF }, @@ -337,7 +339,7 @@ static const struct MatchCallWally sWallyMatchCallHeader = .mapSec = 0, .flag = FLAG_ENABLE_WALLY_MATCH_CALL, .rematchTableIdx = REMATCH_WALLY_VR, - .desc = gText_WallyMatchCallDesc, + .desc = COMPOUND_STRING("{PKMN} LOVER"), .textData = sWallyTextScripts, .locationData = sWallyLocationData }; @@ -359,8 +361,8 @@ static const struct MatchCallStructNPC sScottMatchCallHeader = .type = 0, .mapSec = MAPSEC_NONE, .flag = FLAG_ENABLE_SCOTT_MATCH_CALL, - .desc = gText_ScottMatchCallDesc, - .name = gText_ScottMatchCallName, + .desc = COMPOUND_STRING("ELUSIVE EYES"), + .name = COMPOUND_STRING("SCOTT"), .textData = sScottTextScripts }; @@ -378,7 +380,7 @@ static const struct MatchCallStructTrainer sRoxanneMatchCallHeader = .mapSec = MAPSEC_RUSTBORO_CITY, .flag = FLAG_ENABLE_ROXANNE_MATCH_CALL, .rematchTableIdx = REMATCH_ROXANNE, - .desc = gText_RoxanneMatchCallDesc, + .desc = COMPOUND_STRING("ROCKIN' WHIZ"), .name = NULL, .textData = sRoxanneTextScripts }; @@ -397,7 +399,7 @@ static const struct MatchCallStructTrainer sBrawlyMatchCallHeader = .mapSec = MAPSEC_DEWFORD_TOWN, .flag = FLAG_ENABLE_BRAWLY_MATCH_CALL, .rematchTableIdx = REMATCH_BRAWLY, - .desc = gText_BrawlyMatchCallDesc, + .desc = COMPOUND_STRING("THE BIG HIT"), .name = NULL, .textData = sBrawlyTextScripts }; @@ -416,7 +418,7 @@ static const struct MatchCallStructTrainer sWattsonMatchCallHeader = .mapSec = MAPSEC_MAUVILLE_CITY, .flag = FLAG_ENABLE_WATTSON_MATCH_CALL, .rematchTableIdx = REMATCH_WATTSON, - .desc = gText_WattsonMatchCallDesc, + .desc = COMPOUND_STRING("SWELL SHOCK"), .name = NULL, .textData = sWattsonTextScripts }; @@ -435,7 +437,7 @@ static const struct MatchCallStructTrainer sFlanneryMatchCallHeader = .mapSec = MAPSEC_LAVARIDGE_TOWN, .flag = FLAG_ENABLE_FLANNERY_MATCH_CALL, .rematchTableIdx = REMATCH_FLANNERY, - .desc = gText_FlanneryMatchCallDesc, + .desc = COMPOUND_STRING("PASSION BURN"), .name = NULL, .textData = sFlanneryTextScripts }; @@ -454,7 +456,7 @@ static const struct MatchCallStructTrainer sWinonaMatchCallHeader = .mapSec = MAPSEC_FORTREE_CITY, .flag = FLAG_ENABLE_WINONA_MATCH_CALL, .rematchTableIdx = REMATCH_WINONA, - .desc = gText_WinonaMatchCallDesc, + .desc = COMPOUND_STRING("SKY TAMER"), .name = NULL, .textData = sWinonaTextScripts }; @@ -473,7 +475,7 @@ static const struct MatchCallStructTrainer sTateLizaMatchCallHeader = .mapSec = MAPSEC_MOSSDEEP_CITY, .flag = FLAG_ENABLE_TATE_AND_LIZA_MATCH_CALL, .rematchTableIdx = REMATCH_TATE_AND_LIZA, - .desc = gText_TateLizaMatchCallDesc, + .desc = COMPOUND_STRING("MYSTIC DUO"), .name = NULL, .textData = sTateLizaTextScripts }; @@ -492,11 +494,13 @@ static const struct MatchCallStructTrainer sJuanMatchCallHeader = .mapSec = MAPSEC_SOOTOPOLIS_CITY, .flag = FLAG_ENABLE_JUAN_MATCH_CALL, .rematchTableIdx = REMATCH_JUAN, - .desc = gText_JuanMatchCallDesc, + .desc = COMPOUND_STRING("DANDY CHARM"), .name = NULL, .textData = sJuanTextScripts }; +static const u8 gText_EliteFourMatchCallDesc[] = _("ELITE FOUR"); + static const match_call_text_data_t sSidneyTextScripts[] = { { MatchCall_Text_Sidney, 0xFFFF, 0xFFFF }, { NULL, 0xFFFF, 0xFFFF } @@ -572,7 +576,7 @@ static const struct MatchCallStructTrainer sWallaceMatchCallHeader = .mapSec = MAPSEC_EVER_GRANDE_CITY, .flag = FLAG_REMATCH_WALLACE, .rematchTableIdx = REMATCH_WALLACE, - .desc = gText_ChampionMatchCallDesc, + .desc = COMPOUND_STRING("CHAMPION"), .name = NULL, .textData = sWallaceTextScripts }; @@ -657,6 +661,19 @@ static void (*const sMatchCall_GetNameAndDescFunctions[])(match_call_t, const u8 MatchCall_GetNameAndDesc_Birch }; +static const u8 gText_MatchCallSteven_Strategy[] = _("Attack the weak points!"); +static const u8 gText_MatchCallSteven_Pokemon[] = _("Ultimate STEEL POKéMON."); + +static const u8 gText_MatchCallBrendan_Strategy[] = _("Battle with knowledge!"); +static const u8 gText_MatchCallBrendan_Pokemon[] = _("I will use various POKéMON."); +static const u8 gText_MatchCallBrendan_Intro1[] = _("I'll be a better POKéMON"); +static const u8 gText_MatchCallBrendan_Intro2[] = _("prof than my father is!"); + +static const u8 gText_MatchCallMay_Strategy[] = _("I'm not so good at battles."); +static const u8 gText_MatchCallMay_Pokemon[] = _("I'll use any POKéMON!"); +static const u8 gText_MatchCallMay_Intro1[] = _("My POKéMON and I help"); +static const u8 gText_MatchCallMay_Intro2[] = _("my father's research."); + static const struct MatchCallCheckPageOverride sCheckPageOverrides[] = { { .idx = MC_HEADER_STEVEN, @@ -665,8 +682,8 @@ static const struct MatchCallCheckPageOverride sCheckPageOverrides[] = { .flavorTexts = { [CHECK_PAGE_STRATEGY] = gText_MatchCallSteven_Strategy, [CHECK_PAGE_POKEMON] = gText_MatchCallSteven_Pokemon, - [CHECK_PAGE_INTRO_1] = gText_MatchCallSteven_Intro1_BeforeMeteorFallsBattle, - [CHECK_PAGE_INTRO_2] = gText_MatchCallSteven_Intro2_BeforeMeteorFallsBattle + [CHECK_PAGE_INTRO_1] = COMPOUND_STRING("I'd climb even waterfalls"), + [CHECK_PAGE_INTRO_2] = COMPOUND_STRING("to find a rare stone!") } }, { @@ -676,8 +693,8 @@ static const struct MatchCallCheckPageOverride sCheckPageOverrides[] = { .flavorTexts = { [CHECK_PAGE_STRATEGY] = gText_MatchCallSteven_Strategy, [CHECK_PAGE_POKEMON] = gText_MatchCallSteven_Pokemon, - [CHECK_PAGE_INTRO_1] = gText_MatchCallSteven_Intro1_AfterMeteorFallsBattle, - [CHECK_PAGE_INTRO_2] = gText_MatchCallSteven_Intro2_AfterMeteorFallsBattle + [CHECK_PAGE_INTRO_1] = COMPOUND_STRING("I'm the strongest and most"), + [CHECK_PAGE_INTRO_2] = COMPOUND_STRING("energetic after all!") } }, { diff --git a/src/pokenav_match_call_gfx.c b/src/pokenav_match_call_gfx.c index 594b4d83d4..80e2709cf0 100755 --- a/src/pokenav_match_call_gfx.c +++ b/src/pokenav_match_call_gfx.c @@ -124,6 +124,11 @@ static const u16 sListWindow_Pal[] = INCBIN_U16("graphics/pokenav/match_call/lis static const u16 sPokeball_Pal[] = INCBIN_U16("graphics/pokenav/match_call/pokeball.gbapal"); static const u32 sPokeball_Gfx[] = INCBIN_U32("graphics/pokenav/match_call/pokeball.4bpp.lz"); +static const u8 gText_NumberRegistered[] = _("No. registered"); +static const u8 gText_NumberOfBattles[] = _("No. of battles"); +static const u8 gText_TrainerCloseBy[] = _("That TRAINER is close by.\nTalk to the TRAINER in person!"); +static const u8 gText_Unknown[] = _("UNKNOWN"); + static const struct BgTemplate sMatchCallBgTemplates[3] = { { @@ -199,9 +204,9 @@ static const struct WindowTemplate sMatchCallInfoBoxWindowTemplate = static const u8 *const sMatchCallOptionTexts[MATCH_CALL_OPTION_COUNT] = { - [MATCH_CALL_OPTION_CALL] = gText_Call, - [MATCH_CALL_OPTION_CHECK] = gText_Check, - [MATCH_CALL_OPTION_CANCEL] = gText_Cancel6 + [MATCH_CALL_OPTION_CALL] = COMPOUND_STRING("CALL"), + [MATCH_CALL_OPTION_CHECK] = COMPOUND_STRING("CHECK"), + [MATCH_CALL_OPTION_CANCEL] = COMPOUND_STRING("CANCEL") }; // The series of 5 dots that appear when someone is called with Match Call diff --git a/src/pokenav_match_call_list.c b/src/pokenav_match_call_list.c index 43cd5220dd..94a13031da 100755 --- a/src/pokenav_match_call_list.c +++ b/src/pokenav_match_call_list.c @@ -36,6 +36,8 @@ static u32 CB2_HandleCallExitInput(struct Pokenav_MatchCallMenu *); static u32 LoopedTask_BuildMatchCallList(s32); static bool32 ShouldDoNearbyMessage(void); +static const u8 gText_CallCantBeMadeHere[] = _("A call can't be made from here."); + #include "data/text/match_call_messages.h" static const u8 sMatchCallOptionsNoCheckPage[] = diff --git a/src/pokenav_menu_handler_gfx.c b/src/pokenav_menu_handler_gfx.c index b0128d385d..09fb96f3dc 100644 --- a/src/pokenav_menu_handler_gfx.c +++ b/src/pokenav_menu_handler_gfx.c @@ -108,6 +108,8 @@ static const u32 sPokenavDeviceBgTilemap[] = INCBIN_U32("graphics/pokenav/device static const u16 sMatchCallBlueLightPal[] = INCBIN_U16("graphics/pokenav/blue_light.gbapal"); static const u32 sMatchCallBlueLightTiles[] = INCBIN_U32("graphics/pokenav/blue_light.4bpp.lz"); +static const u8 gText_NoRibbonWinners[] = _("There are no RIBBON winners."); + static const struct BgTemplate sPokenavMainMenuBgTemplates[] = { { .bg = 1, @@ -267,20 +269,20 @@ static const struct WindowTemplate sOptionDescWindowTemplate = static const u8 *const sPageDescriptions[] = { - [POKENAV_MENUITEM_MAP] = gText_CheckMapOfHoenn, - [POKENAV_MENUITEM_CONDITION] = gText_CheckPokemonInDetail, - [POKENAV_MENUITEM_MATCH_CALL] = gText_CallRegisteredTrainer, - [POKENAV_MENUITEM_RIBBONS] = gText_CheckObtainedRibbons, - [POKENAV_MENUITEM_SWITCH_OFF] = gText_PutAwayPokenav, - [POKENAV_MENUITEM_CONDITION_PARTY] = gText_CheckPartyPokemonInDetail, - [POKENAV_MENUITEM_CONDITION_SEARCH] = gText_CheckAllPokemonInDetail, - [POKENAV_MENUITEM_CONDITION_CANCEL] = gText_ReturnToPokenavMenu, - [POKENAV_MENUITEM_CONDITION_SEARCH_COOL] = gText_FindCoolPokemon, - [POKENAV_MENUITEM_CONDITION_SEARCH_BEAUTY] = gText_FindBeautifulPokemon, - [POKENAV_MENUITEM_CONDITION_SEARCH_CUTE] = gText_FindCutePokemon, - [POKENAV_MENUITEM_CONDITION_SEARCH_SMART] = gText_FindSmartPokemon, - [POKENAV_MENUITEM_CONDITION_SEARCH_TOUGH] = gText_FindToughPokemon, - [POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL] = gText_ReturnToConditionMenu + [POKENAV_MENUITEM_MAP] = COMPOUND_STRING("Check the map of the HOENN region"), + [POKENAV_MENUITEM_CONDITION] = COMPOUND_STRING("Check POKéMON in detail."), + [POKENAV_MENUITEM_MATCH_CALL] = COMPOUND_STRING("Call a registered TRAINER."), + [POKENAV_MENUITEM_RIBBONS] = COMPOUND_STRING("Check obtained RIBBONS."), + [POKENAV_MENUITEM_SWITCH_OFF] = COMPOUND_STRING("Put away the POKéNAV."), + [POKENAV_MENUITEM_CONDITION_PARTY] = COMPOUND_STRING("Check party POKéMON in detail."), + [POKENAV_MENUITEM_CONDITION_SEARCH] = COMPOUND_STRING("Check all POKéMON in detail."), + [POKENAV_MENUITEM_CONDITION_CANCEL] = COMPOUND_STRING("Return to the POKéNAV menu."), + [POKENAV_MENUITEM_CONDITION_SEARCH_COOL] = COMPOUND_STRING("Find cool POKéMON."), + [POKENAV_MENUITEM_CONDITION_SEARCH_BEAUTY] = COMPOUND_STRING("Find beautiful POKéMON."), + [POKENAV_MENUITEM_CONDITION_SEARCH_CUTE] = COMPOUND_STRING("Find cute POKéMON."), + [POKENAV_MENUITEM_CONDITION_SEARCH_SMART] = COMPOUND_STRING("Find smart POKéMON."), + [POKENAV_MENUITEM_CONDITION_SEARCH_TOUGH] = COMPOUND_STRING("Find tough POKéMON."), + [POKENAV_MENUITEM_CONDITION_SEARCH_CANCEL] = COMPOUND_STRING("Return to the CONDITION menu.") }; static const u8 sOptionDescTextColors[] = {TEXT_COLOR_GREEN, TEXT_COLOR_BLUE, TEXT_COLOR_LIGHT_GREEN}; diff --git a/src/pokenav_ribbons_summary.c b/src/pokenav_ribbons_summary.c index bba1c3600c..9a5eafeea5 100644 --- a/src/pokenav_ribbons_summary.c +++ b/src/pokenav_ribbons_summary.c @@ -40,6 +40,8 @@ enum #define MON_SPRITE_X_OFF -32 #define MON_SPRITE_Y 104 +static const u8 gText_RibbonsF700[] = _("RIBBONS {DYNAMIC 0}"); + struct Pokenav_RibbonsSummaryList { u8 unused1[8]; diff --git a/src/random.c b/src/random.c index 9d43ae3740..969aa6d404 100644 --- a/src/random.c +++ b/src/random.c @@ -8,7 +8,6 @@ rng_value_t gRngValue; rng_value_t gRng2Value; -#if HQ_RANDOM == TRUE EWRAM_DATA static volatile bool8 sRngLoopUnlocked; @@ -112,39 +111,6 @@ void AdvanceRandom(void) #define LOOP_RANDOM ((u16)(_SFC32_Next(state) >> 16)) -#else -EWRAM_DATA static u32 sRandCount = 0; - -u16 Random(void) -{ - gRngValue = ISO_RANDOMIZE1(gRngValue); - sRandCount++; - return gRngValue >> 16; -} - -void SeedRng(u16 seed) -{ - gRngValue = seed; -} - -void SeedRng2(u16 seed) -{ - gRng2Value = seed; -} - -u16 Random2(void) -{ - gRng2Value = ISO_RANDOMIZE1(gRng2Value); - return gRng2Value >> 16; -} - -#define LOOP_RANDOM_START -#define LOOP_RANDOM_END - -#define LOOP_RANDOM (Random()) - -#endif - #define SHUFFLE_IMPL \ u32 tmp; \ LOOP_RANDOM_START; \ diff --git a/src/recorded_battle.c b/src/recorded_battle.c index 2ac33a08a0..c32e86b525 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -741,7 +741,7 @@ void RecordedBattle_CheckMovesetChanges(u8 mode) movePp.moves[j] = gBattleMons[battlerId].moves[moveSlots[j]]; movePp.currentPp[j] = gBattleMons[battlerId].pp[moveSlots[j]]; movePp.maxPp[j] = ppBonuses[moveSlots[j]]; - mimickedMoveSlots[j] = (gDisableStructs[battlerId].mimickedMoves & gBitTable[j]) >> j; + mimickedMoveSlots[j] = (gDisableStructs[battlerId].mimickedMoves & (1u << j)) >> j; } for (j = 0; j < MAX_MON_MOVES; j++) { diff --git a/src/scrcmd.c b/src/scrcmd.c index 80a91133e3..ef5084681e 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -8,6 +8,7 @@ #include "contest_util.h" #include "contest_painting.h" #include "data.h" +#include "decompress.h" #include "decoration.h" #include "decoration_inventory.h" #include "event_data.h" @@ -656,12 +657,12 @@ bool8 ScrCmd_fadescreenswapbuffers(struct ScriptContext *ctx) case FADE_TO_BLACK: case FADE_TO_WHITE: default: - CpuCopy32(gPlttBufferUnfaded, gPaletteDecompressionBuffer, PLTT_SIZE); + CpuCopy32(gPlttBufferUnfaded, gDecompressionBuffer, PLTT_SIZE); FadeScreen(mode, 0); break; case FADE_FROM_BLACK: case FADE_FROM_WHITE: - CpuCopy32(gPaletteDecompressionBuffer, gPlttBufferUnfaded, PLTT_SIZE); + CpuCopy32(gDecompressionBuffer, gPlttBufferUnfaded, PLTT_SIZE); FadeScreen(mode, 0); break; } @@ -1293,6 +1294,7 @@ bool8 ScrCmd_releaseall(struct ScriptContext *ctx) ObjectEventClearHeldMovementIfFinished(&gObjectEvents[playerObjectId]); ScriptMovement_UnfreezeObjectEvents(); UnfreezeObjectEvents(); + gMsgBoxIsCancelable = FALSE; return FALSE; } @@ -1311,6 +1313,7 @@ bool8 ScrCmd_release(struct ScriptContext *ctx) ObjectEventClearHeldMovementIfFinished(&gObjectEvents[playerObjectId]); ScriptMovement_UnfreezeObjectEvents(); UnfreezeObjectEvents(); + gMsgBoxIsCancelable = FALSE; return FALSE; } @@ -1696,7 +1699,7 @@ bool8 ScrCmd_vmessage(struct ScriptContext *ctx) bool8 ScrCmd_bufferspeciesname(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); - u16 species = VarGet(ScriptReadHalfword(ctx)) & ((1 << 10) - 1); // ignore possible shiny / form bits + u16 species = VarGet(ScriptReadHalfword(ctx)) & OBJ_EVENT_GFX_SPECIES_MASK; // ignore possible shiny / form bits StringCopy(sScriptStringVars[stringVarIndex], GetSpeciesName(species)); return FALSE; diff --git a/src/script.c b/src/script.c index 718592691b..e6e2aa264d 100644 --- a/src/script.c +++ b/src/script.c @@ -5,6 +5,7 @@ #include "util.h" #include "constants/event_objects.h" #include "constants/map_scripts.h" +#include "field_message_box.h" #define RAM_SCRIPT_MAGIC 51 @@ -26,6 +27,8 @@ static u8 sGlobalScriptContextStatus; static struct ScriptContext sGlobalScriptContext; static struct ScriptContext sImmediateScriptContext; static bool8 sLockFieldControls; +EWRAM_DATA u8 gMsgIsSignPost = FALSE; +EWRAM_DATA u8 gMsgBoxIsCancelable = FALSE; extern ScrCmdFunc gScriptCmdTable[]; extern ScrCmdFunc gScriptCmdTableEnd[]; diff --git a/src/script_menu.c b/src/script_menu.c index b78f1ef112..706c4ac715 100644 --- a/src/script_menu.c +++ b/src/script_menu.c @@ -487,7 +487,7 @@ static void Task_HandleScrollingMultichoiceInput(u8 taskId) { bool32 done = FALSE; s32 input = ListMenu_ProcessInput(gTasks[taskId].data[0]); - + switch (input) { case LIST_HEADER: diff --git a/src/script_movement.c b/src/script_movement.c index 10517dfc8e..d67afd9972 100644 --- a/src/script_movement.c +++ b/src/script_movement.c @@ -142,19 +142,19 @@ static void LoadObjectEventIdFromMovementScript(u8 taskId, u8 moveScrId, u8 *obj static void ClearMovementScriptFinished(u8 taskId, u8 moveScrId) { - u16 mask = ~gBitTable[moveScrId]; + u16 mask = ~(1u << moveScrId); gTasks[taskId].data[0] &= mask; } static void SetMovementScriptFinished(u8 taskId, u8 moveScrId) { - gTasks[taskId].data[0] |= gBitTable[moveScrId]; + gTasks[taskId].data[0] |= (1u << moveScrId); } static bool8 IsMovementScriptFinished(u8 taskId, u8 moveScrId) { - u16 moveScriptFinished = (u16)gTasks[taskId].data[0] & gBitTable[moveScrId]; + u16 moveScriptFinished = (u16)gTasks[taskId].data[0] & (1u << moveScrId); if (moveScriptFinished != 0) return TRUE; diff --git a/src/script_pokemon_util.c b/src/script_pokemon_util.c index e732dc7aa2..3d2c7d640c 100644 --- a/src/script_pokemon_util.c +++ b/src/script_pokemon_util.c @@ -466,7 +466,7 @@ u32 ScriptGiveMon(u16 species, u8 level, u16 item) #define PARSE_FLAG(n, default_) (flags & (1 << (n))) ? VarGet(ScriptReadHalfword(ctx)) : (default_) -/* Give or create a mon to either player or opponent +/* Give or create a mon to either player or opponent */ void ScrCmd_createmon(struct ScriptContext *ctx) { diff --git a/src/shop.c b/src/shop.c index 77f2039e3b..a343bab0d3 100644 --- a/src/shop.c +++ b/src/shop.c @@ -1127,6 +1127,7 @@ static void BuyMenuTryMakePurchase(u8 taskId) { if (AddBagItem(tItemId, tItemCount) == TRUE) { + GetSetItemObtained(tItemId, FLAG_SET_ITEM_OBTAINED); RecordItemPurchase(taskId); BuyMenuDisplayMessage(taskId, gText_HereYouGoThankYou, BuyMenuSubtractMoney); } diff --git a/src/start_menu.c b/src/start_menu.c index 0525ccf70d..71ab87363c 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -784,10 +784,11 @@ static bool8 StartMenuDebugCallback(void) RemoveExtraStartMenuWindows(); HideStartMenuDebug(); // Hide start menu without enabling movement -#if DEBUG_OVERWORLD_MENU == TRUE - FreezeObjectEvents(); - Debug_ShowMainMenu(); -#endif + if (DEBUG_OVERWORLD_MENU) + { + FreezeObjectEvents(); + Debug_ShowMainMenu(); + } return TRUE; } diff --git a/src/strings.c b/src/strings.c index 28ed992d43..3f21f86c47 100644 --- a/src/strings.c +++ b/src/strings.c @@ -20,22 +20,6 @@ const u8 gText_ExpandedPlaceholder_Brendan[] = _("BRENDAN"); const u8 gText_ExpandedPlaceholder_May[] = _("MAY"); const u8 gText_EggNickname[] = _("EGG"); const u8 gText_Pokemon[] = _("POKéMON"); -const u8 gText_ProfBirchMatchCallName[] = _("PROF. BIRCH"); -const u8 gText_MainMenuNewGame[] = _("NEW GAME"); -const u8 gText_MainMenuContinue[] = _("CONTINUE"); -const u8 gText_MainMenuOption[] = _("OPTION"); -const u8 gText_MainMenuMysteryGift[] = _("MYSTERY GIFT"); -const u8 gText_MainMenuMysteryGift2[] = _("MYSTERY GIFT"); -const u8 gText_MainMenuMysteryEvents[] = _("MYSTERY EVENTS"); -const u8 gText_WirelessNotConnected[] = _("The Wireless Adapter is not\nconnected."); -const u8 gText_MysteryGiftCantUse[] = _("MYSTERY GIFT can't be used while\nthe Wireless Adapter is attached."); -const u8 gText_MysteryEventsCantUse[] = _("MYSTERY EVENTS can't be used while\nthe Wireless Adapter is attached."); -const u8 gText_UpdatingSaveExternalData[] = _("Updating save file using external\ndata. Please wait."); // Unused -const u8 gText_SaveFileUpdated[] = _("The save file has been updated."); // Unused -const u8 gText_SaveFileCorrupted[] = _("The save file is corrupted. The\nprevious save file will be loaded."); -const u8 gText_SaveFileErased[] = _("The save file has been erased\ndue to corruption or damage."); -const u8 gJPText_No1MSubCircuit[] = _("1Mサブきばんが ささっていません!"); -const u8 gText_BatteryRunDry[] = _("The internal battery has run dry.\nThe game can be played.\pHowever, clock-based events will\nno longer occur."); const u8 gText_Player[] = _("PLAYER"); // Unused const u8 gText_Pokedex[] = _("POKéDEX"); // Unused const u8 gText_Time[] = _("TIME"); @@ -55,48 +39,6 @@ ALIGNED(4) const u8 gText_NextBack[] = _("{A_BUTTON}NEXT {B_BUTTON}BACK"); // Un ALIGNED(4) const u8 gText_PickNextCancel[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}NEXT {B_BUTTON}CANCEL"); ALIGNED(4) const u8 gText_PickCancel[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}{B_BUTTON}CANCEL"); ALIGNED(4) const u8 gText_AButtonExit[] = _("{A_BUTTON}EXIT"); -const u8 gText_BirchBoy[] = _("BOY"); -const u8 gText_BirchGirl[] = _("GIRL"); -const u8 gText_DefaultNameStu[] = _("STU"); -const u8 gText_DefaultNameMilton[] = _("MILTON"); -const u8 gText_DefaultNameTom[] = _("TOM"); -const u8 gText_DefaultNameKenny[] = _("KENNY"); -const u8 gText_DefaultNameReid[] = _("REID"); -const u8 gText_DefaultNameJude[] = _("JUDE"); -const u8 gText_DefaultNameJaxson[] = _("JAXSON"); -const u8 gText_DefaultNameEaston[] = _("EASTON"); -const u8 gText_DefaultNameWalker[] = _("WALKER"); -const u8 gText_DefaultNameTeru[] = _("TERU"); -const u8 gText_DefaultNameJohnny[] = _("JOHNNY"); -const u8 gText_DefaultNameBrett[] = _("BRETT"); -const u8 gText_DefaultNameSeth[] = _("SETH"); -const u8 gText_DefaultNameTerry[] = _("TERRY"); -const u8 gText_DefaultNameCasey[] = _("CASEY"); -const u8 gText_DefaultNameDarren[] = _("DARREN"); -const u8 gText_DefaultNameLandon[] = _("LANDON"); -const u8 gText_DefaultNameCollin[] = _("COLLIN"); -const u8 gText_DefaultNameStanley[] = _("STANLEY"); -const u8 gText_DefaultNameQuincy[] = _("QUINCY"); -const u8 gText_DefaultNameKimmy[] = _("KIMMY"); -const u8 gText_DefaultNameTiara[] = _("TIARA"); -const u8 gText_DefaultNameBella[] = _("BELLA"); -const u8 gText_DefaultNameJayla[] = _("JAYLA"); -const u8 gText_DefaultNameAllie[] = _("ALLIE"); -const u8 gText_DefaultNameLianna[] = _("LIANNA"); -const u8 gText_DefaultNameSara[] = _("SARA"); -const u8 gText_DefaultNameMonica[] = _("MONICA"); -const u8 gText_DefaultNameCamila[] = _("CAMILA"); -const u8 gText_DefaultNameAubree[] = _("AUBREE"); -const u8 gText_DefaultNameRuthie[] = _("RUTHIE"); -const u8 gText_DefaultNameHazel[] = _("HAZEL"); -const u8 gText_DefaultNameNadine[] = _("NADINE"); -const u8 gText_DefaultNameTanja[] = _("TANJA"); -const u8 gText_DefaultNameYasmin[] = _("YASMIN"); -const u8 gText_DefaultNameNicola[] = _("NICOLA"); -const u8 gText_DefaultNameLillie[] = _("LILLIE"); -const u8 gText_DefaultNameTerra[] = _("TERRA"); -const u8 gText_DefaultNameLucy[] = _("LUCY"); -const u8 gText_DefaultNameHalie[] = _("HALIE"); const u8 gText_ThisIsAPokemon[] = _("This is what we call a “POKéMON.”{PAUSE 96}\p"); const u8 gText_5MarksPokemon[] = _("????? POKéMON"); const u8 gText_UnkHeight[] = _("{CLEAR_TO 0x0C}??'??”"); @@ -199,7 +141,6 @@ const u8 gText_Store[] = _("STORE"); const u8 gMenuText_Check[] = _("CHECK"); const u8 gText_None[] = _("NONE"); const u8 gMenuText_Deselect[] = _("DESELECT"); -const u8 gText_ThreeMarks[] = _("???"); const u8 gText_FiveMarks[] = _("?????"); const u8 gText_Slash[] = _("/"); const u8 gText_OneDash[] = _("-"); @@ -282,64 +223,19 @@ const u8 *const gPyramidBagMenu_ReturnToStrings[] = }; const u8 gText_ReturnToVar1[] = _("Return to\n{STR_VAR_1}."); -const u8 gText_ItemsPocket[] = _("ITEMS"); -const u8 gText_PokeBallsPocket[] = _("POKé BALLS"); -const u8 gText_TMHMPocket[] = _("TMs & HMs"); -const u8 gText_BerriesPocket[] = _("BERRIES"); -const u8 gText_KeyItemsPocket[] = _("KEY ITEMS"); const u8 *const gPocketNamesStringsTable[] = { - [ITEMS_POCKET] = gText_ItemsPocket, - [BALLS_POCKET] = gText_PokeBallsPocket, - [TMHM_POCKET] = gText_TMHMPocket, - [BERRIES_POCKET] = gText_BerriesPocket, - [KEYITEMS_POCKET] = gText_KeyItemsPocket + [ITEMS_POCKET] = COMPOUND_STRING("ITEMS"), + [BALLS_POCKET] = COMPOUND_STRING("POKé BALLS"), + [TMHM_POCKET] = COMPOUND_STRING("TMs & HMs"), + [BERRIES_POCKET] = COMPOUND_STRING("BERRIES"), + [KEYITEMS_POCKET] = COMPOUND_STRING("KEY ITEMS") }; const u8 gText_NumberItem_TMBerry[] = _("{NO}{STR_VAR_1}{CLEAR 0x07}{STR_VAR_2}"); const u8 gText_NumberItem_HM[] = _("{CLEAR_TO 0x11}{STR_VAR_1}{CLEAR 0x05}{STR_VAR_2}"); -const u8 gText_SizeSlash[] = _("SIZE /"); -const u8 gText_FirmSlash[] = _("FIRM /"); -const u8 gText_Var1DotVar2[] = _("{STR_VAR_1}.{STR_VAR_2}”"); -// Berry firmness strings -const u8 gBerryFirmnessString_VerySoft[] = _("Very soft"); -const u8 gBerryFirmnessString_Soft[] = _("Soft"); -const u8 gBerryFirmnessString_Hard[] = _("Hard"); -const u8 gBerryFirmnessString_VeryHard[] = _("Very hard"); -const u8 gBerryFirmnessString_SuperHard[] = _("Super hard"); - -const u8 gText_NumberVar1Var2[] = _("{NO}{STR_VAR_1} {STR_VAR_2}"); -const u8 gText_BerryTag[] = _("BERRY TAG"); -const u8 gText_RedPokeblock[] = _("RED {POKEBLOCK}"); -const u8 gText_BluePokeblock[] = _("BLUE {POKEBLOCK}"); -const u8 gText_PinkPokeblock[] = _("PINK {POKEBLOCK}"); -const u8 gText_GreenPokeblock[] = _("GREEN {POKEBLOCK}"); -const u8 gText_YellowPokeblock[] = _("YELLOW {POKEBLOCK}"); -const u8 gText_PurplePokeblock[] = _("PURPLE {POKEBLOCK}"); -const u8 gText_IndigoPokeblock[] = _("INDIGO {POKEBLOCK}"); -const u8 gText_BrownPokeblock[] = _("BROWN {POKEBLOCK}"); -const u8 gText_LiteBluePokeblock[] = _("LITEBLUE {POKEBLOCK}"); -const u8 gText_OlivePokeblock[] = _("OLIVE {POKEBLOCK}"); -const u8 gText_GrayPokeblock[] = _("GRAY {POKEBLOCK}"); -const u8 gText_BlackPokeblock[] = _("BLACK {POKEBLOCK}"); -const u8 gText_WhitePokeblock[] = _("WHITE {POKEBLOCK}"); -const u8 gText_GoldPokeblock[] = _("GOLD {POKEBLOCK}"); -const u8 gText_Spicy[] = _("SPICY"); -const u8 gText_Dry[] = _("DRY"); -const u8 gText_Sweet[] = _("SWEET"); -const u8 gText_Bitter[] = _("BITTER"); -const u8 gText_Sour[] = _("SOUR"); -const u8 gText_Tasty[] = _("TASTY"); // Unused -const u8 gText_Feel[] = _("FEEL"); // Unused -const u8 gText_StowCase[] = _("Stow CASE."); -const u8 gText_LvVar1[] = _("{LV}{STR_VAR_1}"); -const u8 gText_ThrowAwayVar1[] = _("Throw away this\n{STR_VAR_1}?"); -const u8 gText_Var1ThrownAway[] = _("The {STR_VAR_1}\nwas thrown away."); -const u8 gText_Var1AteTheVar2[] = _("{STR_VAR_1} ate the\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}"); -const u8 gText_Var1HappilyAteVar2[] = _("{STR_VAR_1} happily ate the\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}"); -const u8 gText_Var1DisdainfullyAteVar2[] = _("{STR_VAR_1} disdainfully ate the\n{STR_VAR_2}.{PAUSE_UNTIL_PRESS}"); const u8 gText_ShopBuy[] = _("BUY"); const u8 gText_ShopSell[] = _("SELL"); const u8 gText_ShopQuit[] = _("QUIT"); @@ -872,139 +768,12 @@ const u8 gText_MtPyre[] = _("MT. PYRE"); const u8 gText_SkyPillar[] = _("SKY PILLAR"); const u8 gText_DontRemember[] = _("Don't remember"); const u8 gText_Exit[] = _("EXIT"); -const u8 gText_ExitFromBox[] = _("Exit from the BOX?"); -const u8 gText_WhatDoYouWantToDo[] = _("What do you want to do?"); -const u8 gText_PleasePickATheme[] = _("Please pick a theme."); -const u8 gText_PickTheWallpaper[] = _("Pick the wallpaper."); -const u8 gText_PkmnIsSelected[] = _("{DYNAMIC 0} is selected."); -const u8 gText_JumpToWhichBox[] = _("Jump to which BOX?"); -const u8 gText_DepositInWhichBox[] = _("Deposit in which BOX?"); -const u8 gText_PkmnWasDeposited[] = _("{DYNAMIC 0} was deposited."); -const u8 gText_BoxIsFull2[] = _("The BOX is full."); -const u8 gText_ReleaseThisPokemon[] = _("Release this POKéMON?"); -const u8 gText_PkmnWasReleased[] = _("{DYNAMIC 0} was released."); -const u8 gText_ByeByePkmn[] = _("Bye-bye, {DYNAMIC 0}!"); -const u8 gText_MarkYourPkmn[] = _("Mark your POKéMON."); -const u8 gText_ThatsYourLastPkmn[] = _("That's your last POKéMON!"); const u8 gText_YourPartysFull[] = _("Your party's full!{PAUSE_UNTIL_PRESS}"); -const u8 gText_YoureHoldingAPkmn[] = _("You're holding a POKéMON!"); -const u8 gText_WhichOneWillYouTake[] = _("Which one will you take?"); -const u8 gText_YouCantReleaseAnEgg[] = _("You can't release an EGG."); -const u8 gText_ContinueBoxOperations[] = _("Continue BOX operations?"); -const u8 gText_PkmnCameBack[] = _("{DYNAMIC 0} came back!"); -const u8 gText_WasItWorriedAboutYou[] = _("Was it worried about you?"); -const u8 gText_FourEllipsesExclamation[] = _("… … … … !"); -const u8 gText_PleaseRemoveTheMail[] = _("Please remove the MAIL."); -const u8 gText_GiveToAPkmn[] = _("GIVE to a POKéMON?"); -const u8 gText_PlacedItemInBag[] = _("Placed item in the BAG."); -const u8 gText_BagIsFull2[] = _("The BAG is full."); -const u8 gText_PutItemInBag[] = _("Put this item in the BAG?"); -const u8 gText_ItemIsNowHeld[] = _("{DYNAMIC 0} is now held."); -const u8 gText_ChangedToNewItem[] = _("Changed to {DYNAMIC 0}."); -const u8 gText_MailCantBeStored[] = _("MAIL can't be stored!"); -const u8 gPCText_Cancel[] = _("CANCEL"); -const u8 gPCText_Store[] = _("STORE"); -const u8 gPCText_Withdraw[] = _("WITHDRAW"); -const u8 gPCText_Shift[] = _("SHIFT"); -const u8 gPCText_Move[] = _("MOVE"); -const u8 gPCText_Place[] = _("PLACE"); -const u8 gPCText_Summary[] = _("SUMMARY"); -const u8 gPCText_Release[] = _("RELEASE"); -const u8 gPCText_Mark[] = _("MARK"); -const u8 gPCText_Name[] = _("NAME"); -const u8 gPCText_Jump[] = _("JUMP"); -const u8 gPCText_Wallpaper[] = _("WALLPAPER"); -const u8 gPCText_Take[] = _("TAKE"); -const u8 gPCText_Give[] = _("GIVE"); -const u8 gPCText_Switch[] = _("SWITCH"); -const u8 gPCText_Bag[] = _("BAG"); -const u8 gPCText_Info[] = _("INFO"); -const u8 gPCText_Scenery1[] = _("SCENERY 1"); -const u8 gPCText_Scenery2[] = _("SCENERY 2"); -const u8 gPCText_Scenery3[] = _("SCENERY 3"); -const u8 gPCText_Etcetera[] = _("ETCETERA"); -const u8 gPCText_Friends[] = _("FRIENDS"); -const u8 gPCText_Forest[] = _("FOREST"); -const u8 gPCText_City[] = _("CITY"); -const u8 gPCText_Desert[] = _("DESERT"); -const u8 gPCText_Savanna[] = _("SAVANNA"); -const u8 gPCText_Crag[] = _("CRAG"); -const u8 gPCText_Volcano[] = _("VOLCANO"); -const u8 gPCText_Snow[] = _("SNOW"); -const u8 gPCText_Cave[] = _("CAVE"); -const u8 gPCText_Beach[] = _("BEACH"); -const u8 gPCText_Seafloor[] = _("SEAFLOOR"); -const u8 gPCText_River[] = _("RIVER"); -const u8 gPCText_Sky[] = _("SKY"); -const u8 gPCText_PolkaDot[] = _("POLKA-DOT"); -const u8 gPCText_Pokecenter[] = _("POKéCENTER"); -const u8 gPCText_Machine[] = _("MACHINE"); -const u8 gPCText_Simple[] = _("SIMPLE"); -const u8 gText_WhatWouldYouLikeToDo[] = _("What would you like to do?"); // Unused -const u8 gText_WithdrawPokemon[] = _("WITHDRAW POKéMON"); -const u8 gText_DepositPokemon[] = _("DEPOSIT POKéMON"); -const u8 gText_MovePokemon[] = _("MOVE POKéMON"); -const u8 gText_MoveItems[] = _("MOVE ITEMS"); -const u8 gText_SeeYa[] = _("SEE YA!"); -const u8 gText_WithdrawMonDescription[] = _("Move POKéMON stored in BOXES to\nyour party."); -const u8 gText_DepositMonDescription[] = _("Store POKéMON in your party in BOXES."); -const u8 gText_MoveMonDescription[] = _("Organize the POKéMON in BOXES and\nin your party."); -const u8 gText_MoveItemsDescription[] = _("Move items held by any POKéMON\nin a BOX or your party."); -const u8 gText_SeeYaDescription[] = _("Return to the previous menu."); -const u8 gText_JustOnePkmn[] = _("There is just one POKéMON with you."); -const u8 gText_PartyFull[] = _("Your party is full!"); -const u8 gText_Box[] = _("BOX"); -const u8 gText_CheckMapOfHoenn[] = _("Check the map of the HOENN region."); -const u8 gText_CheckPokemonInDetail[] = _("Check POKéMON in detail."); -const u8 gText_CallRegisteredTrainer[] = _("Call a registered TRAINER."); -const u8 gText_CheckObtainedRibbons[] = _("Check obtained RIBBONS."); -const u8 gText_PutAwayPokenav[] = _("Put away the POKéNAV."); -const u8 gText_NoRibbonWinners[] = _("There are no RIBBON winners."); -const u8 gText_NoTrainersRegistered[] = _("No TRAINERS are registered."); // Unused -const u8 gText_CheckPartyPokemonInDetail[] = _("Check party POKéMON in detail."); -const u8 gText_CheckAllPokemonInDetail[] = _("Check all POKéMON in detail."); -const u8 gText_ReturnToPokenavMenu[] = _("Return to the POKéNAV menu."); -const u8 gText_FindCoolPokemon[] = _("Find cool POKéMON."); -const u8 gText_FindBeautifulPokemon[] = _("Find beautiful POKéMON."); -const u8 gText_FindCutePokemon[] = _("Find cute POKéMON."); -const u8 gText_FindSmartPokemon[] = _("Find smart POKéMON."); -const u8 gText_FindToughPokemon[] = _("Find tough POKéMON."); -const u8 gText_ReturnToConditionMenu[] = _("Return to the CONDITION menu."); -const u8 gText_NumberRegistered[] = _("No. registered"); -const u8 gText_NumberOfBattles[] = _("No. of battles"); -const u8 gText_Detail[] = _("DETAIL"); // Unused -const u8 gText_Call2[] = _("CALL"); // Unused -const u8 gText_UnusedExit[] = _("EXIT"); // Unused -const u8 gText_CantCallOpponentHere[] = _("Can't call opponent here."); // Unused -const u8 gText_PokenavMatchCall_Strategy[] = _("STRATEGY"); -const u8 gText_PokenavMatchCall_TrainerPokemon[] = _("TRAINER'S POKéMON"); -const u8 gText_PokenavMatchCall_SelfIntroduction[] = _("SELF-INTRODUCTION"); -const u8 gText_Pokenav_ClearButtonList[] = _("{CLEAR 0x80}"); -const u8 gText_PokenavMap_ZoomedOutButtons[] = _("{A_BUTTON}ZOOM {B_BUTTON}CANCEL"); -const u8 gText_PokenavMap_ZoomedInButtons[] = _("{A_BUTTON}FULL {B_BUTTON}CANCEL"); -const u8 gText_PokenavCondition_MonListButtons[] = _("{A_BUTTON}CONDITION {B_BUTTON}CANCEL"); -const u8 gText_PokenavCondition_MonStatusButtons[] = _("{A_BUTTON}MARKINGS {B_BUTTON}CANCEL"); -const u8 gText_PokenavCondition_MarkingButtons[] = _("{A_BUTTON}SELECT MARK {B_BUTTON}CANCEL"); -const u8 gText_PokenavMatchCall_TrainerListButtons[] = _("{A_BUTTON}MENU {B_BUTTON}CANCEL"); -const u8 gText_PokenavMatchCall_CallMenuButtons[] = _("{A_BUTTON}OK {B_BUTTON}CANCEL"); -const u8 gText_PokenavMatchCall_CheckTrainerButtons[] = _("{B_BUTTON}CANCEL"); -const u8 gText_PokenavRibbons_MonListButtons[] = _("{A_BUTTON}RIBBONS {B_BUTTON}CANCEL"); -const u8 gText_PokenavRibbons_RibbonListButtons[] = _("{A_BUTTON}CHECK {B_BUTTON}CANCEL"); -const u8 gText_PokenavRibbons_RibbonCheckButtons[] = _("{B_BUTTON}CANCEL"); const u8 gText_NatureSlash[] = _("NATURE/"); -const u8 gText_TrainerCloseBy[] = _("That TRAINER is close by.\nTalk to the TRAINER in person!"); const u8 gText_InParty[] = _("IN PARTY"); -const u8 gText_Number2[] = _("No. "); -const u8 gText_Ribbons[] = _("RIBBONS"); // Unused const u8 gText_PokemonMaleLv[] = _("{DYNAMIC 0}{COLOR_HIGHLIGHT_SHADOW LIGHT_RED WHITE GREEN}♂{COLOR_HIGHLIGHT_SHADOW DARK_GRAY WHITE LIGHT_GRAY}/{LV}{DYNAMIC 1}"); // Unused const u8 gText_PokemonFemaleLv[] = _("{DYNAMIC 0}{COLOR_HIGHLIGHT_SHADOW LIGHT_GREEN WHITE BLUE}♀{COLOR_HIGHLIGHT_SHADOW DARK_GRAY WHITE LIGHT_GRAY}/{LV}{DYNAMIC 1}"); // Unused const u8 gText_PokemonNoGenderLv[] = _("{DYNAMIC 0}/{LV}{DYNAMIC 1}"); // Unused -const u8 gText_Unknown[] = _("UNKNOWN"); -const u8 gText_Call[] = _("CALL"); -const u8 gText_Check[] = _("CHECK"); -const u8 gText_Cancel6[] = _("CANCEL"); -const u8 gText_NumberIndex[] = _("No. {DYNAMIC 0}"); -const u8 gText_RibbonsF700[] = _("RIBBONS {DYNAMIC 0}"); const u8 gText_PokemonMaleLv2[] = _("{DYNAMIC 0}{COLOR_HIGHLIGHT_SHADOW LIGHT_RED WHITE GREEN}♂{COLOR_HIGHLIGHT_SHADOW DARK_GRAY WHITE LIGHT_GRAY}/{LV}{DYNAMIC 1}{DYNAMIC 2}"); // Unused const u8 gText_PokemonFemaleLv2[] = _("{DYNAMIC 0}{COLOR_HIGHLIGHT_SHADOW LIGHT_GREEN WHITE BLUE}♀{COLOR_HIGHLIGHT_SHADOW DARK_GRAY WHITE LIGHT_GRAY}/{LV}{DYNAMIC 1}{DYNAMIC 2}"); // Unused const u8 gText_PokemonNoGenderLv2[] = _("{DYNAMIC 0}/{LV}{DYNAMIC 1}{DYNAMIC 2}"); // Unused @@ -1297,20 +1066,6 @@ const u8 gText_ThankYou[] = _("THANK YOU"); const u8 gText_ByeBye[] = _("BYE-BYE!"); const u8 gText_PlayerScurriedToCenter[] = _("{PLAYER} scurried to a POKéMON CENTER,\nprotecting the exhausted and fainted\nPOKéMON from further harm…\p"); const u8 gText_PlayerScurriedBackHome[] = _("{PLAYER} scurried back home, protecting\nthe exhausted and fainted POKéMON from\nfurther harm…\p"); -const u8 gText_MatchCallSteven_Strategy[] = _("Attack the weak points!"); -const u8 gText_MatchCallSteven_Pokemon[] = _("Ultimate STEEL POKéMON."); -const u8 gText_MatchCallSteven_Intro1_BeforeMeteorFallsBattle[] = _("I'd climb even waterfalls"); -const u8 gText_MatchCallSteven_Intro2_BeforeMeteorFallsBattle[] = _("to find a rare stone!"); -const u8 gText_MatchCallSteven_Intro1_AfterMeteorFallsBattle[] = _("I'm the strongest and most"); -const u8 gText_MatchCallSteven_Intro2_AfterMeteorFallsBattle[] = _("energetic after all!"); -const u8 gText_MatchCallBrendan_Strategy[] = _("Battle with knowledge!"); -const u8 gText_MatchCallBrendan_Pokemon[] = _("I will use various POKéMON."); -const u8 gText_MatchCallBrendan_Intro1[] = _("I'll be a better POKéMON"); -const u8 gText_MatchCallBrendan_Intro2[] = _("prof than my father is!"); -const u8 gText_MatchCallMay_Strategy[] = _("I'm not so good at battles."); -const u8 gText_MatchCallMay_Pokemon[] = _("I'll use any POKéMON!"); -const u8 gText_MatchCallMay_Intro1[] = _("My POKéMON and I help"); -const u8 gText_MatchCallMay_Intro2[] = _("my father's research."); const u8 gText_HatchedFromEgg[] = _("{STR_VAR_1} hatched from the EGG!"); const u8 gText_NicknameHatchPrompt[] = _("Would you like to nickname the newly\nhatched {STR_VAR_1}?"); ALIGNED(4) const u8 gText_ReadyPickBerry[] = _("Are you ready to BERRY-CRUSH?\nPlease pick a BERRY for use.\p"); @@ -1378,10 +1133,6 @@ const u8 gText_BattleArenaDesc[] = _("Win battles with teamed-up POKéMON!\nYour const u8 gText_BattleFactoryDesc[] = _("Aim for victory using rental POKéMON!\nYour knowledge will be tested."); const u8 gText_BattlePikeDesc[] = _("Select one of three paths to battle!\nYour luck will be tested."); const u8 gText_BattlePyramidDesc[] = _("Aim for the top with exploration!\nYour bravery will be tested."); -const u8 gText_ContinueMenuPlayer[] = _("PLAYER"); -const u8 gText_ContinueMenuTime[] = _("TIME"); -const u8 gText_ContinueMenuPokedex[] = _("POKéDEX"); -const u8 gText_ContinueMenuBadges[] = _("BADGES"); const u8 gText_Powder[] = _("POWDER"); const u8 gText_BerryPickingRecords[] = _("DODRIO BERRY-PICKING RECORDS"); const u8 gText_BerriesPicked[] = _("BERRIES picked:"); @@ -1610,7 +1361,6 @@ const u8 gText_BoxName[] = _("BOX NAME?"); const u8 gText_PkmnsNickname[] = _("{STR_VAR_1}'s nickname?"); const u8 gText_TellHimTheWords[] = _("Tell him the words."); const u8 gText_MoveOkBack[] = _("{DPAD_NONE}MOVE {A_BUTTON}OK {B_BUTTON}BACK"); -const u8 gText_CallCantBeMadeHere[] = _("A call can't be made from here."); const u8 gText_RentalPkmn2[] = _("RENTAL POKéMON"); const u8 gText_SelectFirstPkmn[] = _("Select the first POKéMON."); const u8 gText_SelectSecondPkmn[] = _("Select the second POKéMON."); @@ -1781,28 +1531,6 @@ const u8 gText_ClearingData[] = _("Clearing data…\nPlease wait."); const u8 gText_IsThisTheCorrectTime[] = _("Is this the correct time?"); const u8 gText_Confirm3[] = _("CONFIRM"); const u8 gText_Cancel4[] = _("CANCEL"); -const u8 gText_MrStoneMatchCallDesc[] = _("DEVON PRES"); -const u8 gText_MrStoneMatchCallName[] = _("MR. STONE"); -const u8 gText_StevenMatchCallDesc[] = _("HARD AS ROCK"); -const u8 gText_StevenMatchCallName[] = _("STEVEN"); -const u8 gText_MayBrendanMatchCallDesc[] = _("RAD NEIGHBOR"); -const u8 gText_NormanMatchCallDesc[] = _("RELIABLE ONE"); -const u8 gText_MomMatchCallDesc[] = _("CALM & KIND"); -const u8 gText_WallyMatchCallDesc[] = _("{PKMN} LOVER"); -const u8 gText_NormanMatchCallName[] = _("DAD"); -const u8 gText_MomMatchCallName[] = _("MOM"); -const u8 gText_ScottMatchCallDesc[] = _("ELUSIVE EYES"); -const u8 gText_ScottMatchCallName[] = _("SCOTT"); -const u8 gText_RoxanneMatchCallDesc[] = _("ROCKIN' WHIZ"); -const u8 gText_BrawlyMatchCallDesc[] = _("THE BIG HIT"); -const u8 gText_WattsonMatchCallDesc[] = _("SWELL SHOCK"); -const u8 gText_FlanneryMatchCallDesc[] = _("PASSION BURN"); -const u8 gText_WinonaMatchCallDesc[] = _("SKY TAMER"); -const u8 gText_TateLizaMatchCallDesc[] = _("MYSTIC DUO"); -const u8 gText_JuanMatchCallDesc[] = _("DANDY CHARM"); -const u8 gText_EliteFourMatchCallDesc[] = _("ELITE FOUR"); -const u8 gText_ChampionMatchCallDesc[] = _("CHAMPION"); -const u8 gText_ProfBirchMatchCallDesc[] = _("{PKMN} PROF."); const u8 gText_CommStandbyAwaitingOtherPlayer[] = _("Communication standby…\nAwaiting another player to choose."); const u8 gText_BattleWasRefused[] = _("The battle was refused.{PAUSE 60}"); const u8 gText_RefusedBattle[] = _("Refused the battle.{PAUSE 60}"); diff --git a/src/text_window.c b/src/text_window.c index df06837299..efd087977e 100644 --- a/src/text_window.c +++ b/src/text_window.c @@ -5,6 +5,7 @@ #include "palette.h" #include "bg.h" #include "graphics.h" +#include "menu.h" const u8 gTextWindowFrame1_Gfx[] = INCBIN_U8("graphics/text_window/1.4bpp"); static const u8 sTextWindowFrame2_Gfx[] = INCBIN_U8("graphics/text_window/2.4bpp"); @@ -96,6 +97,12 @@ void LoadMessageBoxGfx(u8 windowId, u16 destOffset, u8 palOffset) LoadPalette(GetOverworldTextboxPalettePtr(), palOffset, PLTT_SIZE_4BPP); } +void LoadSignBoxGfx(u8 windowId, u16 destOffset, u8 palOffset) +{ + LoadBgTiles(GetWindowAttribute(windowId, WINDOW_BG), gSignpostWindow_Gfx, 0x1C0, destOffset); + LoadPalette(GetTextWindowPalette(1), palOffset, PLTT_SIZE_4BPP); +} + void LoadUserWindowBorderGfx_(u8 windowId, u16 destOffset, u8 palOffset) { LoadUserWindowBorderGfx(windowId, destOffset, palOffset); diff --git a/src/trainer_hill.c b/src/trainer_hill.c index aa7c8ee930..c89803ffb2 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -852,7 +852,7 @@ bool8 GetHillTrainerFlag(u8 objectEventId) u32 trainerIndexStart = GetFloorId() * HILL_TRAINERS_PER_FLOOR; u8 bitId = gObjectEvents[objectEventId].localId - 1 + trainerIndexStart; - return gSaveBlock2Ptr->frontier.trainerFlags & gBitTable[bitId]; + return gSaveBlock2Ptr->frontier.trainerFlags & (1u << bitId); } void SetHillTrainerFlag(void) @@ -864,7 +864,7 @@ void SetHillTrainerFlag(void) { if (gSaveBlock2Ptr->frontier.trainerIds[i] == gTrainerBattleOpponent_A) { - gSaveBlock2Ptr->frontier.trainerFlags |= gBitTable[trainerIndexStart + i]; + gSaveBlock2Ptr->frontier.trainerFlags |= 1u << (trainerIndexStart + i); break; } } @@ -875,7 +875,7 @@ void SetHillTrainerFlag(void) { if (gSaveBlock2Ptr->frontier.trainerIds[i] == gTrainerBattleOpponent_B) { - gSaveBlock2Ptr->frontier.trainerFlags |= gBitTable[trainerIndexStart + i]; + gSaveBlock2Ptr->frontier.trainerFlags |= 1u << (trainerIndexStart + i); break; } } diff --git a/src/tv.c b/src/tv.c index e0f910eaaf..c0e207ce8a 100644 --- a/src/tv.c +++ b/src/tv.c @@ -1262,7 +1262,7 @@ void PutBattleUpdateOnTheAir(u8 opponentLinkPlayerId, u16 move, u16 speciesPlaye if (gBattleTypeFlags & BATTLE_TYPE_MULTI) show->battleUpdate.battleType = 2; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (IsDoubleBattle()) show->battleUpdate.battleType = 1; else show->battleUpdate.battleType = 0; diff --git a/src/type_icons.c b/src/type_icons.c new file mode 100644 index 0000000000..41fa102bb9 --- /dev/null +++ b/src/type_icons.c @@ -0,0 +1,552 @@ +#include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "battle_controllers.h" +#include "battle_gimmick.h" +#include "decompress.h" +#include "graphics.h" +#include "pokedex.h" +#include "sprite.h" +#include "type_icons.h" + +static void LoadTypeSpritesAndPalettes(void); +static void LoadTypeIconsPerBattler(u32, u32); + +static bool32 UseDoubleBattleCoords(u32); + +static u32 GetMonPublicType(u32, u32); +static bool32 ShouldHideUncaughtType(u32); +static u32 GetMonDefensiveTeraType(struct Pokemon *, struct Pokemon*, u32, u32, u32, u32); +static u32 IsIllusionActiveAndTypeUnchanged(struct Pokemon*, u32, u32); + +static void CreateSpriteFromType(u32, bool32, u32[], u32, u32); +static bool32 ShouldSkipSecondType(u32[], u32); +static void SetTypeIconXY(s32*, s32*, u32, bool32, u32); + +static void CreateSpriteAndSetTypeSpriteAttributes(u32, u32 x, u32 y, u32, u32, bool32); +static bool32 ShouldFlipTypeIcon(bool32, u32, u32); + +static void SpriteCB_TypeIcon(struct Sprite*); +static void DestroyTypeIcon(struct Sprite*); +static void FreeAllTypeIconResources(void); +static bool32 ShouldHideTypeIcon(u32); +static s32 GetTypeIconHideMovement(bool32, u32); +static s32 GetTypeIconSlideMovement(bool32, u32, s32); +static s32 GetTypeIconBounceMovement(s32, u32); + +const struct Coords16 sTypeIconPositions[][2] = +{ + [B_POSITION_PLAYER_LEFT] = + { + [FALSE] = {221, 86}, + [TRUE] = {144, 71}, + }, + [B_POSITION_OPPONENT_LEFT] = + { + [FALSE] = {20, 26}, + [TRUE] = {97, 14}, + }, + [B_POSITION_PLAYER_RIGHT] = + { + [TRUE] = {156, 96}, + }, + [B_POSITION_OPPONENT_RIGHT] = + { + [TRUE] = {85, 39}, + }, +}; + +const union AnimCmd sSpriteAnim_TypeIcon_Normal[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_NORMAL), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Fighting[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_FIGHTING), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Flying[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_FLYING), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Poison[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_POISON), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Ground[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_GROUND), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Rock[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_ROCK), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Bug[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_BUG), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Ghost[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_GHOST), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Steel[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_STEEL), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Mystery[] = +{ + ANIMCMD_FRAME(TYPE_ICON_1_FRAME(TYPE_MYSTERY), 0), + ANIMCMD_END +}; + +const union AnimCmd sSpriteAnim_TypeIcon_Fire[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_FIRE), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Water[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_WATER), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Grass[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_GRASS), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Electric[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_ELECTRIC), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Psychic[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_PSYCHIC), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Ice[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_ICE), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Dragon[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_DRAGON), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Dark[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_DARK), 0), + ANIMCMD_END +}; +const union AnimCmd sSpriteAnim_TypeIcon_Fairy[] = +{ + ANIMCMD_FRAME(TYPE_ICON_2_FRAME(TYPE_FAIRY), 0), + ANIMCMD_END +}; + +const union AnimCmd *const sSpriteAnimTable_TypeIcons[] = +{ + [TYPE_NONE] = sSpriteAnim_TypeIcon_Mystery, + [TYPE_NORMAL] = sSpriteAnim_TypeIcon_Normal, + [TYPE_FIGHTING] = sSpriteAnim_TypeIcon_Fighting, + [TYPE_FLYING] = sSpriteAnim_TypeIcon_Flying, + [TYPE_POISON] = sSpriteAnim_TypeIcon_Poison, + [TYPE_GROUND] = sSpriteAnim_TypeIcon_Ground, + [TYPE_ROCK] = sSpriteAnim_TypeIcon_Rock, + [TYPE_BUG] = sSpriteAnim_TypeIcon_Bug, + [TYPE_GHOST] = sSpriteAnim_TypeIcon_Ghost, + [TYPE_STEEL] = sSpriteAnim_TypeIcon_Steel, + [TYPE_MYSTERY] = sSpriteAnim_TypeIcon_Mystery, + [TYPE_FIRE] = sSpriteAnim_TypeIcon_Fire, + [TYPE_WATER] = sSpriteAnim_TypeIcon_Water, + [TYPE_GRASS] = sSpriteAnim_TypeIcon_Grass, + [TYPE_ELECTRIC] = sSpriteAnim_TypeIcon_Electric, + [TYPE_PSYCHIC] = sSpriteAnim_TypeIcon_Psychic, + [TYPE_ICE] = sSpriteAnim_TypeIcon_Ice, + [TYPE_DRAGON] = sSpriteAnim_TypeIcon_Dragon, + [TYPE_DARK] = sSpriteAnim_TypeIcon_Dark, + [TYPE_FAIRY] = sSpriteAnim_TypeIcon_Fairy, + [TYPE_STELLAR] = sSpriteAnim_TypeIcon_Mystery, +}; + +const struct CompressedSpritePalette sTypeIconPal1 = +{ + .data = gBattleIcons_Pal1, + .tag = TYPE_ICON_TAG +}; + +const struct CompressedSpritePalette sTypeIconPal2 = +{ + .data = gBattleIcons_Pal2, + .tag = TYPE_ICON_TAG_2 +}; + +const struct OamData sOamData_TypeIcons = +{ + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .shape = SPRITE_SHAPE(8x16), + .size = SPRITE_SIZE(8x16), + .priority = 1, +}; + +const struct CompressedSpriteSheet sSpriteSheet_TypeIcons2 = +{ + .data = gBattleIcons_Gfx2, + .size = (8*16) * 9, + .tag = TYPE_ICON_TAG_2, +}; + +const struct CompressedSpriteSheet sSpriteSheet_TypeIcons1 = +{ + .data = gBattleIcons_Gfx1, + .size = (8*16) * 10, + .tag = TYPE_ICON_TAG, +}; + +const struct SpriteTemplate sSpriteTemplate_TypeIcons1 = +{ + .tileTag = TYPE_ICON_TAG, + .paletteTag = TYPE_ICON_TAG, + .oam = &sOamData_TypeIcons, + .anims = sSpriteAnimTable_TypeIcons, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_TypeIcon +}; + +const struct SpriteTemplate sSpriteTemplate_TypeIcons2 = +{ + .tileTag = TYPE_ICON_TAG_2, + .paletteTag = TYPE_ICON_TAG_2, + .oam = &sOamData_TypeIcons, + .anims = sSpriteAnimTable_TypeIcons, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_TypeIcon +}; + +void LoadTypeIcons(u32 battler) +{ + u32 position; + + if (B_SHOW_TYPES == SHOW_TYPES_NEVER) + return; + + LoadTypeSpritesAndPalettes(); + + for (position = 0; position < gBattlersCount; ++position) + LoadTypeIconsPerBattler(battler, position); +} + +static void LoadTypeSpritesAndPalettes(void) +{ + if (IndexOfSpritePaletteTag(TYPE_ICON_TAG) != UCHAR_MAX) + return; + + LoadCompressedSpriteSheet(&sSpriteSheet_TypeIcons1); + LoadCompressedSpriteSheet(&sSpriteSheet_TypeIcons2); + LoadCompressedSpritePalette(&sTypeIconPal1); + LoadCompressedSpritePalette(&sTypeIconPal2); +} + +static void LoadTypeIconsPerBattler(u32 battler, u32 position) +{ + u32 typeNum, types[2]; + u32 battlerId = GetBattlerAtPosition(position); + bool32 useDoubleBattleCoords = UseDoubleBattleCoords(battlerId); + + if (!IsBattlerAlive(battlerId)) + return; + + for (typeNum = 0; typeNum < 2; ++typeNum) + types[typeNum] = GetMonPublicType(battlerId, typeNum); + + for (typeNum = 0; typeNum < 2; ++typeNum) + CreateSpriteFromType(position, useDoubleBattleCoords, types, typeNum, battler); +} + +static bool32 UseDoubleBattleCoords(u32 position) +{ + if (!IsDoubleBattle()) + return FALSE; + + if ((position == B_POSITION_PLAYER_LEFT) && (gBattleMons[B_POSITION_PLAYER_RIGHT].species == SPECIES_NONE)) + return FALSE; + + if ((position == B_POSITION_OPPONENT_LEFT) && (gBattleMons[B_POSITION_OPPONENT_RIGHT].species == SPECIES_NONE)) + return FALSE; + + return TRUE; +} + +static u32 GetMonPublicType(u32 battlerId, u32 typeNum) +{ + struct Pokemon* mon = GetPartyBattlerData(battlerId); + u32 monSpecies = GetMonData(mon,MON_DATA_SPECIES,NULL); + struct Pokemon* monIllusion; + u32 illusionSpecies; + + if (ShouldHideUncaughtType(monSpecies)) + return TYPE_MYSTERY; + + monIllusion = GetIllusionMonPtr(battlerId); + illusionSpecies = GetMonData(monIllusion,MON_DATA_SPECIES,NULL); + + if (GetActiveGimmick(battlerId) == GIMMICK_TERA) + return GetMonDefensiveTeraType(mon,monIllusion,battlerId,typeNum,illusionSpecies,monSpecies); + + if (IsIllusionActiveAndTypeUnchanged(monIllusion,monSpecies, battlerId)) + return gSpeciesInfo[illusionSpecies].types[typeNum]; + + return gBattleMons[battlerId].types[typeNum]; +} + +static bool32 ShouldHideUncaughtType(u32 species) +{ + if (B_SHOW_TYPES != SHOW_TYPES_CAUGHT) + return FALSE; + + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species),FLAG_GET_CAUGHT)) + return FALSE; + + return TRUE; +} + +static u32 GetMonDefensiveTeraType(struct Pokemon * mon, struct Pokemon* monIllusion, u32 battlerId, u32 typeNum, u32 illusionSpecies, u32 monSpecies) +{ + u32 teraType = GetBattlerTeraType(battlerId); + u32 targetSpecies; + + if (teraType != TYPE_STELLAR) + return teraType; + + targetSpecies = (monIllusion != NULL) ? illusionSpecies : monSpecies; + + return gSpeciesInfo[targetSpecies].types[typeNum]; +} + +static u32 IsIllusionActiveAndTypeUnchanged(struct Pokemon* monIllusion, u32 monSpecies, u32 battlerId) +{ + u32 typeNum; + + if (monIllusion == NULL) + return FALSE; + + for (typeNum = 0; typeNum < 2; typeNum++) + if (gSpeciesInfo[monSpecies].types[typeNum] != gBattleMons[battlerId].types[typeNum]) + return FALSE; + + return TRUE; +} + +static void CreateSpriteFromType(u32 position, bool32 useDoubleBattleCoords, u32 types[], u32 typeNum, u32 battler) +{ + s32 x = 0, y = 0; + + if (ShouldSkipSecondType(types, typeNum)) + return; + + SetTypeIconXY(&x, &y, position, useDoubleBattleCoords, typeNum); + + CreateSpriteAndSetTypeSpriteAttributes(types[typeNum], x, y, position, battler, useDoubleBattleCoords); +} + +static bool32 ShouldSkipSecondType(u32 types[], u32 typeNum) +{ + if (!typeNum) + return FALSE; + + if (types[0] != types[1]) + return FALSE; + + return TRUE; +} + +static void SetTypeIconXY(s32* x, s32* y, u32 position, bool32 useDoubleBattleCoords, u32 typeNum) +{ + *x = sTypeIconPositions[position][useDoubleBattleCoords].x; + *y = sTypeIconPositions[position][useDoubleBattleCoords].y + (11 * typeNum); +} + +static void CreateSpriteAndSetTypeSpriteAttributes(u32 type, u32 x, u32 y, u32 position, u32 battler, bool32 useDoubleBattleCoords) +{ + struct Sprite* sprite; + const struct SpriteTemplate* spriteTemplate = gTypesInfo[type].useSecondTypeIconPalette ? &sSpriteTemplate_TypeIcons2 : &sSpriteTemplate_TypeIcons1; + u32 spriteId = CreateSpriteAtEnd(spriteTemplate, x, y, UCHAR_MAX); + + if (spriteId == MAX_SPRITES) + return; + + sprite = &gSprites[spriteId]; + sprite->tMonPosition = position; + sprite->tBattlerId = battler; + sprite->tVerticalPosition = y; + + sprite->hFlip = ShouldFlipTypeIcon(useDoubleBattleCoords, position, type); + + StartSpriteAnim(sprite, type); +} + +static bool32 ShouldFlipTypeIcon(bool32 useDoubleBattleCoords, u32 position, u32 typeId) +{ + bool32 side = (useDoubleBattleCoords) ? B_SIDE_OPPONENT : B_SIDE_PLAYER; + + if (GetBattlerSide(GetBattlerAtPosition(position)) != side) + return FALSE; + + return !gTypesInfo[typeId].isSpecialCaseType; +} + +static void SpriteCB_TypeIcon(struct Sprite* sprite) +{ + u32 position = sprite->tMonPosition; + u32 battlerId = sprite->tBattlerId; + bool32 useDoubleBattleCoords = UseDoubleBattleCoords(GetBattlerAtPosition(position)); + + if (sprite->tHideIconTimer == NUM_FRAMES_HIDE_TYPE_ICON) + { + DestroyTypeIcon(sprite); + return; + } + + if (ShouldHideTypeIcon(battlerId)) + { + sprite->x += GetTypeIconHideMovement(useDoubleBattleCoords, position); + ++sprite->tHideIconTimer; + return; + } + + sprite->x += GetTypeIconSlideMovement(useDoubleBattleCoords,position, sprite->x); + sprite->y = GetTypeIconBounceMovement(sprite->tVerticalPosition,position); +} + +static const u32 typeIconTags[] = +{ + TYPE_ICON_TAG, + TYPE_ICON_TAG_2 +}; + +static void DestroyTypeIcon(struct Sprite* sprite) +{ + u32 spriteId, tag; + + DestroySpriteAndFreeResources(sprite); + + for (spriteId = 0; spriteId < MAX_SPRITES; ++spriteId) + { + if (!gSprites[spriteId].inUse) + continue; + + for (tag = 0; tag < 2; tag++) + { + if (gSprites[spriteId].template->paletteTag == typeIconTags[tag]) + return; + + if (gSprites[spriteId].template->tileTag == typeIconTags[tag]) + return; + } + } + + FreeAllTypeIconResources(); +} + +static void FreeAllTypeIconResources(void) +{ + u32 tag; + + for (tag = 0; tag < 2; tag++) + { + FreeSpriteTilesByTag(typeIconTags[tag]); + FreeSpritePaletteByTag(typeIconTags[tag]); + } +} + +static void (* const sShowTypesControllerFuncs[])(u32 battler) = +{ + PlayerHandleChooseMove, + HandleChooseMoveAfterDma3, + HandleInputChooseTarget, + HandleInputShowTargets, + HandleInputShowEntireFieldTargets, + HandleMoveSwitching, + HandleInputChooseMove, +}; + + +static bool32 ShouldHideTypeIcon(u32 battlerId) +{ + u32 funcIndex; + + for (funcIndex = 0; funcIndex < ARRAY_COUNT(sShowTypesControllerFuncs); funcIndex++) + if (gBattlerControllerFuncs[battlerId] == sShowTypesControllerFuncs[funcIndex]) + return FALSE; + + return TRUE; +} + +static s32 GetTypeIconHideMovement(bool32 useDoubleBattleCoords, u32 position) +{ + if (useDoubleBattleCoords) + { + if (position == B_POSITION_PLAYER_LEFT || position == B_POSITION_PLAYER_RIGHT) + return 1; + else + return -1; + } + + if (position == B_POSITION_PLAYER_LEFT) + return -1; + else + return 1; +} + +static s32 GetTypeIconSlideMovement(bool32 useDoubleBattleCoords, u32 position, s32 xPos) +{ + if (useDoubleBattleCoords) + { + switch (position) + { + case B_POSITION_PLAYER_LEFT: + case B_POSITION_PLAYER_RIGHT: + if (xPos > sTypeIconPositions[position][useDoubleBattleCoords].x - 10) + return -1; + break; + default: + case B_POSITION_OPPONENT_LEFT: + case B_POSITION_OPPONENT_RIGHT: + if (xPos < sTypeIconPositions[position][useDoubleBattleCoords].x + 10) + return 1; + break; + } + return 0; + } + + if (position == B_POSITION_PLAYER_LEFT) + { + if (xPos < sTypeIconPositions[position][useDoubleBattleCoords].x + 10) + return 1; + } + else + { + if (xPos > sTypeIconPositions[position][useDoubleBattleCoords].x - 10) + return -1; + } + return 0; +} + +static s32 GetTypeIconBounceMovement(s32 originalY, u32 position) +{ + struct Sprite* healthbox = &gSprites[gHealthboxSpriteIds[GetBattlerAtPosition(position)]]; + return originalY + healthbox->y2; +} + diff --git a/src/util.c b/src/util.c index 77d9cde2f1..002b2fabf0 100644 --- a/src/util.c +++ b/src/util.c @@ -4,42 +4,6 @@ #include "palette.h" #include "constants/rgb.h" -const u32 gBitTable[] = -{ - 1 << 0, - 1 << 1, - 1 << 2, - 1 << 3, - 1 << 4, - 1 << 5, - 1 << 6, - 1 << 7, - 1 << 8, - 1 << 9, - 1 << 10, - 1 << 11, - 1 << 12, - 1 << 13, - 1 << 14, - 1 << 15, - 1 << 16, - 1 << 17, - 1 << 18, - 1 << 19, - 1 << 20, - 1 << 21, - 1 << 22, - 1 << 23, - 1 << 24, - 1 << 25, - 1 << 26, - 1 << 27, - 1 << 28, - 1 << 29, - 1 << 30, - 1 << 31, -}; - static const struct SpriteTemplate sInvisibleSpriteTemplate = { .tileTag = 0, diff --git a/src/vs_seeker.c b/src/vs_seeker.c index 30dcb74ce0..771c01dc72 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -581,7 +581,7 @@ bool32 IsVsSeekerEnabled(void) { if (I_VS_SEEKER_CHARGING == 0) return FALSE; - + return (CheckBagHasItem(ITEM_VS_SEEKER, 1)); } diff --git a/src/wild_encounter.c b/src/wild_encounter.c index ae7770aa3a..033eec56da 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -1002,14 +1002,10 @@ static bool8 IsWildLevelAllowedByRepel(u8 wildLevel) for (i = 0; i < PARTY_SIZE; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_HP) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) + if (I_REPEL_INCLUDE_FAINTED == GEN_1 || I_REPEL_INCLUDE_FAINTED >= GEN_6 || GetMonData(&gPlayerParty[i], MON_DATA_HP)) { - u8 ourLevel = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); - - if (wildLevel < ourLevel) - return FALSE; - else - return TRUE; + if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) + return wildLevel >= GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); } } diff --git a/sym_bss.txt b/sym_bss.txt deleted file mode 100644 index 3a23e74789..0000000000 --- a/sym_bss.txt +++ /dev/null @@ -1,63 +0,0 @@ - .include "src/main.o" - .include "gflib/malloc.o" - .include "gflib/dma3_manager.o" - .include "gflib/gpu_regs.o" - .include "gflib/bg.o" - .include "gflib/text.o" - .include "gflib/sprite.o" - .include "src/link.o" - .include "src/AgbRfu_LinkManager.o" - .include "src/link_rfu_3.o" - .include "src/link_rfu_2.o" - .include "src/union_room.o" - .include "src/wireless_communication_status_screen.o" - .include "src/union_room_battle.o" - .include "src/dodrio_berry_picking.o" - .include "src/rtc.o" - .include "src/main_menu.o" - .include "src/digit_obj_util.o" - .include "src/egg_hatch.o" - .include "src/berry_blender.o" - .include "src/play_time.o" - .include "src/overworld.o" - .include "src/field_camera.o" - .include "src/script.o" - .include "src/scrcmd.o" - .include "src/tileset_anims.o" - .include "src/palette.o" - .include "src/sound.o" - .include "src/field_weather.o" - .include "src/field_effect.o" - .include "src/pokemon_storage_system.o" - .include "src/fldeff_cut.o" - .include "src/script_menu.o" - .include "src/record_mixing.o" - .include "src/tv.o" - .include "src/mauville_old_man.o" - .include "src/menu_helpers.o" - .include "src/region_map.o" - .include "src/slot_machine.o" - .include "src/contest_painting.o" - .include "src/starter_choose.o" - .include "src/pokedex_area_screen.o" - .include "src/battle_transition.o" - .include "src/pokemon_animation.o" - .include "src/recorded_battle.o" - .include "src/battle_factory_screen.o" - .include "src/battle_factory.o" - .include "src/battle_pike.o" - .include "src/battle_tent.o" - .include "src/multiboot.o" - .include "src/mirage_tower.o" - .include "src/berry_fix_program.o" - .include "src/pokenav_conditions_gfx.o" - .include "src/pokenav_ribbons_summary.o" - .include "src/ereader_helpers.o" - .include "src/faraway_island.o" - .include "src/m4a_1.o" - .include "data/sound_data.o" - .include "src/agb_flash.o" - .include "src/siirtc.o" - .include "*libgcc.a:dp-bit.o" - .include "*libgcc.a:fp-bit.o" - .include "*libc.a:syscalls.o" diff --git a/sym_common.txt b/sym_common.txt deleted file mode 100644 index 170aee2f42..0000000000 --- a/sym_common.txt +++ /dev/null @@ -1,83 +0,0 @@ - .space 0x8 - .include "main.o" - @ ../gflib/bg.o - .align 2 -gWindowTileAutoAllocEnabled: - .space 4 - @ ../gflib/window.o - .align 4 -gTransparentTileNumber: - .space 1 - .align 4 -gWindowBgTilemapBuffers: - .space 16 - @ ../gflib/text.o - .align 4 -gFonts: - .space 4 - .align 2 -gDisableTextPrinters: - .space 1 - .align 4 -gCurGlyph: - .space 132 - .align 2 -gTextFlags: - .space 4 - @ ../gflib/sprite.o - .align 2 -gOamMatrixAllocBitmap: - .space 4 - .align 2 -gReservedSpritePaletteCount: - .space 1 - .align 4 - .include "link.o" - .include "AgbRfu_LinkManager.o" - .include "link_rfu_2.o" - .include "rtc.o" - .include "battle_main.o" - .include "battle_controllers.o" - .include "random.o" - .include "load_save.o" - .include "berry_blender.o" - .include "overworld.o" - .include "fieldmap.o" - .include "field_camera.o" - .include "field_control_avatar.o" - .include "start_menu.o" - .include "sound.o" - .include "task.o" - .include "trainer_see.o" - .include "pokedex.o" - .include "contest.o" - .include "tv.o" - .include "mauville_old_man.o" - .include "image_processing_effects.o" - - .space 0x4 - - .include "contest_painting.o" - .include "field_specials.o" - .include "evolution_scene.o" - .include "pokedex_cry_screen.o" - .include "save.o" - .include "battle_tower.o" - .include "intro.o" - .include "battle_anim_throw.o" - .include "battle_factory_screen.o" - .include "apprentice.o" - - .space 0x8 - - .include "list_menu.o" - .include "party_menu.o" - - .space 0x44 - - .include "ereader_screen.o" - .include "m4a.o" - .include "agb_flash.o" - .include "librfu_stwi.o" - .include "librfu_rfu.o" - .include "librfu_sio32id.o" diff --git a/sym_ewram.txt b/sym_ewram.txt deleted file mode 100644 index 3123b3388a..0000000000 --- a/sym_ewram.txt +++ /dev/null @@ -1,154 +0,0 @@ - .include "gflib/malloc.o" - .include "src/decompress.o" - .include "src/main.o" - .include "gflib/window.o" - .include "gflib/text.o" - .include "gflib/sprite.o" - .include "gflib/string_util.o" - .include "src/link.o" - .include "src/AgbRfu_LinkManager.o" - .include "src/link_rfu_3.o" - .include "src/link_rfu_2.o" - .include "src/union_room.o" - .include "src/mystery_gift_menu.o" - .include "src/union_room_player_avatar.o" - .include "src/wireless_communication_status_screen.o" - .include "src/union_room_battle.o" - .include "src/mystery_gift.o" - .include "src/mystery_gift_view.o" - .include "src/mystery_gift_server.o" - .include "src/mystery_gift_client.o" - .include "src/union_room_chat.o" - .include "src/berry_crush.o" - .include "src/berry_powder.o" - .include "src/dodrio_berry_picking.o" - .include "src/pokemon_jump.o" - .include "src/main_menu.o" - .include "src/battle_controllers.o" - .include "src/digit_obj_util.o" - .include "src/battle_main.o" - .include "src/pokemon.o" - .include "src/random.o" - .include "src/daycare.o" - .include "src/load_save.o" - .include "src/trade.o" - .include "src/berry_blender.o" - .include "src/new_game.o" - .include "src/overworld.o" - .include "src/fieldmap.o" - .include "src/field_camera.o" - .include "src/field_player_avatar.o" - .include "src/event_object_movement.o" - .include "src/field_message_box.o" - .include "src/scrcmd.o" - .include "src/field_control_avatar.o" - .include "src/event_data.o" - .include "src/start_menu.o" - .include "src/tileset_anims.o" - .include "src/palette.o" - .include "src/sound.o" - .include "src/battle_anim.o" - .include "src/battle_anim_mons.o" - - .space 0xC - .include "src/field_weather.o" - .include "src/field_weather_effect.o" - .include "src/battle_setup.o" - .include "src/trainer_see.o" - .include "src/wild_encounter.o" - .include "src/field_effect.o" - .include "src/scanline_effect.o" - .include "src/option_menu.o" - .include "src/pokedex.o" - .include "src/trainer_card.o" - .include "src/frontier_pass.o" - .include "src/pokemon_storage_system.o" - .include "src/script_movement.o" - .include "src/fldeff_cut.o" - .include "src/map_name_popup.o" - .include "src/item.o" - .include "src/contest.o" - .include "src/shop.o" - .include "src/fldeff_escalator.o" - .include "src/script_menu.o" - .include "src/naming_screen.o" - .include "src/money.o" - .include "src/record_mixing.o" - .include "src/secret_base.o" - .include "src/tv.o" - .include "src/contest_util.o" - .include "src/rotating_gate.o" - .include "src/safari_zone.o" - .include "src/item_use.o" - .include "src/battle_anim_effects_1.o" - .include "src/battle_anim_dragon.o" - .include "src/battle_anim_utility_funcs.o" - .include "src/battle_intro.o" - .include "src/easy_chat.o" - .include "src/mon_markings.o" - .include "src/mauville_old_man.o" - .include "src/mail.o" - .include "src/menu_helpers.o" - .include "src/region_map.o" - .include "src/decoration.o" - .include "src/slot_machine.o" - .include "src/battle_ai_main.o" - .include "src/fldeff_misc.o" - .include "src/pokeblock.o" - .include "src/field_specials.o" - .include "src/battle_records.o" - .include "src/pokedex_area_screen.o" - .include "src/evolution_scene.o" - .include "src/roulette.o" - .include "src/pokedex_cry_screen.o" - .include "src/coins.o" - .include "src/battle_transition.o" - .include "src/battle_message.o" - .include "src/cable_car.o" - .include "src/confetti_util.o" - .include "src/save.o" - .include "src/mystery_event_script.o" - .include "src/move_relearner.o" - .include "src/decoration_inventory.o" - .include "src/roamer.o" - .include "src/battle_tower.o" - .include "src/use_pokeblock.o" - .include "src/player_pc.o" - .include "src/intro.o" - .include "src/field_region_map.o" - .include "src/hall_of_fame.o" - .include "src/credits.o" - .include "src/lottery_corner.o" - .include "src/diploma.o" - .include "src/berry_tag_screen.o" - .include "src/mystery_event_menu.o" - .include "src/save_failed_screen.o" - .include "src/braille_puzzles.o" - .include "src/pokeblock_feed.o" - .include "src/intro_credits_graphics.o" - .include "src/recorded_battle.o" - .include "src/trainer_pokemon_sprites.o" - .include "src/lilycove_lady.o" - .include "src/battle_dome.o" - .include "src/match_call.o" - .include "src/menu.o" - .include "src/battle_factory_screen.o" - .include "src/rotating_tile_puzzle.o" - .include "src/item_menu.o" - .include "src/list_menu.o" - .include "src/dynamic_placeholder_text_util.o" - .include "src/item_icon.o" - .include "src/party_menu.o" - .include "src/mirage_tower.o" - .include "src/pokemon_summary_screen.o" - .include "src/pokedex_area_region_map.o" - .include "src/battle_pyramid_bag.o" - .include "src/pokenav.o" - .include "src/pokenav_list.o" - .include "src/menu_specialized.o" - .include "src/faraway_island.o" - .include "src/trainer_hill.o" - .include "src/rayquaza_scene.o" - .include "src/debug.o" - .include "src/battle_controller_player.o" - .include "src/pokedex_plus_hgss.o" diff --git a/test/battle/ability/adaptability.c b/test/battle/ability/adaptability.c new file mode 100644 index 0000000000..4c1c8439b7 --- /dev/null +++ b/test/battle/ability/adaptability.c @@ -0,0 +1,64 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Adaptability increases same-type attack bonus from x1.5 to x2", s16 damage) +{ + u32 ability; + PARAMETRIZE { ability = ABILITY_HYPER_CUTTER; } + PARAMETRIZE { ability = ABILITY_ADAPTABILITY; } + GIVEN { + PLAYER(SPECIES_CRAWDAUNT) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_WATER_GUN); } + } SCENE { + MESSAGE("Crawdaunt used Water Gun!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + // The jump from 1.5x STAB to 2.0x STAB is a 1.33x boost. + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.33), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("(TERA) Terastallizing into a different type with Adaptability gives 2.0x STAB", s16 damage) +{ + bool32 tera; + PARAMETRIZE { tera = GIMMICK_NONE; } + PARAMETRIZE { tera = GIMMICK_TERA; } + GIVEN { + PLAYER(SPECIES_CRAWDAUNT) { Ability(ABILITY_ADAPTABILITY); TeraType(TYPE_NORMAL); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_HEADBUTT, gimmick: tera); } + } SCENE { + MESSAGE("Crawdaunt used Headbutt!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_HEADBUTT, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + // The jump from no STAB to 2.0x STAB is a 2.0x boost. + EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); + } +} + +SINGLE_BATTLE_TEST("(TERA) Terastallizing into the same type with Adaptability gives 2.25x STAB", s16 damage) +{ + bool32 tera; + PARAMETRIZE { tera = GIMMICK_NONE; } + PARAMETRIZE { tera = GIMMICK_TERA; } + GIVEN { + PLAYER(SPECIES_CRAWDAUNT) { Ability(ABILITY_ADAPTABILITY); TeraType(TYPE_WATER); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_WATER_PULSE, gimmick: tera); } + } SCENE { + MESSAGE("Crawdaunt used Water Pulse!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PULSE, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + } FINALLY { + // The jump from 2x STAB to 2.25x STAB is a 1.125x boost. + EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.125), results[1].damage); + } +} + +TO_DO_BATTLE_TEST("Adaptability does not affect Stellar-type moves"); diff --git a/test/battle/ability/aerilate.c b/test/battle/ability/aerilate.c new file mode 100644 index 0000000000..4386034a59 --- /dev/null +++ b/test/battle/ability/aerilate.c @@ -0,0 +1,56 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL); + ASSUME(gMovesInfo[MOVE_TACKLE].power > 0); +} + +SINGLE_BATTLE_TEST("Aerilate turns a Normal-type move into Flying-type move") +{ + GIVEN { + PLAYER(SPECIES_MEGANIUM); + OPPONENT(SPECIES_SALAMENCE) { Item(ITEM_SALAMENCITE); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE, gimmick: GIMMICK_MEGA); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("It's super effective!"); + } +} + +SINGLE_BATTLE_TEST("Aerilate can not turn certain moves into Flying type moves") +{ + u32 move; + PARAMETRIZE { move = MOVE_WEATHER_BALL; } + // PARAMETRIZE { move = MOVE_NATURAL_GIFT; } TODO: handle this case via Skill Swap + PARAMETRIZE { move = MOVE_JUDGMENT; } + PARAMETRIZE { move = MOVE_TECHNO_BLAST; } + PARAMETRIZE { move = MOVE_REVELATION_DANCE; } + PARAMETRIZE { move = MOVE_MULTI_ATTACK; } + PARAMETRIZE { move = MOVE_TERRAIN_PULSE; } + GIVEN { + PLAYER(SPECIES_MEGANIUM); + OPPONENT(SPECIES_SALAMENCE) { Item(ITEM_SALAMENCITE); } + } WHEN { + TURN { MOVE(opponent, move, gimmick: GIMMICK_MEGA); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + NONE_OF { + MESSAGE("It's super effective!"); + } + } +} + +TO_DO_BATTLE_TEST("Aerilate boosts power of affected moves by 20% (Gen7+)"); +TO_DO_BATTLE_TEST("Aerilate boosts power of affected moves by 30% (Gen6)"); + +// Gen 6-7 +TO_DO_BATTLE_TEST("Aerilate overrides Electrify (Gen6-7)"); +TO_DO_BATTLE_TEST("Aerilate overrides Ion Deluge (Gen6-7)"); +// Gen 8+ +//TO_DO_BATTLE_TEST("Aerilate doesn't override Electrify (Gen8+)"); // No mon with Aerilate exists in Gen8+, but probably behaves similar to Pixilate, which does. +//TO_DO_BATTLE_TEST("Aerilate doesn't override Ion Deluge (Gen8+)"); // Ion Deluge doesn't exist in Gen 8+, but we probably could assume it behaves similar to under Electrify. TODO: Test by hacking SV. diff --git a/test/battle/ability/aftermath.c b/test/battle/ability/aftermath.c new file mode 100644 index 0000000000..5cfd5ef034 --- /dev/null +++ b/test/battle/ability/aftermath.c @@ -0,0 +1,22 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Aftermath damages the attacker by 1/4th of its max HP if fainted by a contact move") +{ + s16 aftermathDamage; + + GIVEN { + PLAYER(SPECIES_VOLTORB) { HP(1); Ability(ABILITY_AFTERMATH); }; + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN {MOVE(opponent, MOVE_TACKLE);} + } SCENE { + MESSAGE("Foe Wobbuffet used Tackle!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("Voltorb fainted!"); + ABILITY_POPUP(player, ABILITY_AFTERMATH); + HP_BAR(opponent, captureDamage: &aftermathDamage); + } THEN { + EXPECT_EQ(aftermathDamage, opponent->maxHP / 4); + } +} diff --git a/test/battle/ability/air_lock.c b/test/battle/ability/air_lock.c new file mode 100644 index 0000000000..0201e86a20 --- /dev/null +++ b/test/battle/ability/air_lock.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +// Tests for Air Lock are handled in test/battle/ability/cloud_nine.c diff --git a/test/battle/ability/analytic.c b/test/battle/ability/analytic.c new file mode 100644 index 0000000000..44c42ae2d5 --- /dev/null +++ b/test/battle/ability/analytic.c @@ -0,0 +1,11 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Analytic increases the power of moves by 30% if it's the last one that uses its move"); +TO_DO_BATTLE_TEST("Analytic takes into account modifications to speeed an priority (Gen 5-8)"); //Eg. Paralysis, Power Weight, Stall +TO_DO_BATTLE_TEST("Analytic does not take into account modifications to speeed an priority (Gen 8)"); //Eg. Paralysis, Power Weight, Stall +TO_DO_BATTLE_TEST("Analytic takes into account the turn order of what fainted Pokémon would've moved"); + +// Triple Battles needed to test +//TO_DO_BATTLE_TEST("If the Pokémon with Analytic is targeting a Pokémon in a flank position that chooses to switch with its ally in the middle, its move's power will always be normal when it attacks the Pokémon that is shifted into the flank position"); +//TO_DO_BATTLE_TEST("If the Pokémon with Analytic targets a Pokémon in the middle whose ally on a flank chooses to shift into the middle position, its move's power still depends on whether the Pokémon that was in the middle (and is now on a flank) has acted when the Pokémon with Analytic uses its move"); diff --git a/test/battle/ability/anger_point.c b/test/battle/ability/anger_point.c index 0b13b9df4b..ddfa3c841d 100644 --- a/test/battle/ability/anger_point.c +++ b/test/battle/ability/anger_point.c @@ -3,9 +3,8 @@ SINGLE_BATTLE_TEST("Anger Point raises Attack stage to maximum after receiving a critical hit") { - ASSUME(gMovesInfo[MOVE_FROST_BREATH].alwaysCriticalHit); - GIVEN { + ASSUME(gMovesInfo[MOVE_FROST_BREATH].alwaysCriticalHit); PLAYER(SPECIES_PRIMEAPE) { Ability(ABILITY_ANGER_POINT); } OPPONENT(SPECIES_SNORUNT); } WHEN { @@ -23,10 +22,9 @@ SINGLE_BATTLE_TEST("Anger Point raises Attack stage to maximum after receiving a SINGLE_BATTLE_TEST("Anger Point does not trigger when already at maximum Attack stage") { - ASSUME(gMovesInfo[MOVE_FROST_BREATH].alwaysCriticalHit); - ASSUME(gMovesInfo[MOVE_BELLY_DRUM].effect == EFFECT_BELLY_DRUM); - GIVEN { + ASSUME(gMovesInfo[MOVE_FROST_BREATH].alwaysCriticalHit); + ASSUME(gMovesInfo[MOVE_BELLY_DRUM].effect == EFFECT_BELLY_DRUM); PLAYER(SPECIES_PRIMEAPE) { Ability(ABILITY_ANGER_POINT); Speed(2); } OPPONENT(SPECIES_SNORUNT) { Speed(1); } } WHEN { @@ -37,7 +35,7 @@ SINGLE_BATTLE_TEST("Anger Point does not trigger when already at maximum Attack MESSAGE("Primeape cut its own HP and maximized ATTACK!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FROST_BREATH, opponent); MESSAGE("A critical hit!"); - NONE_OF { + NONE_OF { ABILITY_POPUP(player, ABILITY_ANGER_POINT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Primeape's Anger Point maxed its Attack!"); @@ -47,12 +45,13 @@ SINGLE_BATTLE_TEST("Anger Point does not trigger when already at maximum Attack } } -SINGLE_BATTLE_TEST("Anger Point does not trigger when a substitute takes the hit") -{ - ASSUME(gMovesInfo[MOVE_FROST_BREATH].alwaysCriticalHit); - ASSUME(gMovesInfo[MOVE_SUBSTITUTE].effect == EFFECT_SUBSTITUTE); +TO_DO_BATTLE_TEST("Anger Point triggers when a substitute takes the hit (Gen4)"); +SINGLE_BATTLE_TEST("Anger Point does not trigger when a substitute takes the hit (Gen5+)") +{ GIVEN { + ASSUME(gMovesInfo[MOVE_FROST_BREATH].alwaysCriticalHit); + ASSUME(gMovesInfo[MOVE_SUBSTITUTE].effect == EFFECT_SUBSTITUTE); PLAYER(SPECIES_PRIMEAPE) { Ability(ABILITY_ANGER_POINT); Speed(2); } OPPONENT(SPECIES_SNORUNT) { Speed(1); } } WHEN { @@ -62,7 +61,7 @@ SINGLE_BATTLE_TEST("Anger Point does not trigger when a substitute takes the hit MESSAGE("Primeape made a SUBSTITUTE!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_FROST_BREATH, opponent); MESSAGE("A critical hit!"); - NONE_OF { + NONE_OF { ABILITY_POPUP(player, ABILITY_ANGER_POINT); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Primeape's Anger Point maxed its Attack!"); diff --git a/test/battle/ability/anger_shell.c b/test/battle/ability/anger_shell.c index f0d11d7576..c5b490216b 100644 --- a/test/battle/ability/anger_shell.c +++ b/test/battle/ability/anger_shell.c @@ -1,7 +1,7 @@ #include "global.h" #include "test/battle.h" -SINGLE_BATTLE_TEST("Anger Shell activates only if the target had more than 50% of its hp") +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; diff --git a/test/battle/ability/anticipation.c b/test/battle/ability/anticipation.c new file mode 100644 index 0000000000..a15ff153d9 --- /dev/null +++ b/test/battle/ability/anticipation.c @@ -0,0 +1,24 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Anticipation causes notifies if an opponent has a super-effective move"); +TO_DO_BATTLE_TEST("Anticipation causes notifies if an opponent has a One-hit KO move"); +TO_DO_BATTLE_TEST("Anticipation causes notifies if an opponent has a Self-Destruct or Explosion (Gen4)"); +TO_DO_BATTLE_TEST("Anticipation treats Self-Destruct and Explosion like all other Normal types (Gen5+)"); + +TO_DO_BATTLE_TEST("Anticipation considers Scrappy and Normalize into their effectiveness (Gen4)"); +TO_DO_BATTLE_TEST("Anticipation doesn't consider Scrappy and Normalize into their effectiveness (Gen5+)"); +TO_DO_BATTLE_TEST("Anticipation considers Gravity into their effectiveness (Gen4)"); +TO_DO_BATTLE_TEST("Anticipation doesn't consider Gravity into their effectiveness (Gen5+)"); +TO_DO_BATTLE_TEST("Anticipation doesn't trigger from Counter, Metal Burst or Mirror Coat (Gen4)"); +TO_DO_BATTLE_TEST("Anticipation counts Counter, Metal Burst or Mirror Coat as attacking moves of their types (Gen5+)"); +TO_DO_BATTLE_TEST("Anticipation considers Synchronoise as an ordinary Psychic-type move"); +TO_DO_BATTLE_TEST("Anticipation considers Freeze-Dry as an ordinary Ice-type move"); +TO_DO_BATTLE_TEST("Anticipation considers Flying Press as an ordinary Fighting-type move"); +TO_DO_BATTLE_TEST("Anticipation considers Aura Wheel as an ordinary Electric-type move"); +TO_DO_BATTLE_TEST("Anticipation considers Inverse Battle types"); //Check with Normal-type moves +TO_DO_BATTLE_TEST("Anticipation treats dynamic move types as their base type (Normal)"); // Judgment, Weather Ball, Natural Gift, Techno Blast, Revelation Dance, Multi Attack +TO_DO_BATTLE_TEST("Anticipation treats Hidden Power as Normal Type (Gen4-5)"); +TO_DO_BATTLE_TEST("Anticipation treats Hidden Power as its dynamic type (Gen6+)"); +TO_DO_BATTLE_TEST("Anticipation does not consider Strong Winds on type matchups"); +TO_DO_BATTLE_TEST("Anticipation does not consider ate-abilities"); diff --git a/test/battle/ability/arena_trap.c b/test/battle/ability/arena_trap.c new file mode 100644 index 0000000000..ef0d5b7d8c --- /dev/null +++ b/test/battle/ability/arena_trap.c @@ -0,0 +1,11 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Arena Trap prevents grounded adjacent opponents from switching out"); +TO_DO_BATTLE_TEST("Arena Trap doesn't prevent switch outs if the Pokémon is switched in the same turn the opponent decided to switch out"); +TO_DO_BATTLE_TEST("Arena Trap doesn't prevent switch outs via moves that switch out"); // Baton Pass, U-Turn, Volt Switch, Flip Turn, Parting Shot +TO_DO_BATTLE_TEST("Arena Trap doesn't prevent switch outs via Shed Shell, but not via Teleport"); +TO_DO_BATTLE_TEST("Arena Trap doesn't prevent switch outs via Run Away"); +TO_DO_BATTLE_TEST("Arena Trap doesn't prevent switch outs via Smoke Ball"); +TO_DO_BATTLE_TEST("Arena Trap prevents switch outs from Ghost-type Pokémon (Gen3-5)"); +TO_DO_BATTLE_TEST("Arena Trap doesn't prevent switch outs from Ghost-type Pokémon (Gen6+)"); diff --git a/test/battle/ability/aroma_veil.c b/test/battle/ability/aroma_veil.c new file mode 100644 index 0000000000..dc53fa1492 --- /dev/null +++ b/test/battle/ability/aroma_veil.c @@ -0,0 +1,15 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Taunt"); +TO_DO_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Torment"); +TO_DO_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Encore"); +TO_DO_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Disable"); +TO_DO_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Cursed Body"); +TO_DO_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Heal Block"); +TO_DO_BATTLE_TEST("Aroma Veil protects the Pokémon's side from Infatuation"); +TO_DO_BATTLE_TEST("Aroma Veil does not protect the Pokémon's side from Imprison"); + +// Marked in Bulbapedia as need of research +//TO_DO_BATTLE_TEST("Aroma Veil prevents G-Max Meltdown's effect"); +//TO_DO_BATTLE_TEST("Aroma Veil prevents Psychic Noise's effect"); diff --git a/test/battle/ability/as_one.c b/test/battle/ability/as_one.c new file mode 100644 index 0000000000..0d5367bf37 --- /dev/null +++ b/test/battle/ability/as_one.c @@ -0,0 +1,7 @@ +#include "global.h" +#include "test/battle.h" + +// Tests for the individual ability effects are handled in the following times: +// - Unnerve: test/battle/ability/unnerve.c +// - Chilling Neigh: test/battle/ability/chilling_neigh.c +// - Grim Neigh: test/battle/ability/grim_neigh.c diff --git a/test/battle/ability/ate_abilities.c b/test/battle/ability/ate_abilities.c deleted file mode 100644 index 203452cc01..0000000000 --- a/test/battle/ability/ate_abilities.c +++ /dev/null @@ -1,84 +0,0 @@ -#include "global.h" -#include "test/battle.h" - -ASSUMPTIONS -{ - ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL); - ASSUME(gMovesInfo[MOVE_TACKLE].power > 0); -} - -SINGLE_BATTLE_TEST("Galvanize can not turn certain moves into Electric type moves") -{ - u32 move; - - PARAMETRIZE { move = MOVE_HIDDEN_POWER; } - PARAMETRIZE { move = MOVE_WEATHER_BALL; } - PARAMETRIZE { move = MOVE_MULTI_ATTACK; } - - ASSUME(gMovesInfo[MOVE_HIDDEN_POWER].effect == EFFECT_HIDDEN_POWER); - ASSUME(gMovesInfo[MOVE_WEATHER_BALL].effect == EFFECT_WEATHER_BALL); - ASSUME(gMovesInfo[MOVE_MULTI_ATTACK].effect == EFFECT_CHANGE_TYPE_ON_ITEM); - GIVEN { - PLAYER(SPECIES_KRABBY); - OPPONENT(SPECIES_GEODUDE_ALOLAN) { Ability(ABILITY_GALVANIZE); } - } WHEN { - TURN { MOVE(opponent, move); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, move, opponent); - NOT MESSAGE("It's super effective!"); - } -} - -SINGLE_BATTLE_TEST("Galvanize turns a normal type move into Electric") -{ - GIVEN { - PLAYER(SPECIES_KRABBY); - OPPONENT(SPECIES_GEODUDE_ALOLAN) { Ability(ABILITY_GALVANIZE); } - } WHEN { - TURN { MOVE(opponent, MOVE_TACKLE); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); - MESSAGE("It's super effective!"); - } -} - -SINGLE_BATTLE_TEST("Pixilate turns a normal type move into Fairy") -{ - GIVEN { - PLAYER(SPECIES_DRAGONITE); - OPPONENT(SPECIES_ALTARIA) { Item(ITEM_ALTARIANITE); } - } WHEN { - TURN { MOVE(opponent, MOVE_TACKLE, gimmick: GIMMICK_MEGA); } - } SCENE { - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); - ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); - MESSAGE("It's super effective!"); - } -} - -SINGLE_BATTLE_TEST("Refrigerate turns a normal type move into Ice") -{ - GIVEN { - PLAYER(SPECIES_MEGANIUM); - OPPONENT(SPECIES_AMAURA) { Ability(ABILITY_REFRIGERATE); } - } WHEN { - TURN { MOVE(opponent, MOVE_TACKLE); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); - MESSAGE("It's super effective!"); - } -} - -SINGLE_BATTLE_TEST("Aerilate turns a normal type move into Flying") -{ - GIVEN { - PLAYER(SPECIES_MEGANIUM); - OPPONENT(SPECIES_SALAMENCE) { Item(ITEM_SALAMENCITE); } - } WHEN { - TURN { MOVE(opponent, MOVE_TACKLE, gimmick: GIMMICK_MEGA); } - } SCENE { - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); - ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); - MESSAGE("It's super effective!"); - } -} diff --git a/test/battle/ability/aura_break.c b/test/battle/ability/aura_break.c new file mode 100644 index 0000000000..93b21421e4 --- /dev/null +++ b/test/battle/ability/aura_break.c @@ -0,0 +1,6 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Aura Break inverts Fairy Aura's effect"); +TO_DO_BATTLE_TEST("Aura Break inverts Dark Aura's effect"); +TO_DO_BATTLE_TEST("Aura Break ignores Mold Breaker abilities"); diff --git a/test/battle/ability/chilling_neigh.c b/test/battle/ability/chilling_neigh.c new file mode 100644 index 0000000000..03be77000b --- /dev/null +++ b/test/battle/ability/chilling_neigh.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +// Tests for Chilling Neigh are handled in test/battle/ability/moxie.c diff --git a/test/battle/ability/chlorophyll.c b/test/battle/ability/chlorophyll.c new file mode 100644 index 0000000000..493a197638 --- /dev/null +++ b/test/battle/ability/chlorophyll.c @@ -0,0 +1,6 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Chlorophyll doubles speed if it's sunny"); +TO_DO_BATTLE_TEST("Chlorophyll doesn't double speed if Cloud Nine/Air Lock is on the field"); +TO_DO_BATTLE_TEST("Chlorophyll doesn't double speed if they have an Utility Umbrella"); diff --git a/test/battle/ability/clear_body.c b/test/battle/ability/clear_body.c index 1379506a72..dc82be67b4 100644 --- a/test/battle/ability/clear_body.c +++ b/test/battle/ability/clear_body.c @@ -127,7 +127,7 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent s } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_SUPERPOWER, opponent); NONE_OF { - ABILITY_POPUP(opponent, ability); + ABILITY_POPUP(opponent, ability); MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); MESSAGE("Foe Metang's Clear Body prevents stat loss!"); @@ -186,7 +186,7 @@ SINGLE_BATTLE_TEST("Mold Breaker, Teravolt, and Turboblaze ignore Clear Body and else{ ANIMATION(ANIM_TYPE_MOVE, move, player); NONE_OF { - ABILITY_POPUP(opponent, ability); + ABILITY_POPUP(opponent, ability); MESSAGE("Foe Solgaleo's Full Metal Body prevents stat loss!"); MESSAGE("Foe Torkoal's White Smoke prevents stat loss!"); MESSAGE("Foe Metang's Clear Body prevents stat loss!"); diff --git a/test/battle/ability/cloud_nine.c b/test/battle/ability/cloud_nine.c index dfe5611fc4..887769a5ec 100644 --- a/test/battle/ability/cloud_nine.c +++ b/test/battle/ability/cloud_nine.c @@ -1,16 +1,41 @@ #include "global.h" #include "test/battle.h" -SINGLE_BATTLE_TEST("Cloud Nine prevents weather effects") +SINGLE_BATTLE_TEST("Cloud Nine/Air Lock prevent basic weather effects, but without them disappearing - Sandstorm") { + u32 species = 0, ability = 0; + PARAMETRIZE { species = SPECIES_PSYDUCK; ability = ABILITY_CLOUD_NINE; } + PARAMETRIZE { species = SPECIES_RAYQUAZA; ability = ABILITY_AIR_LOCK; } GIVEN { ASSUME(gMovesInfo[MOVE_SANDSTORM].effect == EFFECT_SANDSTORM); - PLAYER(SPECIES_PSYDUCK) { Ability(ABILITY_CLOUD_NINE); } + PLAYER(species) { Ability(ability); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { TURN { MOVE(opponent, MOVE_SANDSTORM); } TURN {} } SCENE { - NONE_OF { HP_BAR(player); } + ABILITY_POPUP(player, ability); + MESSAGE("The effects of weather disappeared."); + MESSAGE("Foe Wobbuffet used Sandstorm!"); + MESSAGE("The sandstorm rages."); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SANDSTORM_CONTINUES); + NONE_OF { + HP_BAR(player); + HP_BAR(opponent); + MESSAGE("Foe Wobbuffet is buffeted by the sandstorm!"); + } + MESSAGE("The sandstorm rages."); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SANDSTORM_CONTINUES); } } + +TO_DO_BATTLE_TEST("Cloud Nine/Air Lock prevent basic weather effects, but without them disappearing - Sun"); +TO_DO_BATTLE_TEST("Cloud Nine/Air Lock prevent basic weather effects, but without them disappearing - Rain"); +TO_DO_BATTLE_TEST("Cloud Nine/Air Lock prevent basic weather effects, but without them disappearing - Hail"); +TO_DO_BATTLE_TEST("Cloud Nine/Air Lock prevent basic weather effects, but without them disappearing - Snow"); +TO_DO_BATTLE_TEST("Cloud Nine/Air Lock prevent basic weather effects, but without them disappearing - Fog"); +TO_DO_BATTLE_TEST("Cloud Nine/Air Lock prevent basic weather effects, but without them disappearing - Primal Sun"); +TO_DO_BATTLE_TEST("Cloud Nine/Air Lock prevent basic weather effects, but without them disappearing - Primal Rain"); +TO_DO_BATTLE_TEST("Cloud Nine/Air Lock prevent basic weather effects, but without them disappearing - Strong Winds"); + +// Moves and abilities that are affected by weather should have new tests that check for Clould Nine/Air Lock, like Mold-Breaker Abilities diff --git a/test/battle/ability/damp.c b/test/battle/ability/damp.c index 9a3b795f2a..b567293aa0 100644 --- a/test/battle/ability/damp.c +++ b/test/battle/ability/damp.c @@ -57,7 +57,7 @@ SINGLE_BATTLE_TEST("Damp prevents explosion-like moves from self") } } -SINGLE_BATTLE_TEST("Damp prevents damage from aftermath") +SINGLE_BATTLE_TEST("Damp prevents damage from Aftermath") { GIVEN { ASSUME(gMovesInfo[MOVE_TACKLE].makesContact); diff --git a/test/battle/ability/dancer.c b/test/battle/ability/dancer.c index f54f7ab76a..660a719c69 100644 --- a/test/battle/ability/dancer.c +++ b/test/battle/ability/dancer.c @@ -126,3 +126,22 @@ DOUBLE_BATTLE_TEST("Dancer still triggers if another dancer flinches") ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); } } + +SINGLE_BATTLE_TEST("Dancer-called attacks have their type updated") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_REVELATION_DANCE].danceMove == TRUE); + ASSUME(gMovesInfo[MOVE_REVELATION_DANCE].effect == EFFECT_REVELATION_DANCE); + PLAYER(SPECIES_TANGROWTH); + OPPONENT(SPECIES_ORICORIO_BAILE); + } WHEN { + TURN { MOVE(player, MOVE_REVELATION_DANCE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, player); + MESSAGE("It's not very effective…"); + ABILITY_POPUP(opponent, ABILITY_DANCER); + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, opponent); + NOT MESSAGE("It's not very effective…"); + MESSAGE("It's super effective!"); + } +} diff --git a/test/battle/ability/defiant.c b/test/battle/ability/defiant.c index 84b65bdc50..79136a559d 100644 --- a/test/battle/ability/defiant.c +++ b/test/battle/ability/defiant.c @@ -139,6 +139,65 @@ SINGLE_BATTLE_TEST("Defiant activates after Sticky Web lowers Speed") } } +SINGLE_BATTLE_TEST("Defiant doesn't activate after Sticky Web lowers Speed if Court Changed") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_MANKEY) { Ability(ABILITY_DEFIANT); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STICKY_WEB); MOVE(opponent, MOVE_COURT_CHANGE); } + TURN { SWITCH(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_COURT_CHANGE, opponent); + // Switch-in - Sticky Web activates + SEND_IN_MESSAGE("Mankey"); + MESSAGE("Mankey was caught in a Sticky Web!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Mankey's Speed fell!"); + // Defiant doesn't activate + NONE_OF { + ABILITY_POPUP(player, ABILITY_DEFIANT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Mankey's Attack sharply rose!"); + } + } +} + +SINGLE_BATTLE_TEST("Defiant correctly activates after Sticky Web lowers Speed if Court Changed") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_MANKEY) { Ability(ABILITY_DEFIANT); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STICKY_WEB); MOVE(opponent, MOVE_COURT_CHANGE); } + TURN { SWITCH(player, 1); } + TURN { MOVE(opponent, MOVE_GROWL);} + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_COURT_CHANGE, opponent); + // Switch-in - Sticky Web activates + SEND_IN_MESSAGE("Mankey"); + MESSAGE("Mankey was caught in a Sticky Web!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Mankey's Speed fell!"); + // Defiant doesn't activate + NONE_OF { + ABILITY_POPUP(player, ABILITY_DEFIANT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Mankey's Attack sharply rose!"); + } + // Defiant triggers correctly after Sticky Web + ANIMATION(ANIM_TYPE_MOVE, MOVE_GROWL, opponent); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Mankey's Attack fell!"); + ABILITY_POPUP(player, ABILITY_DEFIANT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Mankey's Attack sharply rose!"); + } +} DOUBLE_BATTLE_TEST("Defiant is activated by Cotton Down for non-ally pokemon") { diff --git a/test/battle/ability/disguise.c b/test/battle/ability/disguise.c index c4f79d8fe3..5ab2035325 100644 --- a/test/battle/ability/disguise.c +++ b/test/battle/ability/disguise.c @@ -134,3 +134,42 @@ SINGLE_BATTLE_TEST("Disguised Mimikyu is ignored by Mold Breaker") NOT ABILITY_POPUP(player, ABILITY_DISGUISE); } } + +SINGLE_BATTLE_TEST("Disguised Mimikyu's types revert back to Ghost/Fairy when Disguise is broken") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SHADOW_CLAW].type == TYPE_GHOST); + PLAYER(SPECIES_MIMIKYU_DISGUISED) { Ability(ABILITY_DISGUISE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SOAK); } + TURN { MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(opponent, MOVE_SHADOW_CLAW); } + } SCENE { + MESSAGE("Foe Wobbuffet used Soak!"); + MESSAGE("Mimikyu transformed into the Water type!"); + MESSAGE("Foe Wobbuffet used Tackle!"); + ABILITY_POPUP(player, ABILITY_DISGUISE); + MESSAGE("Foe Wobbuffet used Shadow Claw!"); + MESSAGE("It's super effective!"); + } +} + +SINGLE_BATTLE_TEST("Disguised Mimikyu blocks a move after getting Gastro Acid Batton Passed") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_BATON_PASS].effect == EFFECT_BATON_PASS); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_MIMIKYU_DISGUISED) { Ability(ABILITY_DISGUISE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_GASTRO_ACID); MOVE(player, MOVE_BATON_PASS); SEND_OUT(player, 1); } + TURN { MOVE(opponent, MOVE_SHADOW_CLAW); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_GASTRO_ACID, opponent); + MESSAGE("Wobbuffet's ability was suppressed!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SHADOW_CLAW, opponent); + ABILITY_POPUP(player, ABILITY_DISGUISE); + } +} diff --git a/test/battle/ability/drought.c b/test/battle/ability/drought.c new file mode 100644 index 0000000000..bbe4dbe853 --- /dev/null +++ b/test/battle/ability/drought.c @@ -0,0 +1,5 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Drought sets up sun for 5 turns (Gen6+)"); +TO_DO_BATTLE_TEST("Drought sets up permanent sun (Gen3-5)"); diff --git a/test/battle/ability/dry_skin.c b/test/battle/ability/dry_skin.c index 368e4b8047..5709a58a94 100644 --- a/test/battle/ability/dry_skin.c +++ b/test/battle/ability/dry_skin.c @@ -15,6 +15,8 @@ SINGLE_BATTLE_TEST("Dry Skin causes 1/8th Max HP damage in Sun") } } +TO_DO_BATTLE_TEST("Dry Skin doesn't get damaged in Sun if Cloud Nine/Air Lock is on the field"); + SINGLE_BATTLE_TEST("Dry Skin heals 1/8th Max HP in Rain") { GIVEN { @@ -29,6 +31,8 @@ SINGLE_BATTLE_TEST("Dry Skin heals 1/8th Max HP in Rain") } } +TO_DO_BATTLE_TEST("Dry Skin doesn't heal in Rain if Cloud Nine/Air Lock is on the field"); + SINGLE_BATTLE_TEST("Dry Skin increases damage taken from Fire-type moves by 25%", s16 damage) { u32 ability; diff --git a/test/battle/ability/flower_gift.c b/test/battle/ability/flower_gift.c index 69a76b8e81..68712641e0 100644 --- a/test/battle/ability/flower_gift.c +++ b/test/battle/ability/flower_gift.c @@ -17,6 +17,8 @@ SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim in harsh sunlight") } } +TO_DO_BATTLE_TEST("Flower Gift doesn't transform Cherrim if Cloud Nine/Air Lock is on the field"); + SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim back to normal when weather changes") { GIVEN { @@ -61,6 +63,8 @@ SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim back to normal when its abili } } +TO_DO_BATTLE_TEST("Forecast transforms Castform back to normal under Cloud Nine/Air Lock"); + DOUBLE_BATTLE_TEST("Flower Gift increases the attack of Cherrim and its allies by 1.5x", s16 damageL, s16 damageR) { bool32 sunny; diff --git a/test/battle/ability/forecast.c b/test/battle/ability/forecast.c index 427a8e6807..24a0eed957 100644 --- a/test/battle/ability/forecast.c +++ b/test/battle/ability/forecast.c @@ -264,12 +264,15 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform back to normal when Sandstorm i } } -SINGLE_BATTLE_TEST("Forecast transforms Castform back to normal under Air Lock") +SINGLE_BATTLE_TEST("Forecast transforms Castform back to normal under Cloud Nine/Air Lock") { + u32 species = 0, ability = 0; + PARAMETRIZE { species = SPECIES_PSYDUCK; ability = ABILITY_CLOUD_NINE; } + PARAMETRIZE { species = SPECIES_RAYQUAZA; ability = ABILITY_AIR_LOCK; } GIVEN { PLAYER(SPECIES_CASTFORM_NORMAL) { Ability(ABILITY_FORECAST); } OPPONENT(SPECIES_WOBBUFFET); - OPPONENT(SPECIES_RAYQUAZA); + OPPONENT(species) { Ability(ability); } } WHEN { TURN { MOVE(player, MOVE_RAIN_DANCE); } TURN { SWITCH(opponent, 1); } @@ -279,7 +282,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!"); // back to normal - ABILITY_POPUP(opponent, ABILITY_AIR_LOCK); + ABILITY_POPUP(opponent, ability); ABILITY_POPUP(player, ABILITY_FORECAST); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player); MESSAGE("Castform transformed!"); @@ -394,3 +397,25 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform back when it uses a move that f EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_CASTFORM); } } + +SINGLE_BATTLE_TEST("Forecast transforms Castform when Cloud Nine ability user leaves the field") +{ + u32 species = 0, ability = 0; + PARAMETRIZE { species = SPECIES_PSYDUCK; ability = ABILITY_CLOUD_NINE; } + PARAMETRIZE { species = SPECIES_RAYQUAZA; ability = ABILITY_AIR_LOCK; } + + GIVEN { + PLAYER(SPECIES_CASTFORM) { Ability(ABILITY_FORECAST); } + OPPONENT(species) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SUNNY_DAY); MOVE(opponent, MOVE_CELEBRATE); } + TURN { SWITCH(opponent, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNNY_DAY, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + MESSAGE("2 sent out Wobbuffet!"); + ABILITY_POPUP(player, ABILITY_FORECAST); + MESSAGE("Castform transformed!"); + } +} diff --git a/test/battle/ability/galvanize.c b/test/battle/ability/galvanize.c new file mode 100644 index 0000000000..7f604f3dac --- /dev/null +++ b/test/battle/ability/galvanize.c @@ -0,0 +1,48 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL); + ASSUME(gMovesInfo[MOVE_TACKLE].power > 0); +} + +SINGLE_BATTLE_TEST("Galvanize turns a normal type move into Electric") +{ + GIVEN { + PLAYER(SPECIES_KRABBY); + OPPONENT(SPECIES_GEODUDE_ALOLAN) { Ability(ABILITY_GALVANIZE); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("It's super effective!"); + } +} + +SINGLE_BATTLE_TEST("Galvanize can not turn certain moves into Electric type moves") +{ + u32 move; + + PARAMETRIZE { move = MOVE_HIDDEN_POWER; } + PARAMETRIZE { move = MOVE_WEATHER_BALL; } + PARAMETRIZE { move = MOVE_MULTI_ATTACK; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_HIDDEN_POWER].effect == EFFECT_HIDDEN_POWER); + ASSUME(gMovesInfo[MOVE_WEATHER_BALL].effect == EFFECT_WEATHER_BALL); + ASSUME(gMovesInfo[MOVE_MULTI_ATTACK].effect == EFFECT_CHANGE_TYPE_ON_ITEM); + PLAYER(SPECIES_KRABBY); + OPPONENT(SPECIES_GEODUDE_ALOLAN) { Ability(ABILITY_GALVANIZE); } + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + NOT MESSAGE("It's super effective!"); + } +} + +TO_DO_BATTLE_TEST("Galvanize boosts power of affected moves by 20% (Gen7+)"); +TO_DO_BATTLE_TEST("Galvanize boosts power of affected moves by 30% (Gen6)"); +TO_DO_BATTLE_TEST("(DYNAMAX) Galvanize turns Max Strike into Max Lightning when not used by Gigantamax Pikachu/Toxtricity"); +//TO_DO_BATTLE_TEST("(DYNAMAX) Galvanize doesn't turn Max Strike into Max Lightning when used by Gigantamax Pikachu/Toxtricity, instead becoming G-Max Volt Crash/Stun Shock"); // Marked in Bulbapedia as "needs research", so this assumes that it behaves like Pixilate. diff --git a/test/battle/ability/grim_neigh.c b/test/battle/ability/grim_neigh.c new file mode 100644 index 0000000000..b4d82487d8 --- /dev/null +++ b/test/battle/ability/grim_neigh.c @@ -0,0 +1,109 @@ +#include "global.h" +#include "test/battle.h" + +DOUBLE_BATTLE_TEST("Grim Neigh raises Sp. Attack by one stage after directly causing a Pokemon to faint") +{ + u32 species = 0, ability = 0, abilityPopUp = 0; + PARAMETRIZE { species = SPECIES_SPECTRIER; ability = ABILITY_GRIM_NEIGH; abilityPopUp = ABILITY_GRIM_NEIGH; } + PARAMETRIZE { species = SPECIES_CALYREX_SHADOW_RIDER; ability = ABILITY_AS_ONE_SHADOW_RIDER; abilityPopUp = ABILITY_GRIM_NEIGH; } + GIVEN { + ASSUME(gMovesInfo[MOVE_DISCHARGE].target == MOVE_TARGET_FOES_AND_ALLY); + PLAYER(species) { Ability(ability); } + PLAYER(SPECIES_SNORUNT) { HP(1); } + OPPONENT(SPECIES_GLALIE) { HP(1); } + OPPONENT(SPECIES_ABRA) { HP(1); } + OPPONENT(SPECIES_ABRA); + } WHEN { + TURN { MOVE(playerLeft, MOVE_DISCHARGE); SEND_OUT(opponentLeft, 2); } + } SCENE { + int i; + + ANIMATION(ANIM_TYPE_MOVE, MOVE_DISCHARGE, playerLeft); + for (i = 0; i < 3; i++) { + ONE_OF { + MESSAGE("Snorunt fainted!"); + MESSAGE("Foe Glalie fainted!"); + MESSAGE("Foe Abra fainted!"); + } + ABILITY_POPUP(playerLeft, abilityPopUp); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + if (species == SPECIES_SPECTRIER) + MESSAGE("Spectrier's Grim Neigh raised its Sp. Atk!"); + else + MESSAGE("Calyrex's Grim Neigh raised its Sp. Atk!"); + } + } THEN { + EXPECT_EQ(playerLeft->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 3); + } +} + +DOUBLE_BATTLE_TEST("Grim Neigh does not trigger if Pokemon faint to indirect damage or damage from other Pokemon") +{ + u32 species = 0, ability = 0, abilityPopUp = 0; + PARAMETRIZE { species = SPECIES_SPECTRIER; ability = ABILITY_GRIM_NEIGH; abilityPopUp = ABILITY_GRIM_NEIGH; } + PARAMETRIZE { species = SPECIES_CALYREX_SHADOW_RIDER; ability = ABILITY_AS_ONE_SHADOW_RIDER; abilityPopUp = ABILITY_GRIM_NEIGH; } + GIVEN { + PLAYER(species) { Ability(ability); } + PLAYER(SPECIES_SNORUNT) { HP(1); Status1(STATUS1_POISON); } + OPPONENT(SPECIES_GLALIE) { HP(1); Status1(STATUS1_BURN); } + OPPONENT(SPECIES_ABRA) { HP(1); } + OPPONENT(SPECIES_ABRA); + } WHEN { + TURN { MOVE(playerRight, MOVE_QUICK_ATTACK, target: opponentRight); SEND_OUT(opponentLeft, 2); } + } SCENE { + int i; + + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, playerRight); + for (i = 0; i < 3; i++) { + ONE_OF { + MESSAGE("Snorunt fainted!"); + MESSAGE("Foe Glalie fainted!"); + MESSAGE("Foe Abra fainted!"); + } + NONE_OF { + ABILITY_POPUP(playerLeft, abilityPopUp); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Salamence's Moxie raised its Sp. Atk!"); + MESSAGE("Spectrier's Grim Neigh raised its Sp. Atk!"); + MESSAGE("Calyrex's Grim Neigh raised its Sp. Atk!"); + } + } + } THEN { + EXPECT_EQ(playerLeft->statStages[STAT_SPATK], DEFAULT_STAT_STAGE); + } +} + +DOUBLE_BATTLE_TEST("Grim Neigh does not increase damage done by the same move that causes another Pokemon to faint") +{ + s16 damage[2]; + u32 species = 0, ability = 0, abilityPopUp = 0; + PARAMETRIZE { species = SPECIES_SPECTRIER; ability = ABILITY_GRIM_NEIGH; abilityPopUp = ABILITY_GRIM_NEIGH; } + PARAMETRIZE { species = SPECIES_CALYREX_SHADOW_RIDER; ability = ABILITY_AS_ONE_SHADOW_RIDER; abilityPopUp = ABILITY_GRIM_NEIGH; } + + KNOWN_FAILING; // Requires simultaneous damage implementation + GIVEN { + ASSUME(gMovesInfo[MOVE_DISCHARGE].target == MOVE_TARGET_FOES_AND_ALLY); + PLAYER(species) { Ability(ability); } + PLAYER(SPECIES_ABRA) { HP(1); } + OPPONENT(SPECIES_GLALIE); + OPPONENT(SPECIES_GLALIE); + OPPONENT(SPECIES_ABRA); + } WHEN { + TURN { MOVE(playerLeft, MOVE_DISCHARGE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DISCHARGE, playerLeft); + HP_BAR(opponentLeft, captureDamage: &damage[0]); + HP_BAR(playerRight); + MESSAGE("Abra fainted!"); + ABILITY_POPUP(playerLeft, abilityPopUp); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + if (species == SPECIES_SPECTRIER) + MESSAGE("Spectrier's Grim Neigh raised its Sp. Atk!"); + else + MESSAGE("Calyrex's Grim Neigh raised its Sp. Atk!"); + HP_BAR(opponentRight, captureDamage: &damage[1]); + } THEN { + EXPECT_EQ(playerLeft->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1); + EXPECT_EQ(damage[0], damage[1]); + } +} diff --git a/test/battle/ability/gulp_missile.c b/test/battle/ability/gulp_missile.c index 2ec9acc61b..7ccf1063b5 100644 --- a/test/battle/ability/gulp_missile.c +++ b/test/battle/ability/gulp_missile.c @@ -116,7 +116,7 @@ SINGLE_BATTLE_TEST("(Gulp Missile) Cramorant in Gorging paralyzes the target if } SINGLE_BATTLE_TEST("(Gulp Missile) triggers even if the user is fainted by opposing mon") -{ +{ GIVEN { PLAYER(SPECIES_CRAMORANT) { HP(1); MaxHP(250); Ability(ABILITY_GULP_MISSILE); } PLAYER(SPECIES_WOBBUFFET); diff --git a/test/battle/ability/harvest.c b/test/battle/ability/harvest.c index 9fb969b036..03e13b394e 100644 --- a/test/battle/ability/harvest.c +++ b/test/battle/ability/harvest.c @@ -1,17 +1,264 @@ #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"); +ASSUMPTIONS +{ + ASSUME(gItemsInfo[ITEM_SITRUS_BERRY].holdEffect == HOLD_EFFECT_RESTORE_PCT_HP); + ASSUME(I_SITRUS_BERRY_HEAL >= GEN_4); + ASSUME(gMovesInfo[MOVE_SUNNY_DAY].effect == EFFECT_SUNNY_DAY); +} + +SINGLE_BATTLE_TEST("Harvest has a 50% chance to restore a Berry at the end of the turn") +{ + PASSES_RANDOMLY(1, 2, RNG_HARVEST); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_EXEGGUTOR) { Ability(ABILITY_HARVEST); MaxHP(500); HP(251); Item(ITEM_SITRUS_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ABILITY_POPUP(opponent, ABILITY_HARVEST); + } THEN { + EXPECT_EQ(opponent->item, ITEM_SITRUS_BERRY); + } +} + +SINGLE_BATTLE_TEST("Harvest always restores a Berry in Sunlight") +{ + PASSES_RANDOMLY(1, 1, RNG_HARVEST); + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_EXEGGUTOR) { Ability(ABILITY_HARVEST); MaxHP(500); HP(251); Item(ITEM_SITRUS_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_SUNNY_DAY); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNNY_DAY, opponent); + ABILITY_POPUP(opponent, ABILITY_HARVEST); + } THEN { + EXPECT_EQ(opponent->item, ITEM_SITRUS_BERRY); + } +} + +SINGLE_BATTLE_TEST("Harvest doesn't always restore a Berry if Cloud Nine/Air Lock is on the field") +{ + PASSES_RANDOMLY(1, 2, RNG_HARVEST); + GIVEN { + PLAYER(SPECIES_GOLDUCK) { Ability(ABILITY_CLOUD_NINE); } + OPPONENT(SPECIES_EXEGGUTOR) { Ability(ABILITY_HARVEST); MaxHP(500); HP(251); Item(ITEM_SITRUS_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_SUNNY_DAY); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNNY_DAY, opponent); + NOT ABILITY_POPUP(opponent, ABILITY_HARVEST); + } THEN { + EXPECT_EQ(opponent->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Harvest restores a Berry even after being switched out and back in") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_PARTING_SHOT].effect == EFFECT_PARTING_SHOT); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_EXEGGUTOR) { Ability(ABILITY_HARVEST); MaxHP(500); HP(251); Item(ITEM_SITRUS_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_PARTING_SHOT); SEND_OUT(opponent, 1); } + TURN { MOVE(player, MOVE_SUNNY_DAY); MOVE(opponent, MOVE_PARTING_SHOT); SEND_OUT(opponent, 0); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNNY_DAY, player); + ABILITY_POPUP(opponent, ABILITY_HARVEST); + } THEN { + EXPECT_EQ(opponent->item, ITEM_SITRUS_BERRY); + } +} + +SINGLE_BATTLE_TEST("Harvest restores a Berry consumed by Fling") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_FLING].effect == EFFECT_FLING); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_EXEGGUTOR) { Ability(ABILITY_HARVEST); Item(ITEM_SITRUS_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_SUNNY_DAY); MOVE(opponent, MOVE_FLING); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNNY_DAY, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FLING, opponent); + ABILITY_POPUP(opponent, ABILITY_HARVEST); + } THEN { + EXPECT_EQ(opponent->item, ITEM_SITRUS_BERRY); + } +} + +SINGLE_BATTLE_TEST("Harvest restores a Berry consumed by Natural Gift") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_NATURAL_GIFT].effect == EFFECT_NATURAL_GIFT); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_EXEGGUTOR) { Ability(ABILITY_HARVEST); Item(ITEM_SITRUS_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_SUNNY_DAY); MOVE(opponent, MOVE_NATURAL_GIFT); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNNY_DAY, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_NATURAL_GIFT, opponent); + ABILITY_POPUP(opponent, ABILITY_HARVEST); + } THEN { + EXPECT_EQ(opponent->item, ITEM_SITRUS_BERRY); + } +} + 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"); + +SINGLE_BATTLE_TEST("Harvest doesn't restore a Berry when destroyed by Incinerate") +{ + PASSES_RANDOMLY(1, 1, RNG_HARVEST); + GIVEN { + ASSUME(MoveHasAdditionalEffect(MOVE_INCINERATE, MOVE_EFFECT_INCINERATE)); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_EXEGGUTOR) { Ability(ABILITY_HARVEST); Item(ITEM_SITRUS_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_INCINERATE); MOVE(opponent, MOVE_SUNNY_DAY); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_INCINERATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNNY_DAY, opponent); + NOT ABILITY_POPUP(opponent, ABILITY_HARVEST); + } THEN { + EXPECT_EQ(opponent->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Harvest doesn't restore a Berry when knocked off by Knock Off") +{ + PASSES_RANDOMLY(1, 1, RNG_HARVEST); + GIVEN { + ASSUME(MoveHasAdditionalEffect(MOVE_KNOCK_OFF, MOVE_EFFECT_KNOCK_OFF)); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_EXEGGUTOR) { Ability(ABILITY_HARVEST); Item(ITEM_SITRUS_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_KNOCK_OFF); MOVE(opponent, MOVE_SUNNY_DAY); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNNY_DAY, opponent); + NOT ABILITY_POPUP(opponent, ABILITY_HARVEST); + } THEN { + EXPECT_EQ(opponent->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Harvest doesn't restore a Berry when eaten by Bug Bite/Pluck") +{ + PASSES_RANDOMLY(1, 1, RNG_HARVEST); + GIVEN { + ASSUME(MoveHasAdditionalEffect(MOVE_BUG_BITE, MOVE_EFFECT_BUG_BITE)); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_EXEGGUTOR) { Ability(ABILITY_HARVEST); Item(ITEM_SITRUS_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_BUG_BITE); MOVE(opponent, MOVE_SUNNY_DAY); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BUG_BITE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNNY_DAY, opponent); + NOT ABILITY_POPUP(opponent, ABILITY_HARVEST); + } THEN { + EXPECT_EQ(opponent->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Harvest doesn't restore a Berry that's collected via Pickup") +{ + GIVEN { + PLAYER(SPECIES_ZIGZAGOON) { Speed(50); Ability(ABILITY_PICKUP); } + OPPONENT(SPECIES_EXEGGUTOR) { Speed(10); Ability(ABILITY_HARVEST); MaxHP(500); HP(251); Item(ITEM_SITRUS_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_SUNNY_DAY); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNNY_DAY, opponent); + ABILITY_POPUP(player, ABILITY_PICKUP); + MESSAGE("Zigzagoon found one Sitrus Berry!"); + NOT ABILITY_POPUP(opponent, ABILITY_HARVEST); + } THEN { + EXPECT_EQ(player->item, ITEM_SITRUS_BERRY); + EXPECT_EQ(opponent->item, ITEM_NONE); + } +} + +DOUBLE_BATTLE_TEST("Harvest order is affected by speed") +{ + GIVEN { + PLAYER(SPECIES_EXEGGUTOR) { Speed(2); Ability(ABILITY_HARVEST); MaxHP(500); HP(251); Item(ITEM_SITRUS_BERRY); } + PLAYER(SPECIES_WOBBUFFET) { Speed(5); } + OPPONENT(SPECIES_EXEGGUTOR) { Speed(10); Ability(ABILITY_HARVEST); MaxHP(500); HP(251); Item(ITEM_SITRUS_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(50); } + } WHEN { + TURN { MOVE(playerRight, MOVE_BULLDOZE); MOVE(playerLeft, MOVE_SUNNY_DAY); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLDOZE, playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNNY_DAY, playerLeft); + ABILITY_POPUP(opponentLeft, ABILITY_HARVEST); + ABILITY_POPUP(playerLeft, ABILITY_HARVEST); + } THEN { + EXPECT_EQ(opponentLeft->item, ITEM_SITRUS_BERRY); + EXPECT_EQ(playerLeft->item, ITEM_SITRUS_BERRY); + } +} + +SINGLE_BATTLE_TEST("Harvest doesn't restore a Berry when transfered to another Pokémon") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_TRICK].effect == EFFECT_TRICK); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_EXEGGUTOR) { Ability(ABILITY_HARVEST); Item(ITEM_SITRUS_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_SUNNY_DAY); MOVE(opponent, MOVE_TRICK); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNNY_DAY, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRICK, opponent); + NOT ABILITY_POPUP(opponent, ABILITY_HARVEST); + } THEN { + EXPECT_EQ(opponent->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Harvest can restore a Berry that was transferred from another Pokémon") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_TRICK].effect == EFFECT_TRICK); + PLAYER(SPECIES_TORKOAL) { Ability(ABILITY_DROUGHT); Item(ITEM_SITRUS_BERRY); } + OPPONENT(SPECIES_EXEGGUTOR) { Ability(ABILITY_HARVEST); HP(100); MaxHP(500); } + } WHEN { + TURN { MOVE(opponent, MOVE_TRICK); MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRICK, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + ABILITY_POPUP(opponent, ABILITY_HARVEST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + } THEN { + EXPECT_GT(opponent->hp, opponent->maxHP / 2); // eats 2 Sitrus + } +} + +SINGLE_BATTLE_TEST("Harvest can only restore the newest berry consumed that was transferred from another Pokémon instead of its original Berry") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_TRICK].effect == EFFECT_TRICK); + ASSUME(gItemsInfo[ITEM_APICOT_BERRY].holdEffect == HOLD_EFFECT_SP_DEFENSE_UP); + PLAYER(SPECIES_TORKOAL) { Ability(ABILITY_DROUGHT); Item(ITEM_SITRUS_BERRY); } + OPPONENT(SPECIES_EXEGGUTOR) { Ability(ABILITY_HARVEST); HP(100); MaxHP(500); Item(ITEM_APICOT_BERRY); } + } WHEN { + TURN { MOVE(opponent, MOVE_TRICK); MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRICK, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + ABILITY_POPUP(opponent, ABILITY_HARVEST); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + } THEN { + EXPECT_GT(opponent->hp, opponent->maxHP / 2); // eats 2 Sitrus + } +} diff --git a/test/battle/ability/hydration.c b/test/battle/ability/hydration.c index 2dca490c02..7d16ad04ae 100644 --- a/test/battle/ability/hydration.c +++ b/test/battle/ability/hydration.c @@ -14,3 +14,5 @@ SINGLE_BATTLE_TEST("Hydration cures non-volatile Status conditions if it is rain STATUS_ICON(player, none: TRUE); } } + +TO_DO_BATTLE_TEST("Hydration doesn't cure status conditions if Cloud Nine/Air Lock is on the field"); diff --git a/test/battle/ability/ice_body.c b/test/battle/ability/ice_body.c index 1aa7c80a4d..3f278a50cd 100644 --- a/test/battle/ability/ice_body.c +++ b/test/battle/ability/ice_body.c @@ -1,13 +1,21 @@ #include "global.h" #include "test/battle.h" +ASSUMPTIONS { + ASSUME(gMovesInfo[MOVE_HAIL].effect == EFFECT_HAIL); + ASSUME(gMovesInfo[MOVE_SNOWSCAPE].effect == EFFECT_SNOWSCAPE); +} + SINGLE_BATTLE_TEST("Ice Body prevents damage from hail") { + u32 move; + PARAMETRIZE { move = MOVE_HAIL; } + PARAMETRIZE { move = MOVE_SNOWSCAPE; } GIVEN { PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_GLALIE) { Ability(ABILITY_ICE_BODY); } } WHEN { - TURN { MOVE(player, MOVE_HAIL); MOVE(opponent, MOVE_SKILL_SWAP); } + TURN { MOVE(player, move); MOVE(opponent, MOVE_SKILL_SWAP); } } SCENE { NONE_OF { HP_BAR(player); } } @@ -15,14 +23,32 @@ SINGLE_BATTLE_TEST("Ice Body prevents damage from hail") SINGLE_BATTLE_TEST("Ice Body recovers 1/16th of Max HP in hail.") { + u32 move; + PARAMETRIZE { move = MOVE_HAIL; } + PARAMETRIZE { move = MOVE_SNOWSCAPE; } GIVEN { PLAYER(SPECIES_GLALIE) { Ability(ABILITY_ICE_BODY); HP(1); MaxHP(100); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(opponent, MOVE_HAIL); } + TURN { MOVE(opponent, move); } } SCENE { ABILITY_POPUP(player, ABILITY_ICE_BODY); HP_BAR(player, damage: -(100 / 16)); MESSAGE("Glalie's Ice Body healed it a little bit!"); } } + +SINGLE_BATTLE_TEST("Ice Body doesn't recover HP if Cloud Nine/Air Lock is on the field") +{ + u32 move; + PARAMETRIZE { move = MOVE_HAIL; } + PARAMETRIZE { move = MOVE_SNOWSCAPE; } + GIVEN { + PLAYER(SPECIES_GLALIE) { Ability(ABILITY_ICE_BODY); HP(1); MaxHP(100); } + OPPONENT(SPECIES_GOLDUCK) { Ability(ABILITY_CLOUD_NINE); } + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + NOT ABILITY_POPUP(player, ABILITY_ICE_BODY); + } +} diff --git a/test/battle/ability/ice_face.c b/test/battle/ability/ice_face.c new file mode 100644 index 0000000000..54a307754c --- /dev/null +++ b/test/battle/ability/ice_face.c @@ -0,0 +1,137 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Ice Face blocks physical moves, changing Eiscue into its Noice Face form") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); + PLAYER(SPECIES_EISCUE); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_ICE_FACE); + MESSAGE("Eiscue transformed!"); + } +} + +SINGLE_BATTLE_TEST("Ice Face does not block special moves, Eiscue stays in Ice Face form") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); + ASSUME(gMovesInfo[MOVE_EMBER].category == DAMAGE_CATEGORY_SPECIAL); + PLAYER(SPECIES_EISCUE); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_EMBER); } + } SCENE { + NOT ABILITY_POPUP(player, ABILITY_ICE_FACE); + } +} + +SINGLE_BATTLE_TEST("Ice Face is restored if hail or snow begins while Noice Face Eiscue is out") +{ + u32 move; + PARAMETRIZE { move = MOVE_SNOWSCAPE; } + PARAMETRIZE { move = MOVE_HAIL; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); + ASSUME(gMovesInfo[MOVE_SNOWSCAPE].effect == EFFECT_SNOWSCAPE); + ASSUME(gMovesInfo[MOVE_HAIL].effect == EFFECT_HAIL); + PLAYER(SPECIES_EISCUE); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(opponent, move); } + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_ICE_FACE); + MESSAGE("Eiscue transformed!"); + ABILITY_POPUP(player, ABILITY_ICE_FACE); + MESSAGE("Eiscue transformed!"); + ABILITY_POPUP(player, ABILITY_ICE_FACE); + MESSAGE("Eiscue transformed!"); + } +} + +SINGLE_BATTLE_TEST("Ice Face is restored if Noice Face Eiscue is sent in while hail or snow is active") +{ + u32 move; + PARAMETRIZE { move = MOVE_SNOWSCAPE; } + PARAMETRIZE { move = MOVE_HAIL; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); + ASSUME(gMovesInfo[MOVE_SNOWSCAPE].effect == EFFECT_SNOWSCAPE); + ASSUME(gMovesInfo[MOVE_HAIL].effect == EFFECT_HAIL); + PLAYER(SPECIES_EISCUE); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TACKLE); } + TURN { SWITCH(player, 1); MOVE(opponent, move); } + TURN { SWITCH(player, 0); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_ICE_FACE); + MESSAGE("Eiscue transformed!"); + ABILITY_POPUP(player, ABILITY_ICE_FACE); + MESSAGE("Eiscue transformed!"); + ABILITY_POPUP(player, ABILITY_ICE_FACE); + MESSAGE("Eiscue transformed!"); + } +} + +SINGLE_BATTLE_TEST("Ice Face is not restored if Eiscue changes into Noice Face form while there's already hail or snow") +{ + u32 move; + PARAMETRIZE { move = MOVE_SNOWSCAPE; } + PARAMETRIZE { move = MOVE_HAIL; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); + ASSUME(gMovesInfo[MOVE_SNOWSCAPE].effect == EFFECT_SNOWSCAPE); + ASSUME(gMovesInfo[MOVE_HAIL].effect == EFFECT_HAIL); + PLAYER(SPECIES_EISCUE) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_ICE_FACE); + MESSAGE("Eiscue transformed!"); + MESSAGE("Eiscue used Celebrate!"); + MESSAGE("Eiscue fainted!"); + } +} + +SINGLE_BATTLE_TEST("Ice Face form change persists after switching out") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); + PLAYER(SPECIES_EISCUE) { HP(1); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + TURN { SWITCH(player, 1); MOVE(opponent, MOVE_CELEBRATE); } + TURN { SWITCH(player, 0); MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } + } SCENE { + ABILITY_POPUP(player, ABILITY_ICE_FACE); + MESSAGE("Eiscue transformed!"); + MESSAGE("Eiscue fainted!"); + } +} + +SINGLE_BATTLE_TEST("Ice Face doesn't transform Eiscue if Cloud Nine/Air Lock is on the field") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL); + PLAYER(SPECIES_EISCUE) { HP(1); } + OPPONENT(SPECIES_RAYQUAZA) { Ability(ABILITY_AIR_LOCK); } + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_SNOWSCAPE); MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ABILITY_POPUP(player, ABILITY_ICE_FACE); + MESSAGE("Eiscue transformed!"); + MESSAGE("Eiscue fainted!"); + } +} diff --git a/test/battle/ability/leaf_guard.c b/test/battle/ability/leaf_guard.c index 6c559ea48a..2c55236def 100644 --- a/test/battle/ability/leaf_guard.c +++ b/test/battle/ability/leaf_guard.c @@ -27,6 +27,8 @@ SINGLE_BATTLE_TEST("Leaf Guard prevents non-volatile status conditions in sun") } } +TO_DO_BATTLE_TEST("Leaf Guard doesn't prevent non-volatile status conditions if Cloud Nine/Air Lock is on the field"); + SINGLE_BATTLE_TEST("Leaf Guard prevents status conditions from Flame Orb and Toxic Orb") { u32 item; @@ -49,6 +51,8 @@ SINGLE_BATTLE_TEST("Leaf Guard prevents status conditions from Flame Orb and Tox } } +TO_DO_BATTLE_TEST("Leaf Guard doesn't prevent status conditions from Flame Orb and Toxic Orb if Cloud Nine/Air Lock is on the field"); + SINGLE_BATTLE_TEST("Leaf Guard prevents Rest during sun") { GIVEN { @@ -66,3 +70,5 @@ SINGLE_BATTLE_TEST("Leaf Guard prevents Rest during sun") } } } + +TO_DO_BATTLE_TEST("Leaf Guard doesn't prevent Rest if Cloud Nine/Air Lock is on the field"); diff --git a/test/battle/ability/magic_guard.c b/test/battle/ability/magic_guard.c index 69e8bac9c7..5579652265 100644 --- a/test/battle/ability/magic_guard.c +++ b/test/battle/ability/magic_guard.c @@ -13,5 +13,5 @@ SINGLE_BATTLE_TEST("Magic Guard prevents recoil damage to the user") ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_EDGE, player); HP_BAR(opponent); NOT HP_BAR(player); - } + } } diff --git a/test/battle/ability/moxie.c b/test/battle/ability/moxie.c index b60a11507a..79b1fc989f 100644 --- a/test/battle/ability/moxie.c +++ b/test/battle/ability/moxie.c @@ -1,12 +1,15 @@ #include "global.h" #include "test/battle.h" -DOUBLE_BATTLE_TEST("Moxie raises Attack by one stage after directly causing a Pokemon to faint") +DOUBLE_BATTLE_TEST("Moxie/Chilling Neigh raises Attack by one stage after directly causing a Pokemon to faint") { - ASSUME(gMovesInfo[MOVE_EARTHQUAKE].target == MOVE_TARGET_FOES_AND_ALLY); - + u32 species = 0, ability = 0, abilityPopUp = 0; + PARAMETRIZE { species = SPECIES_SALAMENCE; ability = ABILITY_MOXIE; abilityPopUp = ABILITY_MOXIE; } + PARAMETRIZE { species = SPECIES_GLASTRIER; ability = ABILITY_CHILLING_NEIGH; abilityPopUp = ABILITY_CHILLING_NEIGH; } + PARAMETRIZE { species = SPECIES_CALYREX_ICE_RIDER; ability = ABILITY_AS_ONE_ICE_RIDER; abilityPopUp = ABILITY_CHILLING_NEIGH; } GIVEN { - PLAYER(SPECIES_SALAMENCE) { Ability(ABILITY_MOXIE); } + ASSUME(gMovesInfo[MOVE_EARTHQUAKE].target == MOVE_TARGET_FOES_AND_ALLY); + PLAYER(species) { Ability(ability); } PLAYER(SPECIES_SNORUNT) { HP(1); } OPPONENT(SPECIES_GLALIE) { HP(1); } OPPONENT(SPECIES_ABRA) { HP(1); } @@ -23,19 +26,28 @@ DOUBLE_BATTLE_TEST("Moxie raises Attack by one stage after directly causing a Po MESSAGE("Foe Glalie fainted!"); MESSAGE("Foe Abra fainted!"); } - ABILITY_POPUP(playerLeft, ABILITY_MOXIE); + ABILITY_POPUP(playerLeft, abilityPopUp); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("Salamence's Moxie raised its Attack!"); + if (species == SPECIES_SALAMENCE) + MESSAGE("Salamence's Moxie raised its Attack!"); + else if (species == SPECIES_GLASTRIER) + MESSAGE("Glastrier's Chilling Neigh raised its Attack!"); + else + MESSAGE("Calyrex's Chilling Neigh raised its Attack!"); } } THEN { EXPECT_EQ(playerLeft->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 3); } } -DOUBLE_BATTLE_TEST("Moxie does not trigger if Pokemon faint to indirect damage or damage from other Pokemon") +DOUBLE_BATTLE_TEST("Moxie/Chilling Neigh does not trigger if Pokemon faint to indirect damage or damage from other Pokemon") { + u32 species = 0, ability = 0, abilityPopUp = 0; + PARAMETRIZE { species = SPECIES_SALAMENCE; ability = ABILITY_MOXIE; abilityPopUp = ABILITY_MOXIE; } + PARAMETRIZE { species = SPECIES_GLASTRIER; ability = ABILITY_CHILLING_NEIGH; abilityPopUp = ABILITY_CHILLING_NEIGH; } + PARAMETRIZE { species = SPECIES_CALYREX_ICE_RIDER; ability = ABILITY_AS_ONE_ICE_RIDER; abilityPopUp = ABILITY_CHILLING_NEIGH; } GIVEN { - PLAYER(SPECIES_SALAMENCE) { Ability(ABILITY_MOXIE); } + PLAYER(species) { Ability(ability); } PLAYER(SPECIES_SNORUNT) { HP(1); Status1(STATUS1_POISON); } OPPONENT(SPECIES_GLALIE) { HP(1); Status1(STATUS1_BURN); } OPPONENT(SPECIES_ABRA) { HP(1); } @@ -53,9 +65,11 @@ DOUBLE_BATTLE_TEST("Moxie does not trigger if Pokemon faint to indirect damage o MESSAGE("Foe Abra fainted!"); } NONE_OF { - ABILITY_POPUP(playerLeft, ABILITY_MOXIE); + ABILITY_POPUP(playerLeft, abilityPopUp); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); MESSAGE("Salamence's Moxie raised its Attack!"); + MESSAGE("Glastrier's Chilling Neigh raised its Attack!"); + MESSAGE("Calyrex's Chilling Neigh raised its Attack!"); } } } THEN { @@ -63,12 +77,15 @@ DOUBLE_BATTLE_TEST("Moxie does not trigger if Pokemon faint to indirect damage o } } -SINGLE_BATTLE_TEST("Moxie does not trigger when already at maximum Attack stage") +SINGLE_BATTLE_TEST("Moxie/Chilling Neigh does not trigger when already at maximum Attack stage") { - ASSUME(gMovesInfo[MOVE_BELLY_DRUM].effect == EFFECT_BELLY_DRUM); - + u32 species = 0, ability = 0, abilityPopUp = 0; + PARAMETRIZE { species = SPECIES_SALAMENCE; ability = ABILITY_MOXIE; abilityPopUp = ABILITY_MOXIE; } + PARAMETRIZE { species = SPECIES_GLASTRIER; ability = ABILITY_CHILLING_NEIGH; abilityPopUp = ABILITY_CHILLING_NEIGH; } + PARAMETRIZE { species = SPECIES_CALYREX_ICE_RIDER; ability = ABILITY_AS_ONE_ICE_RIDER; abilityPopUp = ABILITY_CHILLING_NEIGH; } GIVEN { - PLAYER(SPECIES_SALAMENCE) { Ability(ABILITY_MOXIE); } + ASSUME(gMovesInfo[MOVE_BELLY_DRUM].effect == EFFECT_BELLY_DRUM); + PLAYER(species) { Ability(ability); } OPPONENT(SPECIES_SNORUNT) { HP(1); } OPPONENT(SPECIES_SNORUNT); } WHEN { @@ -77,28 +94,38 @@ SINGLE_BATTLE_TEST("Moxie does not trigger when already at maximum Attack stage" } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_BELLY_DRUM, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); - MESSAGE("Salamence cut its own HP and maximized ATTACK!"); + if (species == SPECIES_SALAMENCE) + MESSAGE("Salamence cut its own HP and maximized ATTACK!"); + else if (species == SPECIES_GLASTRIER) + MESSAGE("Glastrier cut its own HP and maximized ATTACK!"); + else + MESSAGE("Calyrex cut its own HP and maximized ATTACK!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); MESSAGE("Foe Snorunt fainted!"); - NONE_OF { - ABILITY_POPUP(player, ABILITY_MOXIE); + NONE_OF { + ABILITY_POPUP(player, abilityPopUp); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Salamence's Moxie raised its Attack!"); + MESSAGE("Glastrier's Chilling Neigh raised its Attack!"); + MESSAGE("Calyrex's Chilling Neigh raised its Attack!"); } } THEN { EXPECT_EQ(player->statStages[STAT_ATK], MAX_STAT_STAGE); } } -DOUBLE_BATTLE_TEST("Moxie does not increase damage done by the same move that causes another Pokemon to faint") +DOUBLE_BATTLE_TEST("Moxie/Chilling Neigh does not increase damage done by the same move that causes another Pokemon to faint") { s16 damage[2]; - - ASSUME(gMovesInfo[MOVE_EARTHQUAKE].target == MOVE_TARGET_FOES_AND_ALLY); + u32 species = 0, ability = 0, abilityPopUp = 0; + PARAMETRIZE { species = SPECIES_SALAMENCE; ability = ABILITY_MOXIE; abilityPopUp = ABILITY_MOXIE; } + PARAMETRIZE { species = SPECIES_GLASTRIER; ability = ABILITY_CHILLING_NEIGH; abilityPopUp = ABILITY_CHILLING_NEIGH; } + PARAMETRIZE { species = SPECIES_CALYREX_ICE_RIDER; ability = ABILITY_AS_ONE_ICE_RIDER; abilityPopUp = ABILITY_CHILLING_NEIGH; } KNOWN_FAILING; // Requires simultaneous damage implementation GIVEN { - PLAYER(SPECIES_SALAMENCE) { Ability(ABILITY_MOXIE); } + ASSUME(gMovesInfo[MOVE_EARTHQUAKE].target == MOVE_TARGET_FOES_AND_ALLY); + PLAYER(species) { Ability(ability); } PLAYER(SPECIES_ABRA) { HP(1); } OPPONENT(SPECIES_GLALIE); OPPONENT(SPECIES_GLALIE); @@ -110,9 +137,14 @@ DOUBLE_BATTLE_TEST("Moxie does not increase damage done by the same move that ca HP_BAR(opponentLeft, captureDamage: &damage[0]); HP_BAR(playerRight); MESSAGE("Abra fainted!"); - ABILITY_POPUP(playerLeft, ABILITY_MOXIE); + ABILITY_POPUP(playerLeft, abilityPopUp); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); - MESSAGE("Salamence's Moxie raised its Attack!"); + if (species == SPECIES_SALAMENCE) + MESSAGE("Salamence's Moxie raised its Attack!"); + else if (species == SPECIES_GLASTRIER) + MESSAGE("Glastrier's Chilling Neigh raised its Attack!"); + else + MESSAGE("Calyrex's Chilling Neigh raised its Attack!"); HP_BAR(opponentRight, captureDamage: &damage[1]); } THEN { EXPECT_EQ(playerLeft->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); diff --git a/test/battle/ability/normalize.c b/test/battle/ability/normalize.c new file mode 100644 index 0000000000..d3e8df6bee --- /dev/null +++ b/test/battle/ability/normalize.c @@ -0,0 +1,16 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Normalize tuns a move into a Normal-type move"); +TO_DO_BATTLE_TEST("Normalize boosts power of both affected and originally Normal-type moves by 20% (Gen7+)"); +TO_DO_BATTLE_TEST("Normalize affects status moves"); // Eg. Thunder Wave can affect Ground types +TO_DO_BATTLE_TEST("Normalize makes Flying Press do Normal/Flying damage"); +TO_DO_BATTLE_TEST("Normalize still makes Freeze-Dry do super effective damage to Water-type Pokémon"); +TO_DO_BATTLE_TEST("Normalize-affected moves become Electric-type under Electrify's effect"); +TO_DO_BATTLE_TEST("Normalize-affected moves become Electric-type under Ion Deluge's effect"); +TO_DO_BATTLE_TEST("Normalize doesn't affect Hidden Power's type"); +TO_DO_BATTLE_TEST("Normalize doesn't affect Weather Ball's type"); +TO_DO_BATTLE_TEST("Normalize doesn't affect Natural Gift's type"); +TO_DO_BATTLE_TEST("Normalize doesn't affect Judgment/Techno Blast/Multi-Attack's type"); +TO_DO_BATTLE_TEST("Normalize doesn't affect Terrain Pulse's type"); +TO_DO_BATTLE_TEST("Normalize doesn't affect damaging Z-Move types"); diff --git a/test/battle/ability/orichalcum_pulse.c b/test/battle/ability/orichalcum_pulse.c new file mode 100644 index 0000000000..295e0db23c --- /dev/null +++ b/test/battle/ability/orichalcum_pulse.c @@ -0,0 +1,5 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Orichalcum Pulse sets up sun for 5 turns"); +TO_DO_BATTLE_TEST("Orichalcum Pulse boosts the Pokémon's Attack by 33% in sun, even if it's holding an Utility Umbrella"); diff --git a/test/battle/ability/parental_bond.c b/test/battle/ability/parental_bond.c index 945e975b77..3ee942e789 100644 --- a/test/battle/ability/parental_bond.c +++ b/test/battle/ability/parental_bond.c @@ -263,6 +263,29 @@ SINGLE_BATTLE_TEST("Parental Bond Smack Down effect triggers after 2nd hit") } } +SINGLE_BATTLE_TEST("Parental Bond Snore strikes twice while asleep") +{ + s16 damage[2]; + GIVEN { + ASSUME(gMovesInfo[MOVE_SNORE].effect == EFFECT_SNORE); + PLAYER(SPECIES_KANGASKHAN_MEGA) { Status1(STATUS1_SLEEP); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SNORE); } + } SCENE { + MESSAGE("Kangaskhan is fast asleep."); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SNORE, player); + HP_BAR(opponent, captureDamage: &damage[0]); + HP_BAR(opponent, captureDamage: &damage[1]); + MESSAGE("Hit 2 time(s)!"); + } THEN { + if (B_PARENTAL_BOND_DMG == GEN_6) + EXPECT_MUL_EQ(damage[0], Q_4_12(0.5), damage[1]); + else + EXPECT_MUL_EQ(damage[0], Q_4_12(0.25), damage[1]); + } +} + TO_DO_BATTLE_TEST("Parental Bond tests"); // Temporary TODO: Convert Bulbapedia description into tests. diff --git a/test/battle/ability/pickup.c b/test/battle/ability/pickup.c new file mode 100644 index 0000000000..927e1b3468 --- /dev/null +++ b/test/battle/ability/pickup.c @@ -0,0 +1,295 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gItemsInfo[ITEM_SITRUS_BERRY].holdEffect == HOLD_EFFECT_RESTORE_PCT_HP); + ASSUME(I_SITRUS_BERRY_HEAL >= GEN_4); +} + +SINGLE_BATTLE_TEST("Pickup grants an item used by another Pokémon") +{ + GIVEN { + PLAYER(SPECIES_ZIGZAGOON) { Ability(ABILITY_PICKUP); } + OPPONENT(SPECIES_WOBBUFFET) { MaxHP(100); HP(51); Item(ITEM_SITRUS_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ABILITY_POPUP(player, ABILITY_PICKUP); + MESSAGE("Zigzagoon found one Sitrus Berry!"); + } THEN { + EXPECT_EQ(player->item, ITEM_SITRUS_BERRY); + } +} + +SINGLE_BATTLE_TEST("Pickup doesn't grant the user their item") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_ZIGZAGOON) { Ability(ABILITY_PICKUP); MaxHP(500); HP(251); Item(ITEM_SITRUS_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_PICKUP); + MESSAGE("Zigzagoon found one Sitrus Berry!"); + } + } THEN { + EXPECT_EQ(opponent->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Pickup doesn't grant another Pokémon's popped Air Balloon") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_AIR_BALLOON].holdEffect == HOLD_EFFECT_AIR_BALLOON); + PLAYER(SPECIES_ZIGZAGOON) { Ability(ABILITY_PICKUP); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_AIR_BALLOON); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + NONE_OF { + ABILITY_POPUP(player, ABILITY_PICKUP); + MESSAGE("Zigzagoon found one Air Balloon!"); + } + } THEN { + EXPECT_EQ(opponent->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Pickup doesn't grant an item not used that turn") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_ZIGZAGOON) { Ability(ABILITY_PICKUP); } + OPPONENT(SPECIES_WOBBUFFET) { MaxHP(100); HP(51); Item(ITEM_SITRUS_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); } + TURN { SWITCH(player, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent); + NONE_OF { + ABILITY_POPUP(player, ABILITY_PICKUP); + MESSAGE("Zigzagoon found one Sitrus Berry!"); + } + } THEN { + EXPECT_EQ(player->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Pickup doesn't grant an item after its holder faints") +{ + GIVEN { + PLAYER(SPECIES_ZIGZAGOON) { Ability(ABILITY_PICKUP); } + OPPONENT(SPECIES_WOBBUFFET) { MaxHP(100); HP(51); Item(ITEM_SITRUS_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { MaxHP(100); HP(51); Item(ITEM_SITRUS_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_MEMENTO); SEND_OUT(opponent, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + NONE_OF { + ABILITY_POPUP(player, ABILITY_PICKUP); + MESSAGE("Zigzagoon found one Sitrus Berry!"); + } + } THEN { + EXPECT_EQ(player->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Pickup doesn't grant an used item if holder is replaced") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_PARTING_SHOT].effect == EFFECT_PARTING_SHOT); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_ZIGZAGOON) { Ability(ABILITY_PICKUP); } + OPPONENT(SPECIES_WOBBUFFET) { MaxHP(300); HP(151); Item(ITEM_SITRUS_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { MaxHP(300); HP(151); Item(ITEM_SITRUS_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_PARTING_SHOT); SEND_OUT(opponent, 1); } + TURN { MOVE(player, MOVE_U_TURN); SEND_OUT(player, 1); MOVE(opponent, MOVE_PARTING_SHOT); SEND_OUT(opponent, 0); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_PARTING_SHOT, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_PARTING_SHOT, opponent); + NONE_OF { + ABILITY_POPUP(player, ABILITY_PICKUP); + MESSAGE("Zigzagoon found one Sitrus Berry!"); + } + } THEN { + EXPECT_EQ(player->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Pickup doesn't grant an item if it destroyed the item with Incinerate") +{ + GIVEN { + ASSUME(MoveHasAdditionalEffect(MOVE_INCINERATE, MOVE_EFFECT_INCINERATE)); + PLAYER(SPECIES_ZIGZAGOON) { Ability(ABILITY_PICKUP); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SITRUS_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_INCINERATE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_INCINERATE, player); + NONE_OF { + ABILITY_POPUP(player, ABILITY_PICKUP); + MESSAGE("Zigzagoon found one Sitrus Berry!"); + } + } THEN { + EXPECT_EQ(player->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Pickup doesn't grant an item if it knocked off that item") +{ + GIVEN { + ASSUME(MoveHasAdditionalEffect(MOVE_KNOCK_OFF, MOVE_EFFECT_KNOCK_OFF)); + PLAYER(SPECIES_ZIGZAGOON) { Ability(ABILITY_PICKUP); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SITRUS_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_KNOCK_OFF); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player); + NONE_OF { + ABILITY_POPUP(player, ABILITY_PICKUP); + MESSAGE("Zigzagoon found one Sitrus Berry!"); + } + } THEN { + EXPECT_EQ(player->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Pickup doesn't grant an item if the user eats it with Bug Bite/Pluck") +{ + GIVEN { + ASSUME(MoveHasAdditionalEffect(MOVE_BUG_BITE, MOVE_EFFECT_BUG_BITE)); + PLAYER(SPECIES_ZIGZAGOON) { Ability(ABILITY_PICKUP); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SITRUS_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_BUG_BITE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BUG_BITE, player); + NONE_OF { + ABILITY_POPUP(player, ABILITY_PICKUP); + MESSAGE("Zigzagoon found one Sitrus Berry!"); + } + } THEN { + EXPECT_EQ(player->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Pickup doesn't grant an used item if its user already restored it") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_RECYCLE].effect == EFFECT_RECYCLE); + PLAYER(SPECIES_ZIGZAGOON) { Ability(ABILITY_PICKUP); } + OPPONENT(SPECIES_WOBBUFFET) { MaxHP(100); HP(51); Item(ITEM_SITRUS_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_RECYCLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_RECYCLE, opponent); + NONE_OF { + ABILITY_POPUP(player, ABILITY_PICKUP); + MESSAGE("Zigzagoon found one Sitrus Berry!"); + } + } THEN { + EXPECT_EQ(player->item, ITEM_NONE); + } +} + +SINGLE_BATTLE_TEST("Pickup restores an item that has been Flinged") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_FLING].effect == EFFECT_FLING); + PLAYER(SPECIES_ZIGZAGOON) { Ability(ABILITY_PICKUP); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SITRUS_BERRY); } + } WHEN { + TURN { MOVE(opponent, MOVE_FLING); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FLING, opponent); + ABILITY_POPUP(player, ABILITY_PICKUP); + MESSAGE("Zigzagoon found one Sitrus Berry!"); + } THEN { + EXPECT_EQ(player->item, ITEM_SITRUS_BERRY); + } +} + +SINGLE_BATTLE_TEST("Pickup restores an item that was used by Natural Gift") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_NATURAL_GIFT].effect == EFFECT_NATURAL_GIFT); + PLAYER(SPECIES_ZIGZAGOON) { Ability(ABILITY_PICKUP); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SITRUS_BERRY); } + } WHEN { + TURN { MOVE(opponent, MOVE_NATURAL_GIFT); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_NATURAL_GIFT, opponent); + ABILITY_POPUP(player, ABILITY_PICKUP); + MESSAGE("Zigzagoon found one Sitrus Berry!"); + } THEN { + EXPECT_EQ(player->item, ITEM_SITRUS_BERRY); + } +} + +DOUBLE_BATTLE_TEST("Pickup triggers based on Speed order") +{ + GIVEN { + PLAYER(SPECIES_ZIGZAGOON) { Speed(1); Ability(ABILITY_PICKUP); } + PLAYER(SPECIES_WOBBUFFET) { Speed(2); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(3); MaxHP(100); HP(51); Item(ITEM_SITRUS_BERRY); } + OPPONENT(SPECIES_ZIGZAGOON) { Speed(50); Ability(ABILITY_PICKUP); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerLeft); + ABILITY_POPUP(opponentRight, ABILITY_PICKUP); + NOT ABILITY_POPUP(playerLeft, ABILITY_PICKUP); + } THEN { + EXPECT_EQ(opponentRight->item, ITEM_SITRUS_BERRY); + EXPECT_EQ(playerLeft->item, ITEM_NONE); + } +} + +DOUBLE_BATTLE_TEST("Pickup grants a random item used by another Pokémon") +{ + PASSES_RANDOMLY(1, 3, RNG_PICKUP); + GIVEN { + ASSUME(gItemsInfo[ITEM_WHITE_HERB].holdEffect == HOLD_EFFECT_RESTORE_STATS); + PLAYER(SPECIES_ZIGZAGOON) { Ability(ABILITY_PICKUP); } + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_WHITE_HERB); } + OPPONENT(SPECIES_WOBBUFFET) { MaxHP(100); HP(51); Item(ITEM_SITRUS_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_WHITE_HERB); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_BULLDOZE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLDOZE, playerLeft); + ABILITY_POPUP(playerLeft, ABILITY_PICKUP); + } THEN { + EXPECT_EQ(playerLeft->item, ITEM_SITRUS_BERRY); + } +} + +DOUBLE_BATTLE_TEST("Pickup doesn't trigger more than once per turn") +{ + GIVEN { + PLAYER(SPECIES_ZIGZAGOON) { HP(1); Ability(ABILITY_PICKUP); } + PLAYER(SPECIES_WOBBUFFET) { MaxHP(100); HP(51); Item(ITEM_SITRUS_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { MaxHP(100); HP(51); Item(ITEM_SITRUS_BERRY); } + OPPONENT(SPECIES_WOBBUFFET) { MaxHP(100); HP(51); Item(ITEM_SITRUS_BERRY); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_BULLDOZE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BULLDOZE, playerLeft); + ABILITY_POPUP(playerLeft, ABILITY_PICKUP); + NOT ABILITY_POPUP(playerLeft, ABILITY_PICKUP); + } THEN { + EXPECT_EQ(playerLeft->item, ITEM_NONE); + EXPECT_GT(playerLeft->hp, 1); + EXPECT_LT(playerLeft->hp, playerLeft->maxHP/2); + } +} diff --git a/test/battle/ability/pixilate.c b/test/battle/ability/pixilate.c new file mode 100644 index 0000000000..97c9c37a0c --- /dev/null +++ b/test/battle/ability/pixilate.c @@ -0,0 +1,35 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL); + ASSUME(gMovesInfo[MOVE_TACKLE].power > 0); +} + +SINGLE_BATTLE_TEST("Pixilate turns a Normal-type move into a Fairy-type move") +{ + GIVEN { + PLAYER(SPECIES_DRAGONITE); + OPPONENT(SPECIES_ALTARIA) { Item(ITEM_ALTARIANITE); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE, gimmick: GIMMICK_MEGA); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("It's super effective!"); + } +} + +TO_DO_BATTLE_TEST("Pixilate can not turn certain moves into Fairy type moves"); +TO_DO_BATTLE_TEST("Pixilate boosts power of affected moves by 20% (Gen7+)"); +TO_DO_BATTLE_TEST("Pixilate boosts power of affected moves by 30% (Gen6)"); +TO_DO_BATTLE_TEST("(DYNAMAX) Pixilate turns Max Strike into Max Starfall when not used by Gigantamax Alcremie"); +TO_DO_BATTLE_TEST("(DYNAMAX) Pixilate doesn't turn Max Strike into Max Starfall when used by Gigantamax Alcremie, instead becoming G-Max Finale"); + +// Gen 6-7 +TO_DO_BATTLE_TEST("Pixilate overrides Electrify (Gen6-7)"); +TO_DO_BATTLE_TEST("Pixilate overrides Ion Deluge (Gen6-7)"); +// Gen 8+ +TO_DO_BATTLE_TEST("Pixilate doesn't override Electrify (Gen8+)"); +//TO_DO_BATTLE_TEST("Pixilate doesn't override Ion Deluge (Gen8+)"); // Ion Deluge doesn't exist in Gen 8+, but we probably could assume it behaves similar to under Electrify. TODO: Test by hacking SV. diff --git a/test/battle/ability/protosynthesis.c b/test/battle/ability/protosynthesis.c index 3cb35164ec..58f10b366f 100644 --- a/test/battle/ability/protosynthesis.c +++ b/test/battle/ability/protosynthesis.c @@ -99,3 +99,7 @@ SINGLE_BATTLE_TEST("Protosynthesis activates on switch-in") MESSAGE("Roaring Moon's Attack was heightened!"); } } + +TO_DO_BATTLE_TEST("Protosynthesis activates in sun before Booster Energy"); +TO_DO_BATTLE_TEST("Protosynthesis activates even if the Pokémon is holding an Utility Umbrella"); +TO_DO_BATTLE_TEST("Protosynthesis doesn't activate if Cloud Nine/Air Lock is on the field"); diff --git a/test/battle/ability/purifying_salt.c b/test/battle/ability/purifying_salt.c index e188262497..495ce01a46 100644 --- a/test/battle/ability/purifying_salt.c +++ b/test/battle/ability/purifying_salt.c @@ -19,6 +19,24 @@ SINGLE_BATTLE_TEST("Purifying Salt halves damage from Ghost-type moves", s16 dam } } +SINGLE_BATTLE_TEST("Purifying Salt halves damage from dynamic Ghost-type moves", s16 damage) +{ + u16 ability; + PARAMETRIZE { ability = ABILITY_STURDY; } + PARAMETRIZE { ability = ABILITY_PURIFYING_SALT; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TERA_BLAST].effect == EFFECT_TERA_BLAST); + PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_GHOST); } + OPPONENT(SPECIES_GARGANACL) { Ability(ability); } + } WHEN { + TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); } + } 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 { @@ -66,3 +84,19 @@ SINGLE_BATTLE_TEST("Purifying Salt grants immunity to status effects") } } } + +SINGLE_BATTLE_TEST("Purifying Salt user can't be poisoned by Toxic Spikes") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_GARGANACL) { Ability(ABILITY_PURIFYING_SALT); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TOXIC_SPIKES); } + TURN { SWITCH(player, 1); } + } SCENE { + SEND_IN_MESSAGE("Garganacl"); + } THEN { + EXPECT_EQ(player->status1, STATUS1_NONE); + } +} diff --git a/test/battle/ability/rain_dish.c b/test/battle/ability/rain_dish.c index dd647f0eb9..93f642c633 100644 --- a/test/battle/ability/rain_dish.c +++ b/test/battle/ability/rain_dish.c @@ -1,6 +1,10 @@ #include "global.h" #include "test/battle.h" +ASSUMPTIONS { + ASSUME(gMovesInfo[MOVE_RAIN_DANCE].effect == EFFECT_RAIN_DANCE); +} + SINGLE_BATTLE_TEST("Rain Dish recovers 1/16th of Max HP in Rain") { GIVEN { @@ -11,6 +15,18 @@ SINGLE_BATTLE_TEST("Rain Dish recovers 1/16th of Max HP in Rain") } SCENE { ABILITY_POPUP(player, ABILITY_RAIN_DISH); MESSAGE("Ludicolo's Rain Dish restored its HP a little!"); - HP_BAR(player, damage: -(100 / 16)); + HP_BAR(player, damage: -(100 / 16)); + } +} + +SINGLE_BATTLE_TEST("Rain Dish doesn't recover HP if Cloud Nine/Air Lock is on the field") +{ + GIVEN { + PLAYER(SPECIES_LUDICOLO) { Ability(ABILITY_RAIN_DISH); HP(1); MaxHP(100); } + OPPONENT(SPECIES_GOLDUCK) { Ability(ABILITY_CLOUD_NINE); } + } WHEN { + TURN { MOVE(opponent, MOVE_RAIN_DANCE); } + } SCENE { + NOT ABILITY_POPUP(player, ABILITY_RAIN_DISH); } } diff --git a/test/battle/ability/refrigerate.c b/test/battle/ability/refrigerate.c new file mode 100644 index 0000000000..dbbaa30eb8 --- /dev/null +++ b/test/battle/ability/refrigerate.c @@ -0,0 +1,34 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL); + ASSUME(gMovesInfo[MOVE_TACKLE].power > 0); +} + +SINGLE_BATTLE_TEST("Refrigerate turns a Normal-type move into a Ice-type move") +{ + GIVEN { + PLAYER(SPECIES_MEGANIUM); + OPPONENT(SPECIES_AMAURA) { Ability(ABILITY_REFRIGERATE); } + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + MESSAGE("It's super effective!"); + } +} + +TO_DO_BATTLE_TEST("Refrigerate can not turn certain moves into Ice type moves"); +TO_DO_BATTLE_TEST("Refrigerate boosts power of affected moves by 20% (Gen7+)"); +TO_DO_BATTLE_TEST("Refrigerate boosts power of affected moves by 30% (Gen6)"); +TO_DO_BATTLE_TEST("(DYNAMAX) Refrigerate turns Max Strike into Max Hailstorm when not used by Gigantamax Lapras"); +//TO_DO_BATTLE_TEST("(DYNAMAX) Refrigerate doesn't turn Max Strike into Max Hailstorm when used by Gigantamax Lapras, instead becoming G-Max Resonance"); // Marked in Bulbapedia as "needs research", so this assumes that it behaves like Pixilate. + +// Gen 6-7 +TO_DO_BATTLE_TEST("Refrigerate overrides Electrify (Gen6-7)"); +TO_DO_BATTLE_TEST("Refrigerate overrides Ion Deluge (Gen6-7)"); +// Gen 8+ +//TO_DO_BATTLE_TEST("Refrigerate doesn't override Electrify (Gen8+)"); // Bulbapedia doesn't list this effect, so it assumes it behaves like Pixilate. +//TO_DO_BATTLE_TEST("Refrigerate doesn't override Ion Deluge (Gen8+)"); // Ion Deluge doesn't exist in Gen 8+, but we probably could assume it behaves similar to under Electrify. TODO: Test by hacking SV. diff --git a/test/battle/ability/sand_force.c b/test/battle/ability/sand_force.c new file mode 100644 index 0000000000..e17722a885 --- /dev/null +++ b/test/battle/ability/sand_force.c @@ -0,0 +1,6 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Sand Force prevents damage from sandstorm"); +TO_DO_BATTLE_TEST("Sand Force increases the power of Rock-, Ground- and Steel-type moves by 30% in sandstorm"); +TO_DO_BATTLE_TEST("Sand Force increases move power if Cloud Nine/Air Lock is on the field"); diff --git a/test/battle/ability/sand_rush.c b/test/battle/ability/sand_rush.c new file mode 100644 index 0000000000..fa7695c129 --- /dev/null +++ b/test/battle/ability/sand_rush.c @@ -0,0 +1,6 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Sand Rush prevents damage from sandstorm"); +TO_DO_BATTLE_TEST("Sand Rush doubles speed from sandstorm"); +TO_DO_BATTLE_TEST("Sand Rush doesn't double speed if Cloud Nine/Air Lock is on the field"); diff --git a/test/battle/ability/sand_veil.c b/test/battle/ability/sand_veil.c index 9e4a634de2..f42c267273 100644 --- a/test/battle/ability/sand_veil.c +++ b/test/battle/ability/sand_veil.c @@ -28,3 +28,6 @@ SINGLE_BATTLE_TEST("Sand Veil increases evasion during sandstorm") HP_BAR(player); } } + +TO_DO_BATTLE_TEST("Sand Veil doesn't prevent Sandstorm damage if Cloud Nine/Air Lock is on the field"); +TO_DO_BATTLE_TEST("Sand Veil doesn't increase evasion if Cloud Nine/Air Lock is on the field"); diff --git a/test/battle/ability/slush_rush.c b/test/battle/ability/slush_rush.c new file mode 100644 index 0000000000..8ae62454bb --- /dev/null +++ b/test/battle/ability/slush_rush.c @@ -0,0 +1,6 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Slush Rush doubles speed from hail"); +TO_DO_BATTLE_TEST("Slush Rush doubles speed from snow"); +TO_DO_BATTLE_TEST("Slush Rush doesn't double speed if Cloud Nine/Air Lock is on the field"); diff --git a/test/battle/ability/snow_cloak.c b/test/battle/ability/snow_cloak.c index f1bfbcb9b0..a4d1acadb7 100644 --- a/test/battle/ability/snow_cloak.c +++ b/test/battle/ability/snow_cloak.c @@ -27,3 +27,6 @@ SINGLE_BATTLE_TEST("Snow Cloak increases evasion during hail") HP_BAR(player); } } + +TO_DO_BATTLE_TEST("Snow Cloak doesn't prevent hail damage if Cloud Nine/Air Lock is on the field"); +TO_DO_BATTLE_TEST("Snow Cloak doesn't increase evasion if Cloud Nine/Air Lock is on the field"); diff --git a/test/battle/ability/solar_power.c b/test/battle/ability/solar_power.c new file mode 100644 index 0000000000..f14ea11ee1 --- /dev/null +++ b/test/battle/ability/solar_power.c @@ -0,0 +1,7 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Solar Power increases a Sp. Attack by x1.5 in Sun"); +TO_DO_BATTLE_TEST("Solar Power doesn't increases a Sp. Attack if Cloud Nine/Air Lock is on the field"); +TO_DO_BATTLE_TEST("Solar Power causes the Pokémon to lose 1/8 max HP in Sun"); +TO_DO_BATTLE_TEST("Solar Power doesn't cause the Pokémon to lose 1/8 max HP if Cloud Nine/Air Lock is on the field"); diff --git a/test/battle/ability/swift_swim.c b/test/battle/ability/swift_swim.c new file mode 100644 index 0000000000..4282ac2741 --- /dev/null +++ b/test/battle/ability/swift_swim.c @@ -0,0 +1,6 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Swift Swim doubles speed if it's raining"); +TO_DO_BATTLE_TEST("Swift Swim doesn't double speed if Cloud Nine/Air Lock is on the field"); +TO_DO_BATTLE_TEST("Swift Swim doesn't double speed if they have an Utility Umbrella"); diff --git a/test/battle/ability/unnerve.c b/test/battle/ability/unnerve.c new file mode 100644 index 0000000000..9ad4ee7e5f --- /dev/null +++ b/test/battle/ability/unnerve.c @@ -0,0 +1,6 @@ +#include "global.h" +#include "test/battle.h" + +// Remember to add a PARAMETRIZE for As One in the following tests: +TO_DO_BATTLE_TEST("Unnerve prevents opposing Pokémon from eating their own berries"); +TO_DO_BATTLE_TEST("Unnerve doesn't prevent opposing Pokémon from using Natural Gift"); diff --git a/test/battle/ability/wind_rider.c b/test/battle/ability/wind_rider.c new file mode 100644 index 0000000000..cd4dbeed1f --- /dev/null +++ b/test/battle/ability/wind_rider.c @@ -0,0 +1,127 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_TAILWIND].effect == EFFECT_TAILWIND); + ASSUME(gMovesInfo[MOVE_TAILWIND].windMove == TRUE); +} + +SINGLE_BATTLE_TEST("Wind Rider raises Attack by one stage if it sets up Tailwind") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_BRAMBLIN) { Ability(ABILITY_WIND_RIDER); } + } WHEN { + TURN { MOVE(opponent, MOVE_TAILWIND); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TAILWIND, opponent); + ABILITY_POPUP(opponent, ABILITY_WIND_RIDER); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Bramblin's Attack rose!"); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); + } +} + +DOUBLE_BATTLE_TEST("Wind Rider raises Attack by one stage if Tailwind is setup by its partner") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_BRAMBLIN) { Ability(ABILITY_WIND_RIDER); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_TAILWIND); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TAILWIND, opponentLeft); + ABILITY_POPUP(opponentRight, ABILITY_WIND_RIDER); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Foe Bramblin's Attack rose!"); + } THEN { + EXPECT_EQ(opponentRight->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); + } +} + +SINGLE_BATTLE_TEST("Wind Rider doesn't raise Attack if opponent sets up Tailwind") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_BRAMBLIN) { Ability(ABILITY_WIND_RIDER); } + } WHEN { + TURN { MOVE(player, MOVE_TAILWIND); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TAILWIND, player); + NONE_OF { + ABILITY_POPUP(opponent, ABILITY_WIND_RIDER); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Bramblin's Attack rose!"); + } + } THEN { + EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE); + } +} + +SINGLE_BATTLE_TEST("Wind Rider raises Attack by one stage if switched into Tailwind on its side of the field") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_BRAMBLIN) { Ability(ABILITY_WIND_RIDER); } + } WHEN { + TURN { MOVE(opponent, MOVE_TAILWIND); } + TURN { SWITCH(opponent, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TAILWIND, opponent); + ABILITY_POPUP(opponent, ABILITY_WIND_RIDER); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Bramblin's Wind Rider raised its Attack!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); + } +} + +SINGLE_BATTLE_TEST("Wind Rider activates when it's no longer effected by Neutralizing Gas") +{ + GIVEN { + PLAYER(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_BRAMBLIN) { Ability(ABILITY_WIND_RIDER); } + } WHEN { + TURN { MOVE(opponent, MOVE_TAILWIND); } + TURN { SWITCH(player, 1); } + } SCENE { + ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS); + MESSAGE("Neutralizing Gas filled the area!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TAILWIND, opponent); + SWITCH_OUT_MESSAGE("Weezing"); + MESSAGE("The effects of Neutralizing Gas wore off!"); + ABILITY_POPUP(opponent, ABILITY_WIND_RIDER); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Bramblin's Wind Rider raised its Attack!"); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); + } +} + +SINGLE_BATTLE_TEST("Wind Rider absorbs Wind moves and raises Attack by one stage") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_GUST].windMove == TRUE); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_BRAMBLIN) { Ability(ABILITY_WIND_RIDER); } + } WHEN { + TURN { MOVE(player, MOVE_GUST); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_GUST, player); + HP_BAR(opponent); + } + ABILITY_POPUP(opponent, ABILITY_WIND_RIDER); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Bramblin's Attack rose!"); + } THEN { + EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1); + } +} diff --git a/test/battle/ai/ai_check_viability.c b/test/battle/ai/ai_check_viability.c index fa921e8674..039d8ca331 100644 --- a/test/battle/ai/ai_check_viability.c +++ b/test/battle/ai/ai_check_viability.c @@ -239,3 +239,18 @@ AI_SINGLE_BATTLE_TEST("AI chooses moves that cure inactive party members") TURN { EXPECT_MOVE(opponent, MOVE_HEAL_BELL); } } } + +AI_DOUBLE_BATTLE_TEST("AI prioritizes Skill Swapping Contrary to allied mons that would benefit from it") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SKILL_SWAP].effect == EFFECT_SKILL_SWAP); + ASSUME(gMovesInfo[MOVE_OVERHEAT].additionalEffects[0].moveEffect == MOVE_EFFECT_SP_ATK_MINUS_2); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_DOUBLE_BATTLE); + PLAYER(SPECIES_WOBBUFFET) { Speed(3); } + PLAYER(SPECIES_WOBBUFFET) { Speed(3); } + OPPONENT(SPECIES_SPINDA) { Ability(ABILITY_CONTRARY); Speed(5); Moves(MOVE_SKILL_SWAP, MOVE_ENCORE, MOVE_FAKE_TEARS, MOVE_SWAGGER); } + OPPONENT(SPECIES_ARCANINE) { Ability(ABILITY_INTIMIDATE); Speed(4); Moves (MOVE_OVERHEAT); } + } WHEN { + TURN { EXPECT_MOVE(opponentLeft, MOVE_SKILL_SWAP, target:opponentRight); EXPECT_MOVE(opponentRight, MOVE_OVERHEAT); } + } +} diff --git a/test/battle/ai/ai_flag_risky.c b/test/battle/ai/ai_flag_risky.c index e6156de5a0..e1ceeb2161 100644 --- a/test/battle/ai/ai_flag_risky.c +++ b/test/battle/ai/ai_flag_risky.c @@ -13,7 +13,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: AI will blindly Mirror Coat against specia ASSUME(gSpeciesInfo[SPECIES_GROVYLE].baseSpAttack == 85); ASSUME(gSpeciesInfo[SPECIES_GROVYLE].baseAttack == 65); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiRiskyFlag); - PLAYER(SPECIES_GROVYLE) { Level(20); Moves(MOVE_ENERGY_BALL); } + PLAYER(SPECIES_GROVYLE) { Level(20); Moves(MOVE_ENERGY_BALL); } OPPONENT(SPECIES_CASTFORM) { Level(20); Moves(MOVE_TACKLE, MOVE_MIRROR_COAT); } } WHEN { TURN { MOVE(player, MOVE_ENERGY_BALL) ; EXPECT_MOVE(opponent, aiRiskyFlag ? MOVE_MIRROR_COAT : MOVE_TACKLE); } @@ -32,7 +32,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: AI will blindly Counter against physical a ASSUME(gSpeciesInfo[SPECIES_MARSHTOMP].baseAttack == 85); ASSUME(gSpeciesInfo[SPECIES_MARSHTOMP].baseSpAttack == 60); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiRiskyFlag); - PLAYER(SPECIES_MARSHTOMP) { Level(20); Moves(MOVE_WATERFALL); } + PLAYER(SPECIES_MARSHTOMP) { Level(20); Moves(MOVE_WATERFALL); } OPPONENT(SPECIES_CASTFORM) { Level(20); Moves(MOVE_TACKLE, MOVE_COUNTER); } } WHEN { TURN { MOVE(player, MOVE_WATERFALL) ; EXPECT_MOVE(opponent, aiRiskyFlag ? MOVE_COUNTER : MOVE_TACKLE); } @@ -49,7 +49,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: AI will prioritize Revenge if slower") GIVEN { ASSUME(gMovesInfo[MOVE_REVENGE].effect == EFFECT_REVENGE); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiRiskyFlag); - PLAYER(SPECIES_GROVYLE) { Level(20); Speed(4); Moves(MOVE_ENERGY_BALL); } + PLAYER(SPECIES_GROVYLE) { Level(20); Speed(4); Moves(MOVE_ENERGY_BALL); } OPPONENT(SPECIES_CASTFORM) { Level(19); Speed(3); Moves(MOVE_TACKLE, MOVE_REVENGE); } } WHEN { TURN { MOVE(player, MOVE_ENERGY_BALL) ; EXPECT_MOVE(opponent, aiRiskyFlag ? MOVE_REVENGE : MOVE_TACKLE); } @@ -83,7 +83,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: AI prefers high damage moves at the expens GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiRiskyFlag); - PLAYER(SPECIES_PSYDUCK) { Level(5); Moves(MOVE_TACKLE); } + PLAYER(SPECIES_PSYDUCK) { Level(5); Moves(MOVE_TACKLE); } OPPONENT(SPECIES_CASTFORM) { Level(20); Moves(MOVE_THUNDER, MOVE_THUNDERBOLT); } } WHEN { TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVE(opponent, aiRiskyFlag ? MOVE_THUNDER : MOVE_THUNDERBOLT); } diff --git a/test/battle/ai/ai_flag_sequence_switching.c b/test/battle/ai/ai_flag_sequence_switching.c index 1b4a264a24..7a0f3528bd 100644 --- a/test/battle/ai/ai_flag_sequence_switching.c +++ b/test/battle/ai/ai_flag_sequence_switching.c @@ -64,7 +64,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: Roar and Dragon Tail still fo } } -AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: AI will always switch into lowest party index after U-Turn, Parting Shot, and Baton Pass") +AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: AI will always switch into lowest party index after U-Turn, Parting Shot, Baton Pass, and Chilly Reception") { u32 j, aiSequenceSwitchingFlag = 0, move = MOVE_NONE; @@ -72,6 +72,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: AI will always switch into lo MOVE_U_TURN, MOVE_PARTING_SHOT, MOVE_BATON_PASS, + MOVE_CHILLY_RECEPTION, }; for (j = 0; j < ARRAY_COUNT(switchMoves); j++) @@ -84,6 +85,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: AI will always switch into lo ASSUME(gMovesInfo[MOVE_U_TURN].effect == EFFECT_HIT_ESCAPE); ASSUME(gMovesInfo[MOVE_PARTING_SHOT].effect == EFFECT_PARTING_SHOT); ASSUME(gMovesInfo[MOVE_BATON_PASS].effect == EFFECT_BATON_PASS); + ASSUME(gMovesInfo[MOVE_CHILLY_RECEPTION].effect == EFFECT_CHILLY_RECEPTION); AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSequenceSwitchingFlag); PLAYER(SPECIES_SWELLOW) { Level (50); } OPPONENT(SPECIES_MACHOP) { Level(1); Moves(move); } diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c index fcc8e322ca..b3927509f0 100644 --- a/test/battle/ai/ai_switching.c +++ b/test/battle/ai/ai_switching.c @@ -121,7 +121,7 @@ AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Avoid infinite loop if damage { GIVEN { ASSUME(gItemsInfo[ITEM_LEFTOVERS].holdEffect == HOLD_EFFECT_LEFTOVERS); - AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY | AI_FLAG_SMART_MON_CHOICES); PLAYER(SPECIES_MEOWTH_GALARIAN) { Level(100); Moves(MOVE_GROWL, MOVE_FAKE_OUT, MOVE_HONE_CLAWS); } // Scenario courtesy of Duke, who triggered the bug in the first place OPPONENT(SPECIES_MEOWTH_GALARIAN) { Level(5); Moves(MOVE_GROWL, MOVE_FAKE_OUT, MOVE_HONE_CLAWS); } @@ -357,3 +357,21 @@ AI_SINGLE_BATTLE_TEST("AI won't use trapping behaviour if player only has 1 mon TURN{ MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_SELF_DESTRUCT); EXPECT_SEND_OUT(opponent, 2); } } } + +AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch out if mon would be OKHO'd and they have a good switchin 50% of the time") +{ + PASSES_RANDOMLY(50, 100, RNG_AI_HASBADODDS); + GIVEN { + ASSUME(gSpeciesInfo[SPECIES_RHYDON].types[0] == TYPE_GROUND); + ASSUME(gSpeciesInfo[SPECIES_PELIPPER].types[0] == TYPE_WATER); + ASSUME(gSpeciesInfo[SPECIES_PELIPPER].types[1] == TYPE_FLYING); + ASSUME(gMovesInfo[MOVE_THUNDERBOLT].type == TYPE_ELECTRIC); + ASSUME(gMovesInfo[MOVE_EARTHQUAKE].type == TYPE_GROUND); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES); + PLAYER(SPECIES_ELECTRODE) { Moves(MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_THUNDER_SHOCK); } + OPPONENT(SPECIES_PELIPPER) { Moves(MOVE_EARTHQUAKE); }; + OPPONENT(SPECIES_RHYDON) { Moves(MOVE_EARTHQUAKE); Ability(ABILITY_ROCK_HEAD); } + } WHEN { + TURN { MOVE(player, MOVE_THUNDERBOLT) ; EXPECT_SWITCH(opponent, 1); } + } +} diff --git a/test/battle/form_change/status.c b/test/battle/form_change/status.c index 0b94202bbd..612c125497 100644 --- a/test/battle/form_change/status.c +++ b/test/battle/form_change/status.c @@ -11,12 +11,12 @@ SINGLE_BATTLE_TEST("Shaymin-Sky reverts to Shaymin-Land when frozen or frostbitt PARAMETRIZE { move = MOVE_POISON_STING; } PARAMETRIZE { move = MOVE_POISON_FANG; } - ASSUME(MoveHasAdditionalEffect(MOVE_POWDER_SNOW, MOVE_EFFECT_FREEZE_OR_FROSTBITE)); - ASSUME(MoveHasAdditionalEffect(MOVE_EMBER, MOVE_EFFECT_BURN)); - ASSUME(MoveHasAdditionalEffect(MOVE_THUNDERSHOCK, MOVE_EFFECT_PARALYSIS)); - ASSUME(MoveHasAdditionalEffect(MOVE_POISON_STING, MOVE_EFFECT_POISON)); - ASSUME(MoveHasAdditionalEffect(MOVE_POISON_FANG, MOVE_EFFECT_TOXIC)); GIVEN { + ASSUME(MoveHasAdditionalEffect(MOVE_POWDER_SNOW, MOVE_EFFECT_FREEZE_OR_FROSTBITE)); + ASSUME(MoveHasAdditionalEffect(MOVE_EMBER, MOVE_EFFECT_BURN)); + ASSUME(MoveHasAdditionalEffect(MOVE_THUNDERSHOCK, MOVE_EFFECT_PARALYSIS)); + ASSUME(MoveHasAdditionalEffect(MOVE_POISON_STING, MOVE_EFFECT_POISON)); + ASSUME(MoveHasAdditionalEffect(MOVE_POISON_FANG, MOVE_EFFECT_TOXIC)); PLAYER(SPECIES_SHAYMIN_SKY); OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/gimmick/dynamax.c b/test/battle/gimmick/dynamax.c index 56fd2e25ea..f9865f7b6c 100644 --- a/test/battle/gimmick/dynamax.c +++ b/test/battle/gimmick/dynamax.c @@ -362,21 +362,6 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon lose their substitutes") } } -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, gimmick: GIMMICK_DYNAMAX, 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) { u32 dynamax; @@ -415,6 +400,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves deal 1/4 damage through protect", s16 da } } +// This test will fail if it's the first test a thread runs SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves don't bypass Max Guard") { GIVEN { @@ -1249,7 +1235,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Replenish recycles allies' berries 50\% of t GIVEN { ASSUME(gMovesInfo[MOVE_G_MAX_REPLENISH].argument == MAX_EFFECT_RECYCLE_BERRIES); PLAYER(SPECIES_SNORLAX) { Item(ITEM_APICOT_BERRY); GigantamaxFactor(TRUE); } - PLAYER(SPECIES_MUNCHLAX) { Item(ITEM_APICOT_BERRY); } + PLAYER(SPECIES_MUNCHLAX) { Item(ITEM_APICOT_BERRY); Ability(ABILITY_THICK_FAT); } OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_APICOT_BERRY); } OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_APICOT_BERRY); } } WHEN { @@ -1478,8 +1464,8 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves don't execute effects on fainted battler SINGLE_BATTLE_TEST("(DYNAMAX) Moxie clones can be triggered by Max Moves fainting opponents") { - ASSUME(gMovesInfo[MOVE_WATERFALL].power > 0); GIVEN { + ASSUME(gMovesInfo[MOVE_WATERFALL].power > 0); PLAYER(SPECIES_GYARADOS) { Ability(ABILITY_MOXIE); } OPPONENT(SPECIES_WOBBUFFET) { HP(1); } OPPONENT(SPECIES_WYNAUT); @@ -1491,3 +1477,54 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Moxie clones can be triggered by Max Moves faintin MESSAGE("Gyarados's Moxie raised its Attack!"); } } + +// This test will fail if it's the first test a thread runs +SINGLE_BATTLE_TEST("(DYNAMAX) Max Attacks prints a message when hitting into Max Guard") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_GROWL, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); } + } SCENE { + MESSAGE("Wobbuffet used Max Guard!"); + MESSAGE("Foe Wobbuffet used Max Strike!"); + } +} + +SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves don't bypass absorbing abilities") +{ + u32 move, ability, species; + PARAMETRIZE { move = MOVE_SPARK; ability = ABILITY_VOLT_ABSORB; species = SPECIES_LANTURN; } + PARAMETRIZE { move = MOVE_WATER_GUN; ability = ABILITY_WATER_ABSORB; species = SPECIES_LANTURN; } + PARAMETRIZE { move = MOVE_EMBER; ability = ABILITY_FLASH_FIRE; species = SPECIES_HEATRAN; } + PARAMETRIZE { move = MOVE_SPARK; ability = ABILITY_LIGHTNING_ROD; species = SPECIES_PIKACHU; } + PARAMETRIZE { move = MOVE_WATER_GUN; ability = ABILITY_STORM_DRAIN; species = SPECIES_GASTRODON; } + PARAMETRIZE { move = MOVE_EMBER; ability = ABILITY_WELL_BAKED_BODY; species = SPECIES_DACHSBUN; } + PARAMETRIZE { move = MOVE_SPARK; ability = ABILITY_MOTOR_DRIVE; species = SPECIES_ELECTIVIRE; } + PARAMETRIZE { move = MOVE_WATER_GUN; ability = ABILITY_DRY_SKIN; species = SPECIES_PARASECT; } + PARAMETRIZE { move = MOVE_MUD_BOMB; ability = ABILITY_EARTH_EATER; species = SPECIES_ORTHWORM; } + PARAMETRIZE { move = MOVE_VINE_WHIP; ability = ABILITY_SAP_SIPPER; species = SPECIES_MILTANK; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_WATER_GUN].type == TYPE_WATER); + ASSUME(gMovesInfo[MOVE_SPARK].type == TYPE_ELECTRIC); + ASSUME(gMovesInfo[MOVE_EMBER].type == TYPE_FIRE); + ASSUME(gMovesInfo[MOVE_MUD_BOMB].type == TYPE_GROUND); + ASSUME(gMovesInfo[MOVE_VINE_WHIP].type == TYPE_GRASS); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(species) { Ability(ability); } + } WHEN { + TURN { MOVE(player, move, gimmick: GIMMICK_DYNAMAX); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_MAX_LIGHTNING, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MAX_FLARE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MAX_GEYSER, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MAX_QUAKE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MAX_OVERGROWTH, player); + HP_BAR(opponent); + } + ABILITY_POPUP(opponent, ability); + } +} \ No newline at end of file diff --git a/test/battle/gimmick/terastal.c b/test/battle/gimmick/terastal.c index f14c398b64..1b50bc4bcc 100644 --- a/test/battle/gimmick/terastal.c +++ b/test/battle/gimmick/terastal.c @@ -86,46 +86,6 @@ SINGLE_BATTLE_TEST("(TERA) Terastallizing into the same type gives that type 2x } } -SINGLE_BATTLE_TEST("(TERA) Terastallizing into a different type with Adaptability gives 2.0x STAB", s16 damage) -{ - bool32 tera; - PARAMETRIZE { tera = GIMMICK_NONE; } - PARAMETRIZE { tera = GIMMICK_TERA; } - GIVEN { - PLAYER(SPECIES_CRAWDAUNT) { Ability(ABILITY_ADAPTABILITY); TeraType(TYPE_NORMAL); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_HEADBUTT, gimmick: tera); } - } SCENE { - MESSAGE("Crawdaunt used Headbutt!"); - ANIMATION(ANIM_TYPE_MOVE, MOVE_HEADBUTT, player); - HP_BAR(opponent, captureDamage: &results[i].damage); - } FINALLY { - // The jump from no STAB to 2.0x STAB is a 2.0x boost. - EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage); - } -} - -SINGLE_BATTLE_TEST("(TERA) Terastallizing into the same type with Adaptability gives 2.25x STAB", s16 damage) -{ - bool32 tera; - PARAMETRIZE { tera = GIMMICK_NONE; } - PARAMETRIZE { tera = GIMMICK_TERA; } - GIVEN { - PLAYER(SPECIES_CRAWDAUNT) { Ability(ABILITY_ADAPTABILITY); TeraType(TYPE_WATER); } - OPPONENT(SPECIES_WOBBUFFET); - } WHEN { - TURN { MOVE(player, MOVE_WATER_PULSE, gimmick: tera); } - } SCENE { - MESSAGE("Crawdaunt used Water Pulse!"); - ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PULSE, player); - HP_BAR(opponent, captureDamage: &results[i].damage); - } FINALLY { - // The jump from 2x STAB to 2.25x STAB is a 1.125x boost. - EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.125), results[1].damage); - } -} - SINGLE_BATTLE_TEST("(TERA) Terastallizing boosts moves of the same type to 60 BP", s16 damage) { bool32 tera; @@ -686,7 +646,7 @@ SINGLE_BATTLE_TEST("(TERA) Protean cannot change the type of a Terastallized Pok PLAYER(SPECIES_GRENINJA) { Ability(ABILITY_PROTEAN); TeraType(TYPE_GRASS); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(player, MOVE_BUBBLE, gimmick: GIMMICK_TERA); + TURN { MOVE(player, MOVE_BUBBLE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_EMBER); } } SCENE { MESSAGE("Greninja used Bubble!"); diff --git a/test/battle/gimmick/zmove.c b/test/battle/gimmick/zmove.c index bde241bfd7..51c6516106 100644 --- a/test/battle/gimmick/zmove.c +++ b/test/battle/gimmick/zmove.c @@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("(Z-MOVE) Z-Moves do not retain priority") PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(opponent, MOVE_TACKLE); + TURN { MOVE(opponent, MOVE_TACKLE); MOVE(player, MOVE_QUICK_ATTACK, gimmick: GIMMICK_Z_MOVE); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); @@ -597,5 +597,24 @@ SINGLE_BATTLE_TEST("(Z-MOVE) Searing Sunraze Smash ignores the target's abilitie ANIMATION(ANIM_TYPE_MOVE, MOVE_SEARING_SUNRAZE_SMASH, player); HP_BAR(opponent); MESSAGE("A critical hit!"); - } + } +} + +SINGLE_BATTLE_TEST("(Z-MOVE) Z-Revelation Dance always transforms into Breakneck Blitz") +{ + u16 species; + PARAMETRIZE { species = SPECIES_ORICORIO_BAILE; } + PARAMETRIZE { species = SPECIES_ORICORIO_PAU; } + PARAMETRIZE { species = SPECIES_ORICORIO_POM_POM; } + PARAMETRIZE { species = SPECIES_ORICORIO_SENSU; } + GIVEN { + ASSUME(gMovesInfo[MOVE_REVELATION_DANCE].type == TYPE_NORMAL); + PLAYER(species) { Item(ITEM_NORMALIUM_Z); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_REVELATION_DANCE, gimmick: GIMMICK_Z_MOVE); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, player); + } } diff --git a/test/battle/hold_effect/ability_shield.c b/test/battle/hold_effect/ability_shield.c index ee84b2c5e0..e10c3e0887 100644 --- a/test/battle/hold_effect/ability_shield.c +++ b/test/battle/hold_effect/ability_shield.c @@ -69,7 +69,7 @@ SINGLE_BATTLE_TEST("Ability Shield protects against Mycelium Might") } WHEN { TURN { MOVE(opponent, MOVE_SPORE); MOVE(player, MOVE_SPORE); } } SCENE { - + if (item == ITEM_ABILITY_SHIELD) { NONE_OF { ANIMATION(ANIM_TYPE_MOVE, MOVE_SPORE, opponent); diff --git a/test/battle/ability/booster_energy.c b/test/battle/hold_effect/booster_energy.c similarity index 100% rename from test/battle/ability/booster_energy.c rename to test/battle/hold_effect/booster_energy.c diff --git a/test/battle/hold_effect/red_card.c b/test/battle/hold_effect/red_card.c index 138e3a3692..ad2f77861f 100644 --- a/test/battle/hold_effect/red_card.c +++ b/test/battle/hold_effect/red_card.c @@ -468,4 +468,4 @@ SINGLE_BATTLE_TEST("Red Card does not activate if holder is switched in mid-turn } } -// SINGLE_BATTLE_TEST("Red Card activates but fails if the attacker has Dynamaxed") +TO_DO_BATTLE_TEST("Red Card activates but fails if the attacker has Dynamaxed"); diff --git a/test/battle/hold_effect/restore_hp.c b/test/battle/hold_effect/restore_hp.c new file mode 100644 index 0000000000..09daecc860 --- /dev/null +++ b/test/battle/hold_effect/restore_hp.c @@ -0,0 +1,29 @@ +#include "global.h" +#include "test/battle.h" + +DOUBLE_BATTLE_TEST("Restore HP Item effects do not miss timing") +{ + u16 item; + + PARAMETRIZE { item = ITEM_BERRY_JUICE; } + PARAMETRIZE { item = ITEM_ORAN_BERRY; } + PARAMETRIZE { item = ITEM_SITRUS_BERRY; } + + GIVEN { + ASSUME(gItemsInfo[ITEM_ORAN_BERRY].holdEffect == HOLD_EFFECT_RESTORE_HP); + ASSUME(gItemsInfo[ITEM_BERRY_JUICE].holdEffect == HOLD_EFFECT_RESTORE_HP); + ASSUME(gItemsInfo[ITEM_SITRUS_BERRY].holdEffect == HOLD_EFFECT_RESTORE_PCT_HP); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT) { MaxHP(100); HP(51); Item(item); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_FIRE_PLEDGE, target: opponentRight); MOVE(playerRight, MOVE_GRASS_PLEDGE, target: opponentRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); + MESSAGE("A sea of fire enveloped the opposing team!"); + MESSAGE("The opposing Foe Wynaut was hurt by the sea of fire!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft); + MESSAGE("The opposing Foe Wobbuffet was hurt by the sea of fire!"); + } +} diff --git a/test/battle/hold_effect/speed_up.c b/test/battle/hold_effect/speed_up.c index 438ff0d3cc..c6ddc19d8d 100644 --- a/test/battle/hold_effect/speed_up.c +++ b/test/battle/hold_effect/speed_up.c @@ -68,3 +68,22 @@ SINGLE_BATTLE_TEST("Salac Berry raises Speed by one stage when HP drops to 1/4 o EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 2); } } + +DOUBLE_BATTLE_TEST("Salac Berry does not miss timing miss timing") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT) { MaxHP(100); HP(26); Item(ITEM_SALAC_BERRY); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_FIRE_PLEDGE, target: opponentRight); MOVE(playerRight, MOVE_GRASS_PLEDGE, target: opponentRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); + MESSAGE("A sea of fire enveloped the opposing team!"); + MESSAGE("The opposing Foe Wynaut was hurt by the sea of fire!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft); + MESSAGE("Using Salac Berry, the Speed of Foe Wynaut rose!"); + MESSAGE("The opposing Foe Wobbuffet was hurt by the sea of fire!"); + } +} diff --git a/test/battle/hold_effect/utility_umbrella.c b/test/battle/hold_effect/utility_umbrella.c index e02a4fdef3..f04a773789 100644 --- a/test/battle/hold_effect/utility_umbrella.c +++ b/test/battle/hold_effect/utility_umbrella.c @@ -52,3 +52,5 @@ SINGLE_BATTLE_TEST("Utility Umbrella blocks Rain damage modifiers", s16 damage) EXPECT_MUL_EQ(results[2].damage, Q_4_12(1.5), results[3].damage); } } + +// Moves and abilities affected by Utility Umbrella have their tests in the respective files diff --git a/test/battle/move.c b/test/battle/move.c index 228a09a7c6..655895da77 100644 --- a/test/battle/move.c +++ b/test/battle/move.c @@ -80,65 +80,65 @@ SINGLE_BATTLE_TEST("Turn order is determined randomly if priority and Speed tie } } -DOUBLE_BATTLE_TEST("Turn order is determined randomly if priority and Speed tie [doubles]") +DOUBLE_BATTLE_TEST("Turn order is determined randomly if priority and Speed tie [doubles]", u32 permutations) { - struct BattlePokemon *order[4] = { NULL, NULL, NULL, NULL }; - u32 a, b, c, d; - - // TODO: Test all of these in a single PASSES_RANDOMLY pass rather - // than 24 PARAMETRIZEd passes. - PARAMETRIZE { a = 0; b = 1; c = 2; d = 3; } - PARAMETRIZE { a = 0; b = 1; c = 3; d = 2; } - PARAMETRIZE { a = 0; b = 2; c = 1; d = 3; } - PARAMETRIZE { a = 0; b = 2; c = 3; d = 1; } - PARAMETRIZE { a = 0; b = 3; c = 1; d = 2; } - PARAMETRIZE { a = 0; b = 3; c = 2; d = 1; } - PARAMETRIZE { a = 1; b = 0; c = 2; d = 3; } - PARAMETRIZE { a = 1; b = 0; c = 3; d = 2; } - PARAMETRIZE { a = 1; b = 2; c = 0; d = 3; } - PARAMETRIZE { a = 1; b = 2; c = 3; d = 0; } - PARAMETRIZE { a = 1; b = 3; c = 0; d = 2; } - PARAMETRIZE { a = 1; b = 3; c = 2; d = 0; } - PARAMETRIZE { a = 2; b = 0; c = 1; d = 3; } - PARAMETRIZE { a = 2; b = 0; c = 3; d = 1; } - PARAMETRIZE { a = 2; b = 1; c = 0; d = 3; } - PARAMETRIZE { a = 2; b = 1; c = 3; d = 0; } - PARAMETRIZE { a = 2; b = 3; c = 0; d = 1; } - PARAMETRIZE { a = 2; b = 3; c = 1; d = 0; } - PARAMETRIZE { a = 3; b = 0; c = 1; d = 2; } - PARAMETRIZE { a = 3; b = 0; c = 2; d = 1; } - PARAMETRIZE { a = 3; b = 1; c = 0; d = 2; } - PARAMETRIZE { a = 3; b = 1; c = 2; d = 0; } - PARAMETRIZE { a = 3; b = 2; c = 0; d = 1; } - PARAMETRIZE { a = 3; b = 2; c = 1; d = 0; } - - order[a] = playerLeft; - order[b] = playerRight; - order[c] = opponentLeft; - order[d] = opponentRight; - - PASSES_RANDOMLY(1, 24, RNG_SPEED_TIE); + PARAMETRIZE {} // Hack to make permutations legal. + PASSES_RANDOMLY(24, 24, RNG_SPEED_TIE); GIVEN { - PLAYER(SPECIES_WOBBUFFET) { Speed(1); } + ASSUME(gMovesInfo[MOVE_ENDEAVOR].effect == EFFECT_ENDEAVOR); + ASSUME(gMovesInfo[MOVE_LIFE_DEW].effect == EFFECT_JUNGLE_HEALING); + ASSUME(gMovesInfo[MOVE_CRUSH_GRIP].effect == EFFECT_VARY_POWER_BASED_ON_HP); + ASSUME(gMovesInfo[MOVE_SUPER_FANG].effect == EFFECT_SUPER_FANG); + PLAYER(SPECIES_WOBBUFFET) { MaxHP(480); HP(360); Defense(100); Speed(1); } PLAYER(SPECIES_WYNAUT) { Speed(1); } - OPPONENT(SPECIES_WOBBUFFET) { Speed(1); } + OPPONENT(SPECIES_WOBBUFFET) { Attack(100); Speed(1); } OPPONENT(SPECIES_WYNAUT) { Speed(1); } } WHEN { - TURN { MOVE(playerLeft, MOVE_SPLASH); MOVE(playerRight, MOVE_SPLASH); MOVE(opponentLeft, MOVE_SPLASH); MOVE(opponentRight, MOVE_SPLASH); } - } SCENE { - ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, order[0]); - ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, order[1]); - ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, order[2]); - ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, order[3]); + TURN { MOVE(playerLeft, MOVE_ENDEAVOR, target: opponentLeft); MOVE(playerRight, MOVE_LIFE_DEW); MOVE(opponentLeft, MOVE_CRUSH_GRIP, target: playerLeft, WITH_RNG(RNG_DAMAGE_MODIFIER, 0)); MOVE(opponentRight, MOVE_SUPER_FANG, target: playerLeft); } + } THEN { + // This tests for unique combinatins of HP values depending on which order the moves are executed in + // The unique outcomes arise from the specific attacks and HP, Def, and Atk values chosen + // The switch is then set up in such a way that the only way for this test to pass exactly one is for each HP combination to occur exactly once +#define HP_PAIR(a, b) ((a) * 1000 + (b)) + switch (HP_PAIR(playerLeft->hp, opponentLeft->hp)) + { + case HP_PAIR(188, 360): results[i].permutations += 1 << 0; break; + case HP_PAIR(189, 360): results[i].permutations += 1 << 1; break; + case HP_PAIR(261, 360): results[i].permutations += 1 << 2; break; + case HP_PAIR(235, 360): results[i].permutations += 1 << 3; break; + case HP_PAIR(262, 360): results[i].permutations += 1 << 4; break; + case HP_PAIR(202, 360): results[i].permutations += 1 << 5; break; + case HP_PAIR(189, 378): results[i].permutations += 1 << 6; break; + case HP_PAIR(189, 189): results[i].permutations += 1 << 7; break; + case HP_PAIR(189, 480): results[i].permutations += 1 << 8; break; + case HP_PAIR(188, 480): results[i].permutations += 1 << 9; break; + case HP_PAIR(188, 240): results[i].permutations += 1 << 10; break; + case HP_PAIR(188, 188): results[i].permutations += 1 << 11; break; + case HP_PAIR(262, 262): results[i].permutations += 1 << 12; break; + case HP_PAIR(262, 142): results[i].permutations += 1 << 13; break; + case HP_PAIR(202, 403): results[i].permutations += 1 << 14; break; + case HP_PAIR(202, 202): results[i].permutations += 1 << 15; break; + case HP_PAIR(262, 283): results[i].permutations += 1 << 16; break; + case HP_PAIR(202, 283): results[i].permutations += 1 << 17; break; + case HP_PAIR(235, 180): results[i].permutations += 1 << 18; break; + case HP_PAIR(261, 180): results[i].permutations += 1 << 19; break; + case HP_PAIR(235, 235): results[i].permutations += 1 << 20; break; + case HP_PAIR(235, 300): results[i].permutations += 1 << 21; break; + case HP_PAIR(261, 141): results[i].permutations += 1 << 22; break; + case HP_PAIR(261, 261): results[i].permutations += 1 << 23; break; + } +#undef HP_PAIR + } FINALLY { + EXPECT_EQ(results[i].permutations, (1 << 24) - 1); } } SINGLE_BATTLE_TEST("Critical hits occur at a 1/24 rate") { - ASSUME(B_CRIT_CHANCE >= GEN_7); PASSES_RANDOMLY(1, 24, RNG_CRITICAL_HIT); GIVEN { + ASSUME(B_CRIT_CHANCE >= GEN_7); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { @@ -150,10 +150,10 @@ SINGLE_BATTLE_TEST("Critical hits occur at a 1/24 rate") SINGLE_BATTLE_TEST("Slash's critical hits occur at a 1/8 rate") { - ASSUME(B_CRIT_CHANCE >= GEN_7); - ASSUME(gMovesInfo[MOVE_SLASH].criticalHitStage == 1); PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT); GIVEN { + ASSUME(B_CRIT_CHANCE >= GEN_7); + ASSUME(gMovesInfo[MOVE_SLASH].criticalHitStage == 1); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effect/absorb.c b/test/battle/move_effect/absorb.c index b0140a7a65..698ea41091 100644 --- a/test/battle/move_effect/absorb.c +++ b/test/battle/move_effect/absorb.c @@ -26,8 +26,8 @@ SINGLE_BATTLE_TEST("Absorb recovers 50% of the damage dealt") SINGLE_BATTLE_TEST("Absorb fails if Heal Block applies") { - ASSUME(B_HEAL_BLOCKING >= GEN_6); GIVEN { + ASSUME(B_HEAL_BLOCKING >= GEN_6); PLAYER(SPECIES_WOBBUFFET) { HP(1); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effect/accuracy_down.c b/test/battle/move_effect/accuracy_down.c index a4a8ad49bf..8a015c4a67 100644 --- a/test/battle/move_effect/accuracy_down.c +++ b/test/battle/move_effect/accuracy_down.c @@ -8,9 +8,9 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Sand Attack lowers Accuracy by 1 stage") { - ASSUME(gMovesInfo[MOVE_SCRATCH].accuracy == 100); PASSES_RANDOMLY(gMovesInfo[MOVE_SCRATCH].accuracy * 3 / 4, 100, RNG_ACCURACY); GIVEN { + ASSUME(gMovesInfo[MOVE_SCRATCH].accuracy == 100); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effect/calm_mind.c b/test/battle/move_effect/calm_mind.c new file mode 100644 index 0000000000..66c16361f4 --- /dev/null +++ b/test/battle/move_effect/calm_mind.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Calm Mind increases the user's Sp. Attack and Sp. Defense by 1 stage each"); diff --git a/test/battle/move_effect/camouflage.c b/test/battle/move_effect/camouflage.c new file mode 100644 index 0000000000..a8728e3117 --- /dev/null +++ b/test/battle/move_effect/camouflage.c @@ -0,0 +1,8 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Camouflage changes the type of the user based on battle environment"); +TO_DO_BATTLE_TEST("Camouflage changes the type of the user to Grass if Grassy Terrain is active"); +TO_DO_BATTLE_TEST("Camouflage changes the type of the user to Electric if Electric Terrain is active"); +TO_DO_BATTLE_TEST("Camouflage changes the type of the user to Psychic if Psychic Terrain is active"); +TO_DO_BATTLE_TEST("Camouflage changes the type of the user to Fairy if Misty Terrain is active"); diff --git a/test/battle/move_effect/captivate.c b/test/battle/move_effect/captivate.c new file mode 100644 index 0000000000..0da58983c7 --- /dev/null +++ b/test/battle/move_effect/captivate.c @@ -0,0 +1,7 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Captivate decreases the target's Sp. Attack if they're opposite gender from the user"); +TO_DO_BATTLE_TEST("Captivate fails if the target and user share gender"); +TO_DO_BATTLE_TEST("Captivate fails if the target is genderless"); +TO_DO_BATTLE_TEST("Captivate fails if the user is genderless"); diff --git a/test/battle/move_effect/change_type_on_item.c b/test/battle/move_effect/change_type_on_item.c index 0bd181cf61..6365215a42 100644 --- a/test/battle/move_effect/change_type_on_item.c +++ b/test/battle/move_effect/change_type_on_item.c @@ -7,8 +7,7 @@ ASSUMPTIONS ASSUME(gMovesInfo[MOVE_TECHNO_BLAST].argument == HOLD_EFFECT_DRIVE); } - -SINGLE_BATTLE_TEST("Techno Blast changes the move type depending on the mask the user holds") +SINGLE_BATTLE_TEST("Techno Blast changes type depending on the drive the user holds") { u16 species; u16 item; @@ -29,3 +28,6 @@ SINGLE_BATTLE_TEST("Techno Blast changes the move type depending on the mask the MESSAGE("It's super effective!"); } } + +TO_DO_BATTLE_TEST("Judgement changes type depending on the plate the user holds"); +TO_DO_BATTLE_TEST("Multi Attack changes type depending on the memory the user holds"); diff --git a/test/battle/move_effect/charge.c b/test/battle/move_effect/charge.c new file mode 100644 index 0000000000..f95a137993 --- /dev/null +++ b/test/battle/move_effect/charge.c @@ -0,0 +1,167 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_THUNDERBOLT].power != 0); + ASSUME(gMovesInfo[MOVE_THUNDERBOLT].type == TYPE_ELECTRIC); +} + +SINGLE_BATTLE_TEST("Charge doubles the damage of the next Electric move of the user") +{ + s16 normalDamage = 0; + s16 chargedUpDamage = 0; + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_THUNDERBOLT); } + TURN { MOVE(player, MOVE_CHARGE); } + TURN { MOVE(player, MOVE_THUNDERBOLT); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); + HP_BAR(opponent, captureDamage: &normalDamage); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CHARGE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); + HP_BAR(opponent, captureDamage: &chargedUpDamage); + } THEN { + EXPECT_MUL_EQ(normalDamage, Q_4_12(2.0), chargedUpDamage); + } +} + +SINGLE_BATTLE_TEST("Charge's effect is kept until the user uses an Electric move (Gen 9+)") +{ + s16 normalDamage = 0; + s16 chargedUpDamage = 0; + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_THUNDERBOLT); } + TURN { MOVE(player, MOVE_CHARGE); } + TURN { MOVE(player, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_THUNDERBOLT); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); + HP_BAR(opponent, captureDamage: &normalDamage); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CHARGE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); + HP_BAR(opponent, captureDamage: &chargedUpDamage); + } THEN { + EXPECT_MUL_EQ(normalDamage, Q_4_12(2.0), chargedUpDamage); + } +} + +SINGLE_BATTLE_TEST("Charge's effect is removed if the user fails using an Electric move (Gen 9+)") +{ + s16 damage[2]; + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_THUNDER); } + TURN { MOVE(player, MOVE_CHARGE); } + TURN { MOVE(player, MOVE_THUNDER, hit: FALSE); } + TURN { MOVE(player, MOVE_THUNDER); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER, player); + HP_BAR(opponent, captureDamage: &damage[0]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CHARGE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER, player); + HP_BAR(opponent, captureDamage: &damage[1]); + } THEN { + EXPECT_EQ(damage[0], damage[1]); + } +} + +SINGLE_BATTLE_TEST("Charge's effect does not stack with Electromorphosis or Wind Power") +{ + u32 species, ability; + s16 normalDamage = 0; + s16 chargedUpDamage = 0; + + PARAMETRIZE { species = SPECIES_WATTREL; ability = ABILITY_WIND_POWER; } + PARAMETRIZE { species = SPECIES_TADBULB; ability = ABILITY_ELECTROMORPHOSIS; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_AIR_CUTTER].windMove == TRUE); + PLAYER(species) { Ability(ability); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_THUNDERBOLT); } + TURN { MOVE(player, MOVE_CHARGE); MOVE(opponent, MOVE_AIR_CUTTER); } + TURN { MOVE(player, MOVE_THUNDERBOLT); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); + HP_BAR(opponent, captureDamage: &normalDamage); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CHARGE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_AIR_CUTTER, opponent); + ABILITY_POPUP(player, ability); + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); + HP_BAR(opponent, captureDamage: &chargedUpDamage); + } THEN { + EXPECT_MUL_EQ(normalDamage, Q_4_12(2.0), chargedUpDamage); + } +} + +SINGLE_BATTLE_TEST("Charge's effect is removed regardless if the next move is Electric or not (Gen 3-8)") +{ + s16 normalDamage = 0; + s16 chargedUpDamage = 0; + + GIVEN { + ASSUME(gMovesInfo[MOVE_TACKLE].type != TYPE_ELECTRIC); + ASSUME(gMovesInfo[MOVE_TACKLE].power != 0); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_THUNDERBOLT); } + TURN { MOVE(player, MOVE_CHARGE); } + TURN { MOVE(player, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_THUNDERBOLT); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); + HP_BAR(opponent, captureDamage: &normalDamage); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CHARGE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); + HP_BAR(opponent, captureDamage: &chargedUpDamage); + } THEN { + if (B_CHARGE < GEN_9) + EXPECT_EQ(normalDamage, chargedUpDamage); + else + EXPECT_MUL_EQ(normalDamage, Q_4_12(2.0), chargedUpDamage); + } +} + +SINGLE_BATTLE_TEST("Charge will not expire if it flinches twice in a row") +{ + s16 normalDamage = 0; + s16 chargedUpDamage = 0; + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LUM_BERRY); } + } WHEN { + TURN { MOVE(player, MOVE_THUNDERBOLT); } + TURN { MOVE(player, MOVE_CHARGE); } + TURN { MOVE(opponent, MOVE_IRON_HEAD); MOVE(player, MOVE_THUNDERBOLT); } + TURN { MOVE(opponent, MOVE_IRON_HEAD); MOVE(player, MOVE_THUNDERBOLT); } + TURN { MOVE(player, MOVE_THUNDERBOLT); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); + HP_BAR(opponent, captureDamage: &normalDamage); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CHARGE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDERBOLT, player); + HP_BAR(opponent, captureDamage: &chargedUpDamage); + } THEN { + if (B_CHARGE < GEN_9) + EXPECT_EQ(normalDamage, chargedUpDamage); + else + EXPECT_MUL_EQ(normalDamage, Q_4_12(2.0), chargedUpDamage); + } +} diff --git a/test/battle/move_effect/chilly_reception.c b/test/battle/move_effect/chilly_reception.c index f2c50b8444..8b64a30f28 100644 --- a/test/battle/move_effect/chilly_reception.c +++ b/test/battle/move_effect/chilly_reception.c @@ -18,7 +18,7 @@ SINGLE_BATTLE_TEST("Chilly Reception sets up snow and switches the user out") MESSAGE("Slowking is preparing to tell a chillingly bad joke!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CHILLY_RECEPTION, player); MESSAGE("It started to snow!"); - MESSAGE("Slowking went back to 1"); + MESSAGE("Slowking went back to 1!"); SEND_IN_MESSAGE("Slowpoke"); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SNOW_CONTINUES); } @@ -36,7 +36,7 @@ SINGLE_BATTLE_TEST("Chilly Reception switches the user out, even if the weather MESSAGE("Slowking is preparing to tell a chillingly bad joke!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CHILLY_RECEPTION, player); MESSAGE("There is no relief from this heavy rain!"); - MESSAGE("Slowking went back to 1"); + MESSAGE("Slowking went back to 1!"); SEND_IN_MESSAGE("Slowpoke"); MESSAGE("Rain continues to fall."); } @@ -53,7 +53,7 @@ SINGLE_BATTLE_TEST("Chilly Reception does not switch the user out if no replacem MESSAGE("Slowking is preparing to tell a chillingly bad joke!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CHILLY_RECEPTION, player); MESSAGE("It started to snow!"); - NOT MESSAGE("Slowking went back to 1"); + NOT MESSAGE("Slowking went back to 1!"); } } @@ -69,7 +69,7 @@ SINGLE_BATTLE_TEST("Chilly Reception does not switch the user out if replacement MESSAGE("Slowking is preparing to tell a chillingly bad joke!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CHILLY_RECEPTION, player); MESSAGE("It started to snow!"); - NOT MESSAGE("Slowking went back to 1"); + NOT MESSAGE("Slowking went back to 1!"); } } @@ -84,7 +84,8 @@ SINGLE_BATTLE_TEST("Chilly Reception changes the weather, even if the user canno MESSAGE("Slowking is preparing to tell a chillingly bad joke!"); ANIMATION(ANIM_TYPE_MOVE, MOVE_CHILLY_RECEPTION, player); MESSAGE("It started to snow!"); - NOT MESSAGE("Slowking went back to 1"); + NOT MESSAGE("Slowking went back to 1!"); } } +TO_DO_BATTLE_TEST("Chilly Reception doesn't announce its move if it's called by a different move"); diff --git a/test/battle/move_effect/clangorous_soul.c b/test/battle/move_effect/clangorous_soul.c new file mode 100644 index 0000000000..17e57d7dd5 --- /dev/null +++ b/test/battle/move_effect/clangorous_soul.c @@ -0,0 +1,11 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Clangorous Soul raises the user's Attack by 1 stage"); +TO_DO_BATTLE_TEST("Clangorous Soul raises the user's Defense by 1 stage"); +TO_DO_BATTLE_TEST("Clangorous Soul raises the user's Sp. Attack by 1 stage"); +TO_DO_BATTLE_TEST("Clangorous Soul raises the user's Sp. Defense by 1 stage"); +TO_DO_BATTLE_TEST("Clangorous Soul raises the user's Speed by 1 stage"); +TO_DO_BATTLE_TEST("Clangorous Soul cuts the user's HP by 1/3"); +TO_DO_BATTLE_TEST("Clangorous Soul fails if Attack, Defense, Sp. Attack, Sp. Defense and Speed are all maxed out"); +TO_DO_BATTLE_TEST("Clangorous Soul fails if the user's HP is less or equal than 1/3"); diff --git a/test/battle/move_effect/coaching.c b/test/battle/move_effect/coaching.c new file mode 100644 index 0000000000..2f50aceab5 --- /dev/null +++ b/test/battle/move_effect/coaching.c @@ -0,0 +1,8 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Coaching raises Attack and Defense of ally by 1 stage each"); +TO_DO_BATTLE_TEST("Coaching doesn't raise stats of the user"); +TO_DO_BATTLE_TEST("Coaching bypasses protection of allies"); +TO_DO_BATTLE_TEST("Coaching fails in single battles"); +TO_DO_BATTLE_TEST("Coaching fails if there's no ally"); diff --git a/test/battle/move_effect/coil.c b/test/battle/move_effect/coil.c new file mode 100644 index 0000000000..ce9e8629a8 --- /dev/null +++ b/test/battle/move_effect/coil.c @@ -0,0 +1,6 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Coil raises the user's Attack by 1 stage"); +TO_DO_BATTLE_TEST("Coil raises the user's Defense by 1 stage"); +TO_DO_BATTLE_TEST("Coil raises the user's Accuracy by 1 stage"); diff --git a/test/battle/move_effect/conversion.c b/test/battle/move_effect/conversion.c new file mode 100644 index 0000000000..ac863cf2b2 --- /dev/null +++ b/test/battle/move_effect/conversion.c @@ -0,0 +1,10 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Conversion changes the user's types to the target's current types (Gen 1)"); +TO_DO_BATTLE_TEST("Conversion changes the user's types randomly to one of the user's move (Gen 2-5)"); +TO_DO_BATTLE_TEST("Conversion ignores moves that share types with the user (Gen 2-5)"); +TO_DO_BATTLE_TEST("Conversion fails if all the user's moves share types with the user (Gen 2-5)"); +TO_DO_BATTLE_TEST("Conversion changes the user's types to the one in the user's first slot (Gen 6+)"); +TO_DO_BATTLE_TEST("Conversion can read the user's first move slot even if that move cannot be selected (Gen 6+)"); //Eg. Disable +TO_DO_BATTLE_TEST("Conversion can change the user's types to Conversion's type"); diff --git a/test/battle/move_effect/conversion_2.c b/test/battle/move_effect/conversion_2.c new file mode 100644 index 0000000000..2e81212ef1 --- /dev/null +++ b/test/battle/move_effect/conversion_2.c @@ -0,0 +1,14 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Conversion 2 randomly changes the type of the user to a type that resists the last move that hit the user (Gen 3-4)"); +TO_DO_BATTLE_TEST("Conversion 2 randomly changes the type of the user to a type that resists the last move used by the target (Gen 5+)"); +TO_DO_BATTLE_TEST("Conversion 2's type change considers the type of moves called by other moves"); +TO_DO_BATTLE_TEST("Conversion 2's type change considers dynamic type moves"); // Eg. Weather Ball +TO_DO_BATTLE_TEST("Conversion 2's type change considers move types changed by Normalize and Electrify"); +TO_DO_BATTLE_TEST("Conversion 2's type change considers move types changed by Normalize"); +TO_DO_BATTLE_TEST("Conversion 2's type change considers Struggle to be Normal type (Gen 3-4)"); +TO_DO_BATTLE_TEST("Conversion 2 fails if the move used is of typeless damage (Gen 5+)"); +TO_DO_BATTLE_TEST("Conversion 2's type change considers status moves (Gen 5+)"); +TO_DO_BATTLE_TEST("Conversion 2's type change considers Inverse Battles"); +TO_DO_BATTLE_TEST("Conversion 2 fails if the move used is Stellar Type"); diff --git a/test/battle/move_effect/copycat.c b/test/battle/move_effect/copycat.c new file mode 100644 index 0000000000..cdc164cd0f --- /dev/null +++ b/test/battle/move_effect/copycat.c @@ -0,0 +1,37 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Copycat causes the user to use the last move used in battle"); +TO_DO_BATTLE_TEST("Copycat can call the user's last move used if it was the last move used in battle"); +TO_DO_BATTLE_TEST("Copycat fails if no move has been made"); +TO_DO_BATTLE_TEST("Copycat chooses a target at random if the copied move wasn't the user's"); +TO_DO_BATTLE_TEST("Copycat can copy moves regardless if they failed or not"); //Has "X used move!" +TO_DO_BATTLE_TEST("Copycat fails if the last move used is a Z-Move"); + +// Gen 4 +TO_DO_BATTLE_TEST("Copycat can only copy charging moves after it has been executed (Gen 4)"); +TO_DO_BATTLE_TEST("Copycat can only copy recharging moves after it has been executed (Gen 4)"); +TO_DO_BATTLE_TEST("Copycat cannot copy Bide's final turn (Gen 4)"); +TO_DO_BATTLE_TEST("Copycat copies other calling moves instead of the move they called (Gen 4)"); +TO_DO_BATTLE_TEST("Copycat copies moves called by other calling moves instead of the calling move if they are executed in a second turn (Gen 5+)"); //Eg. Dig + +// Gen 5+ +TO_DO_BATTLE_TEST("Copycat can copy charging moves in both the charging and the executing turn (Gen 5+)"); +TO_DO_BATTLE_TEST("Copycat ignores the recharging turn of recharging moves (Gen 5+)"); +TO_DO_BATTLE_TEST("Copycat can copy Bide on all turns"); +TO_DO_BATTLE_TEST("Copycat copies moves called by other calling moves instead of the calling move (Gen 5+)"); + +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, gimmick: GIMMICK_DYNAMAX, target: opponentLeft); MOVE(playerRight, MOVE_COPYCAT, target: opponentLeft); } + } SCENE { + MESSAGE("Wobbuffet used Max Guard!"); + MESSAGE("Wynaut used Trick Room!"); + } +} diff --git a/test/battle/move_effect/corrosive_gas.c b/test/battle/move_effect/corrosive_gas.c index 714702703a..f6a9c738e4 100644 --- a/test/battle/move_effect/corrosive_gas.c +++ b/test/battle/move_effect/corrosive_gas.c @@ -117,3 +117,6 @@ DOUBLE_BATTLE_TEST("Corrosive Gas destroys foes and ally's items if they have on EXPECT_EQ(opponentRight->item, ITEM_NONE); } } + +TO_DO_BATTLE_TEST("Corrosive Gas doesn't destroy the item of a Pokemon behind a Substitute"); +TO_DO_BATTLE_TEST("Corrosive Gas doesn't destroy items if they change the Pokémon's form"); // Giratina, Genesect, Silvally, Zacian, Zamazenta. Bulbapedia hasn't confirmed Arceus or Ogerpon, but it's a safe assumption that they will also fail. diff --git a/test/battle/move_effect/cosmic_power.c b/test/battle/move_effect/cosmic_power.c new file mode 100644 index 0000000000..8680e9f28e --- /dev/null +++ b/test/battle/move_effect/cosmic_power.c @@ -0,0 +1,4 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Cosmic Power increases the user's Defense and Sp. Defense by 1 stage each"); diff --git a/test/battle/move_effect/counter.c b/test/battle/move_effect/counter.c new file mode 100644 index 0000000000..f4d3a78114 --- /dev/null +++ b/test/battle/move_effect/counter.c @@ -0,0 +1,22 @@ +#include "global.h" +#include "test/battle.h" + +TO_DO_BATTLE_TEST("Counter will do twice as much damage received from the opponent"); +TO_DO_BATTLE_TEST("Counter cannot affect ally Pokémon"); +TO_DO_BATTLE_TEST("Counter hits the last opponent that hit the user"); //Doubles + +// Gen 1 +TO_DO_BATTLE_TEST("Counter can only counter Normal and Fighting-type moves (Gen 1)"); +TO_DO_BATTLE_TEST("Counter can hit ghost-type Pokémon (Gen 1)"); +TO_DO_BATTLE_TEST("Counter can return damage dealt to a substitute (Gen 1)"); + +// Gen 2-3 +TO_DO_BATTLE_TEST("Counter can counter Hidden Power regardless of type (Gen 2-3)"); + +// Gen 2+ +TO_DO_BATTLE_TEST("Counter can only counter physical moves (Gen 2+)"); +TO_DO_BATTLE_TEST("Counter cannot hit ghost-type Pokémon (Gen 2+)"); +TO_DO_BATTLE_TEST("Counter cannot return damage dealt to a substitute (Gen 2+)"); + +// Triple Battles required to test +//TO_DO_BATTLE_TEST("Counter can hit non-adjacent opponents if they were the last Pokémon to hit the user"); diff --git a/test/battle/move_effect/court_change.c b/test/battle/move_effect/court_change.c index a5e3e05619..b9be19db7f 100644 --- a/test/battle/move_effect/court_change.c +++ b/test/battle/move_effect/court_change.c @@ -78,7 +78,7 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the player") } } -DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Lucky Chant, Reflect, Light Screen, Tailwind") +DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Aurora Veil, Reflect, Light Screen, Tailwind") { GIVEN { PLAYER(SPECIES_WYNAUT); @@ -88,8 +88,8 @@ DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Lucky OPPONENT(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { - TURN { MOVE(opponentLeft, MOVE_MIST); MOVE(opponentRight, MOVE_SAFEGUARD); } - TURN { MOVE(opponentLeft, MOVE_LUCKY_CHANT); MOVE(opponentRight, MOVE_REFLECT); } + TURN { MOVE(playerLeft, MOVE_SNOWSCAPE); MOVE(opponentLeft, MOVE_MIST); MOVE(opponentRight, MOVE_SAFEGUARD); } + TURN { MOVE(opponentLeft, MOVE_AURORA_VEIL); MOVE(opponentRight, MOVE_REFLECT); } TURN { MOVE(opponentLeft, MOVE_LIGHT_SCREEN); MOVE(opponentRight, MOVE_TAILWIND); } TURN { MOVE(playerLeft, MOVE_COURT_CHANGE); } TURN { } @@ -97,9 +97,10 @@ DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Lucky TURN { } TURN { } } SCENE { + MESSAGE("Wynaut used Snowscape!"); MESSAGE("Foe Wobbuffet used Mist!"); MESSAGE("Foe Wobbuffet used Safeguard!"); - MESSAGE("Foe Wobbuffet used Lucky Chant!"); + MESSAGE("Foe Wobbuffet used Aurora Veil!"); MESSAGE("Foe Wobbuffet used Reflect!"); MESSAGE("Foe Wobbuffet used Light Screen!"); MESSAGE("Foe Wobbuffet used Tailwind!"); @@ -109,13 +110,13 @@ DOUBLE_BATTLE_TEST("Court Change used by the player swaps Mist, Safeguard, Lucky MESSAGE("Ally's Mist wore off!"); MESSAGE("Ally's party is no longer protected by Safeguard!"); MESSAGE("Ally's Reflect wore off!"); - MESSAGE("Your team's Lucky Chant wore off!"); + MESSAGE("Ally's Aurora Veil wore off!"); MESSAGE("Your team's tailwind petered out!"); MESSAGE("Ally's Light Screen wore off!"); } } -DOUBLE_BATTLE_TEST("Court Change used by the opponent swaps Mist, Safeguard, Lucky Chant, Reflect, Light Screen, Tailwind") +DOUBLE_BATTLE_TEST("Court Change used by the opponent swaps Mist, Safeguard, Aurora Veil, Reflect, Light Screen, Tailwind") { GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -125,8 +126,8 @@ DOUBLE_BATTLE_TEST("Court Change used by the opponent swaps Mist, Safeguard, Luc OPPONENT(SPECIES_WYNAUT); OPPONENT(SPECIES_WYNAUT); } WHEN { - TURN { MOVE(playerLeft, MOVE_MIST); MOVE(playerRight, MOVE_SAFEGUARD); } - TURN { MOVE(playerLeft, MOVE_LUCKY_CHANT); MOVE(playerRight, MOVE_REFLECT); } + TURN { MOVE(opponentLeft, MOVE_SNOWSCAPE); MOVE(playerLeft, MOVE_MIST); MOVE(playerRight, MOVE_SAFEGUARD); } + TURN { MOVE(playerLeft, MOVE_AURORA_VEIL); MOVE(playerRight, MOVE_REFLECT); } TURN { MOVE(playerLeft, MOVE_LIGHT_SCREEN); MOVE(playerRight, MOVE_TAILWIND); } TURN { MOVE(opponentLeft, MOVE_COURT_CHANGE); } TURN { } @@ -136,7 +137,7 @@ DOUBLE_BATTLE_TEST("Court Change used by the opponent swaps Mist, Safeguard, Luc } SCENE { MESSAGE("Wobbuffet used Mist!"); MESSAGE("Wobbuffet used Safeguard!"); - MESSAGE("Wobbuffet used Lucky Chant!"); + MESSAGE("Wobbuffet used Aurora Veil!"); MESSAGE("Wobbuffet used Reflect!"); MESSAGE("Wobbuffet used Light Screen!"); MESSAGE("Wobbuffet used Tailwind!"); @@ -146,8 +147,10 @@ DOUBLE_BATTLE_TEST("Court Change used by the opponent swaps Mist, Safeguard, Luc MESSAGE("Foe's Mist wore off!"); MESSAGE("Foe's party is no longer protected by Safeguard!"); MESSAGE("Foe's Reflect wore off!"); - MESSAGE("The opposing team's Lucky Chant wore off!"); + MESSAGE("Foe's Aurora Veil wore off!"); MESSAGE("The opposing team's tailwind petered out!"); MESSAGE("Foe's Light Screen wore off!"); } } + +TO_DO_BATTLE_TEST("Court Change used by the player swaps G-Max Steelsurge, G-Max Vine Lash, G-Max Wildfire, G-Max Cannonade"); diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c index 418d28d97b..ab6d647a97 100644 --- a/test/battle/move_effect/defog.c +++ b/test/battle/move_effect/defog.c @@ -131,7 +131,7 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Mist and Safeguard } } -DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and Sticky Web from player's side") +DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and Sticky Web from player's side (Gen 6+)") { u16 move; @@ -154,13 +154,15 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and S if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); MESSAGE("Foe Wobbuffet's evasiveness fell!"); - MESSAGE("The pointed stones disappeared from around your team!"); - MESSAGE("The sticky web has disappeared from the ground around your team!"); + if (B_DEFOG_EFFECT_CLEARING >= GEN_6) { + MESSAGE("The pointed stones disappeared from around your team!"); + MESSAGE("The sticky web has disappeared from the ground around your team!"); + } } // Switch happens SWITCH_OUT_MESSAGE("Wobbuffet"); SEND_IN_MESSAGE("Wobbuffet"); - if (move != MOVE_DEFOG) { + if (move != MOVE_DEFOG || B_DEFOG_EFFECT_CLEARING <= GEN_5) { HP_BAR(playerLeft); MESSAGE("Pointed stones dug into Wobbuffet!"); MESSAGE("Wobbuffet was caught in a Sticky Web!"); @@ -198,12 +200,13 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Spikes from player if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); MESSAGE("Foe Wobbuffet's evasiveness fell!"); - MESSAGE("The spikes disappeared from the ground around your team!"); + if (B_DEFOG_EFFECT_CLEARING >= GEN_6) + MESSAGE("The spikes disappeared from the ground around your team!"); } // Switch happens SWITCH_OUT_MESSAGE("Wobbuffet"); SEND_IN_MESSAGE("Wobbuffet"); - if (move != MOVE_DEFOG) { + if (move != MOVE_DEFOG || B_DEFOG_EFFECT_CLEARING <= GEN_5) { HP_BAR(player); MESSAGE("Wobbuffet is hurt by spikes!"); } @@ -216,7 +219,7 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Spikes from player } } -SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes terrain") +SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes terrain (Gen 8+)") { u16 move; @@ -225,7 +228,6 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes terrain") PARAMETRIZE { move = MOVE_MISTY_TERRAIN; } PARAMETRIZE { move = MOVE_GRASSY_TERRAIN; } GIVEN { - ASSUME(B_DEFOG_CLEARS_TERRAIN >= GEN_8); PLAYER(SPECIES_WOBBUFFET) { Speed(50); } OPPONENT(SPECIES_WOBBUFFET) { Speed(5); } } WHEN { @@ -235,19 +237,29 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes terrain") ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, opponent); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's evasiveness fell!"); - if (move == MOVE_PSYCHIC_TERRAIN) { - MESSAGE("The weirdness disappeared from the battlefield."); + if (B_DEFOG_EFFECT_CLEARING >= GEN_8) { + if (move == MOVE_PSYCHIC_TERRAIN) { + MESSAGE("The weirdness disappeared from the battlefield."); + } + else if (move == MOVE_ELECTRIC_TERRAIN) { + MESSAGE("The electricity disappeared from the battlefield."); + } + else if (move == MOVE_MISTY_TERRAIN) { + MESSAGE("The mist disappeared from the battlefield."); + } + else if (move == MOVE_GRASSY_TERRAIN) { + MESSAGE("The grass disappeared from the battlefield."); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG, player); + } else { + NONE_OF { + MESSAGE("The weirdness disappeared from the battlefield."); + MESSAGE("The electricity disappeared from the battlefield."); + MESSAGE("The mist disappeared from the battlefield."); + MESSAGE("The grass disappeared from the battlefield."); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG, player); + } } - else if (move == MOVE_ELECTRIC_TERRAIN) { - MESSAGE("The electricity disappeared from the battlefield."); - } - else if (move == MOVE_MISTY_TERRAIN) { - MESSAGE("The mist disappeared from the battlefield."); - } - else if (move == MOVE_GRASSY_TERRAIN) { - MESSAGE("The grass disappeared from the battlefield."); - } - ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_RESTORE_BG, player); } } @@ -270,11 +282,12 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Toxic Spikes from if (move == MOVE_DEFOG) { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Wobbuffet's evasiveness fell!"); - MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); + if (B_DEFOG_EFFECT_CLEARING >= GEN_6) + MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); } // Switch happens MESSAGE("2 sent out Wobbuffet!"); - if (move != MOVE_DEFOG) { + if (move != MOVE_DEFOG || B_DEFOG_EFFECT_CLEARING <= GEN_5) { MESSAGE("Foe Wobbuffet was poisoned!"); ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent); STATUS_ICON(opponent, poison: TRUE); @@ -356,15 +369,35 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes everything it can" MESSAGE("Ally's Aurora Veil wore off!"); MESSAGE("Ally's Safeguard wore off!"); - MESSAGE("The spikes disappeared from the ground around your team!"); - MESSAGE("The pointed stones disappeared from around your team!"); - MESSAGE("The poison spikes disappeared from the ground around your team!"); - MESSAGE("The sticky web has disappeared from the ground around your team!"); + if (B_DEFOG_EFFECT_CLEARING >= GEN_6) { + MESSAGE("The spikes disappeared from the ground around your team!"); + MESSAGE("The pointed stones disappeared from around your team!"); + MESSAGE("The poison spikes disappeared from the ground around your team!"); + MESSAGE("The sticky web has disappeared from the ground around your team!"); - // Opponent side - MESSAGE("The spikes disappeared from the ground around the opposing team!"); - MESSAGE("The pointed stones disappeared from around the opposing team!"); - MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); - MESSAGE("The sticky web has disappeared from the ground around the opposing team!"); + // Opponent side + MESSAGE("The spikes disappeared from the ground around the opposing team!"); + MESSAGE("The pointed stones disappeared from around the opposing team!"); + MESSAGE("The poison spikes disappeared from the ground around the opposing team!"); + MESSAGE("The sticky web has disappeared from the ground around the opposing team!"); + } + } +} + +SINGLE_BATTLE_TEST("Defog is used on the correct side if opposing mon is behind a substitute with Screen up") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_LIGHT_SCREEN); } + TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_DEFOG); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_LIGHT_SCREEN, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, opponent); + MESSAGE("Wobbuffet used Defog!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DEFOG, player); + MESSAGE("Foe Wobbuffet's evasiveness fell!"); + MESSAGE("Foe's Light Screen wore off!"); } } diff --git a/test/battle/move_effect/dream_eater.c b/test/battle/move_effect/dream_eater.c index 4ce749b5d2..f0fd113d2b 100644 --- a/test/battle/move_effect/dream_eater.c +++ b/test/battle/move_effect/dream_eater.c @@ -39,8 +39,8 @@ SINGLE_BATTLE_TEST("Dream Eater fails on awake targets") SINGLE_BATTLE_TEST("Dream Eater fails if Heal Block applies") { - ASSUME(B_HEAL_BLOCKING >= GEN_6); GIVEN { + ASSUME(B_HEAL_BLOCKING >= GEN_6); PLAYER(SPECIES_WOBBUFFET) { HP(1); } OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effect/evasion_up.c b/test/battle/move_effect/evasion_up.c index 4dcd92c7b3..7058694e9d 100644 --- a/test/battle/move_effect/evasion_up.c +++ b/test/battle/move_effect/evasion_up.c @@ -8,9 +8,9 @@ ASSUMPTIONS SINGLE_BATTLE_TEST("Double Team raises Evasion") { - ASSUME(gMovesInfo[MOVE_SCRATCH].accuracy == 100); PASSES_RANDOMLY(gMovesInfo[MOVE_SCRATCH].accuracy * 3 / 4, 100, RNG_ACCURACY); GIVEN { + ASSUME(gMovesInfo[MOVE_SCRATCH].accuracy == 100); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/move_effect/future_sight.c b/test/battle/move_effect/future_sight.c index fa78461a9d..778895ba58 100644 --- a/test/battle/move_effect/future_sight.c +++ b/test/battle/move_effect/future_sight.c @@ -158,9 +158,9 @@ SINGLE_BATTLE_TEST("Future Sight will miss timing if target faints by residual d SINGLE_BATTLE_TEST("Future Sight breaks Focus Sash and doesn't make the holder endure another move") { - ASSUME(gMovesInfo[MOVE_PSYCHIC].power > 0); - ASSUME(gItemsInfo[ITEM_FOCUS_SASH].holdEffect == HOLD_EFFECT_FOCUS_SASH); GIVEN { + ASSUME(gMovesInfo[MOVE_PSYCHIC].power > 0); + ASSUME(gItemsInfo[ITEM_FOCUS_SASH].holdEffect == HOLD_EFFECT_FOCUS_SASH); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_PIDGEY) { Level(1); Item(ITEM_FOCUS_SASH); } } WHEN { diff --git a/test/battle/move_effect/guard_split.c b/test/battle/move_effect/guard_split.c new file mode 100644 index 0000000000..3f012ab6e2 --- /dev/null +++ b/test/battle/move_effect/guard_split.c @@ -0,0 +1,22 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_GUARD_SPLIT].effect == EFFECT_GUARD_SPLIT); +} + +SINGLE_BATTLE_TEST("Guard Split averages users and targets Def and Sp. Def stats") +{ + GIVEN { + PLAYER(SPECIES_BULBASAUR); + OPPONENT(SPECIES_IVYSAUR); + } WHEN { + TURN { MOVE(player, MOVE_GUARD_SPLIT); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_GUARD_SPLIT, player); + } THEN { + EXPECT_EQ(player->defense, opponent->defense); + EXPECT_EQ(player->spDefense, opponent->spDefense); + } +} diff --git a/test/battle/move_effect/heal_bell.c b/test/battle/move_effect/heal_bell.c index 8bd6c1f456..c098886a98 100644 --- a/test/battle/move_effect/heal_bell.c +++ b/test/battle/move_effect/heal_bell.c @@ -10,7 +10,7 @@ ASSUMPTIONS DOUBLE_BATTLE_TEST("Heal Bell cures the entire party") { u32 move; - + PARAMETRIZE { move = MOVE_HEAL_BELL; } PARAMETRIZE { move = MOVE_AROMATHERAPY; } @@ -39,10 +39,10 @@ DOUBLE_BATTLE_TEST("Heal Bell cures the entire party") DOUBLE_BATTLE_TEST("Heal Bell does not cure soundproof partners") { u32 ability; - + PARAMETRIZE { ability = ABILITY_SCRAPPY; } PARAMETRIZE { ability = ABILITY_SOUNDPROOF; } - + ASSUME(B_HEAL_BELL_SOUNDPROOF != GEN_5); GIVEN { @@ -65,10 +65,10 @@ DOUBLE_BATTLE_TEST("Heal Bell does not cure soundproof partners") SINGLE_BATTLE_TEST("Heal Bell cures inactive soundproof Pokemon") { u32 ability; - + PARAMETRIZE { ability = ABILITY_SCRAPPY; } PARAMETRIZE { ability = ABILITY_SOUNDPROOF; } - + ASSUME(B_HEAL_BELL_SOUNDPROOF >= GEN_5); GIVEN { @@ -87,10 +87,9 @@ SINGLE_BATTLE_TEST("Heal Bell cures inactive soundproof Pokemon") SINGLE_BATTLE_TEST("Heal Bell cures a soundproof user") -{ - ASSUME(B_HEAL_BELL_SOUNDPROOF == GEN_5 || B_HEAL_BELL_SOUNDPROOF >= GEN_8); - +{ GIVEN { + ASSUME(B_HEAL_BELL_SOUNDPROOF == GEN_5 || B_HEAL_BELL_SOUNDPROOF >= GEN_8); PLAYER(SPECIES_EXPLOUD) { Ability(ABILITY_SOUNDPROOF); Status1(STATUS1_POISON); } OPPONENT(SPECIES_WYNAUT); } WHEN { diff --git a/test/battle/move_effect/instruct.c b/test/battle/move_effect/instruct.c new file mode 100644 index 0000000000..59772ea944 --- /dev/null +++ b/test/battle/move_effect/instruct.c @@ -0,0 +1,218 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_INSTRUCT].effect == EFFECT_INSTRUCT); +} + +DOUBLE_BATTLE_TEST("Instruct fails if target hasn't made a move") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, MOVE_POUND, MOVE_SCRATCH, MOVE_CELEBRATE); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerLeft, MOVE_INSTRUCT, target: playerRight); MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); } + } SCENE { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_INSTRUCT, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); + } +} + +DOUBLE_BATTLE_TEST("Instruct fails if move is banned by Instruct") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_BIDE].instructBanned == TRUE); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, MOVE_POUND, MOVE_SCRATCH, MOVE_BIDE); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerRight, MOVE_BIDE); MOVE(playerLeft, MOVE_INSTRUCT, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BIDE, playerRight); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_INSTRUCT, playerLeft); + } +} + +DOUBLE_BATTLE_TEST("Instruct-called move targets the target of the move picked on its last use") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, MOVE_POUND, MOVE_SCRATCH, MOVE_FAKE_OUT); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); MOVE(playerLeft, MOVE_INSTRUCT, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); + HP_BAR(opponentLeft); + NOT HP_BAR(opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_INSTRUCT, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); + HP_BAR(opponentLeft); + NOT HP_BAR(opponentRight); + } +} + +DOUBLE_BATTLE_TEST("Instruct doesn't bypass sleep") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_SPORE].effect == EFFECT_SLEEP); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, MOVE_POUND, MOVE_SCRATCH, MOVE_GROWL); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); MOVE(opponentLeft, MOVE_SPORE, target: playerRight); MOVE(playerLeft, MOVE_INSTRUCT, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPORE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_INSTRUCT, playerLeft); + MESSAGE("Wobbuffet is fast asleep."); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); + } +} + +DOUBLE_BATTLE_TEST("Instruct fails if target doesn't know the last move it used") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_DRAGON_DANCE].danceMove == TRUE); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_ORICORIO) { Moves(MOVE_TACKLE, MOVE_POUND, MOVE_SCRATCH, MOVE_CELEBRATE); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_DRAGON_DANCE); MOVE(playerLeft, MOVE_INSTRUCT, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, opponentLeft); + ABILITY_POPUP(playerRight, ABILITY_DANCER); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerRight); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_INSTRUCT, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DANCE, playerRight); + } + } +} + +DOUBLE_BATTLE_TEST("Instruct-called move fails if it can only be used on the first turn but consumes PP") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_FAKE_OUT].effect == EFFECT_FIRST_TURN_ONLY); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, MOVE_POUND, MOVE_SCRATCH, MOVE_FAKE_OUT); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerRight, MOVE_FAKE_OUT, target: opponentLeft); MOVE(playerLeft, MOVE_INSTRUCT, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_INSTRUCT, playerLeft); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, playerRight); + } THEN { + EXPECT_EQ(playerRight->pp[3], gMovesInfo[MOVE_FAKE_OUT].pp - 2); + } +} + +DOUBLE_BATTLE_TEST("Instruct-called move doesn't fail if tormented") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_TORMENT].effect == EFFECT_TORMENT); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, MOVE_POUND, MOVE_SCRATCH, MOVE_FAKE_OUT); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_TORMENT, target: playerRight); MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); MOVE(playerLeft, MOVE_INSTRUCT, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TORMENT, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_INSTRUCT, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); + } +} + +DOUBLE_BATTLE_TEST("Instruct-called status moves don't fail if holding Assault Vest") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_ASSAULT_VEST].holdEffect == HOLD_EFFECT_ASSAULT_VEST); + ASSUME(gMovesInfo[MOVE_TRICK].effect == EFFECT_TRICK); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, MOVE_POUND, MOVE_SCRATCH, MOVE_TRICK); } + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_ASSAULT_VEST); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerRight, MOVE_TRICK, target: opponentLeft); MOVE(playerLeft, MOVE_INSTRUCT, target: playerRight); MOVE(opponentLeft, MOVE_TACKLE, target: playerLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRICK, playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_INSTRUCT, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRICK, playerRight); + } +} + +DOUBLE_BATTLE_TEST("Instruct-called status move fails if taunted") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_TAUNT].effect == EFFECT_TAUNT); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, MOVE_POUND, MOVE_SCRATCH, MOVE_GROWL); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerRight, MOVE_GROWL); MOVE(opponentLeft, MOVE_TAUNT, target: playerRight); MOVE(playerLeft, MOVE_INSTRUCT, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_GROWL, playerRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TAUNT, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_INSTRUCT, playerLeft); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_GROWL, playerRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + } + } THEN { + EXPECT_EQ(playerRight->pp[3], gMovesInfo[MOVE_GROWL].pp - 1); + } +} + +DOUBLE_BATTLE_TEST("Instruct-called moves fail if disabled") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_DISABLE].effect == EFFECT_DISABLE); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, MOVE_POUND, MOVE_SCRATCH, MOVE_GROWL); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerRight, MOVE_TACKLE, target: opponentLeft); MOVE(opponentLeft, MOVE_DISABLE, target: playerRight); MOVE(playerLeft, MOVE_INSTRUCT, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DISABLE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_INSTRUCT, playerLeft); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, playerRight); + } THEN { + EXPECT_EQ(playerRight->pp[0], gMovesInfo[MOVE_TACKLE].pp - 1); + } +} + +DOUBLE_BATTLE_TEST("Instruct-called moves keep their priority") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_QUICK_ATTACK].priority == 1); + ASSUME(gMovesInfo[MOVE_PSYCHIC_TERRAIN].effect == EFFECT_PSYCHIC_TERRAIN); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_TACKLE, MOVE_POUND, MOVE_SCRATCH, MOVE_QUICK_ATTACK); } + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(playerRight, MOVE_QUICK_ATTACK, target: opponentLeft); MOVE(opponentLeft, MOVE_PSYCHIC_TERRAIN, target: playerRight); MOVE(playerLeft, MOVE_INSTRUCT, target: playerRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHIC_TERRAIN, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_INSTRUCT, playerLeft); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, playerRight); + } +} diff --git a/test/battle/move_effect/knock_off.c b/test/battle/move_effect/knock_off.c index ba6f9b6fe7..50d8aaa773 100644 --- a/test/battle/move_effect/knock_off.c +++ b/test/battle/move_effect/knock_off.c @@ -90,7 +90,7 @@ SINGLE_BATTLE_TEST("Knock Off does not remove items through Substitute") PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LEFTOVERS); }; } WHEN { - TURN { MOVE(opponent, MOVE_SUBSTITUTE); + TURN { MOVE(opponent, MOVE_SUBSTITUTE); MOVE(player, MOVE_KNOCK_OFF); } } SCENE { ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player); @@ -112,7 +112,7 @@ SINGLE_BATTLE_TEST("Recycle cannot recover an item removed by Knock Off") ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player); ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Leftovers!"); - + MESSAGE("Foe Wobbuffet used Recycle!"); MESSAGE("But it failed!"); } THEN { diff --git a/test/battle/move_effect/multi_hit.c b/test/battle/move_effect/multi_hit.c index af3a9bc0f4..df9cfea807 100644 --- a/test/battle/move_effect/multi_hit.c +++ b/test/battle/move_effect/multi_hit.c @@ -183,3 +183,51 @@ SINGLE_BATTLE_TEST("Endure does not prevent multiple hits and stat changes occur MESSAGE("Wobbuffet's Speed rose!"); } } + +SINGLE_BATTLE_TEST("Scale Shot decreases defense and increases speed after the 4th hit of Loaded Dice") +{ + PASSES_RANDOMLY(50, 100, RNG_LOADED_DICE); + GIVEN { + ASSUME(gMovesInfo[MOVE_SCALE_SHOT].effect == EFFECT_MULTI_HIT); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_LOADED_DICE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SCALE_SHOT); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); + MESSAGE("Hit 4 time(s)!"); + 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 Speed rose!"); + } +} + +SINGLE_BATTLE_TEST("Scale Shot decreases defense and increases speed after killing opposing with less then 4 hits") +{ + u32 item; + PARAMETRIZE { item = ITEM_NONE; } + PARAMETRIZE { item = ITEM_LOADED_DICE; } + + GIVEN { + ASSUME(gMovesInfo[MOVE_SCALE_SHOT].effect == EFFECT_MULTI_HIT); + PLAYER(SPECIES_BAGON) { Item(item); } + OPPONENT(SPECIES_SLUGMA) { Ability(ABILITY_WEAK_ARMOR); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SCALE_SHOT); SEND_OUT(opponent, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SCALE_SHOT, player); + MESSAGE("Foe Slugma fainted!"); + MESSAGE("Hit 3 time(s)!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Bagon's Defense fell!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Bagon's Speed rose!"); + } +} diff --git a/test/battle/move_effect/pledge.c b/test/battle/move_effect/pledge.c index a1ed91cab6..d2cc16aa47 100644 --- a/test/battle/move_effect/pledge.c +++ b/test/battle/move_effect/pledge.c @@ -330,3 +330,722 @@ DOUBLE_BATTLE_TEST("Damage calculation: Combined pledge move") EXPECT_EQ(expectedDamage, dmg); } } + +DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Sleep Right") +{ + u32 speedPLeft, speedPRight, speedOLeft, speedORight; + PARAMETRIZE { speedPLeft = 4; speedPRight = 3; speedOLeft = 8; speedORight = 2; } + PARAMETRIZE { speedPLeft = 4; speedPRight = 3; speedOLeft = 8; speedORight = 5; } + PARAMETRIZE { speedPLeft = 4; speedPRight = 3; speedOLeft = 8; speedORight = 1; } + PARAMETRIZE { speedPLeft = 3; speedPRight = 4; speedOLeft = 8; speedORight = 2; } + PARAMETRIZE { speedPLeft = 3; speedPRight = 4; speedOLeft = 8; speedORight = 5; } + PARAMETRIZE { speedPLeft = 3; speedPRight = 4; speedOLeft = 8; speedORight = 1; } + PARAMETRIZE { speedPLeft = 40; speedPRight = 30; speedOLeft = 8; speedORight = 2; } + PARAMETRIZE { speedPLeft = 40; speedPRight = 30; speedOLeft = 8; speedORight = 5; } + PARAMETRIZE { speedPLeft = 40; speedPRight = 30; speedOLeft = 8; speedORight = 1; } + PARAMETRIZE { speedPLeft = 30; speedPRight = 40; speedOLeft = 8; speedORight = 2; } + PARAMETRIZE { speedPLeft = 30; speedPRight = 40; speedOLeft = 8; speedORight = 5; } + PARAMETRIZE { speedPLeft = 30; speedPRight = 40; speedOLeft = 8; speedORight = 1; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(speedPLeft); } + PLAYER(SPECIES_WYNAUT) { Speed(speedPRight); Status1(STATUS1_SLEEP_TURN(2)); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(speedOLeft); } + OPPONENT(SPECIES_WYNAUT) { Speed(speedORight); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_FIRE_PLEDGE, target: opponentRight); MOVE(playerRight, MOVE_GRASS_PLEDGE, target: opponentRight); } + } SCENE { + if (speedPLeft < speedPRight) { + MESSAGE("Wynaut is fast asleep."); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + } else { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + MESSAGE("Wynaut is fast asleep."); + } + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SEA_OF_FIRE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerRight); + } + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Sleep Left") +{ + u32 speedPLeft, speedPRight, speedOLeft, speedORight; + PARAMETRIZE { speedPLeft = 4; speedPRight = 3; speedOLeft = 8; speedORight = 2; } + PARAMETRIZE { speedPLeft = 4; speedPRight = 3; speedOLeft = 8; speedORight = 5; } + PARAMETRIZE { speedPLeft = 4; speedPRight = 3; speedOLeft = 8; speedORight = 1; } + PARAMETRIZE { speedPLeft = 3; speedPRight = 4; speedOLeft = 8; speedORight = 2; } + PARAMETRIZE { speedPLeft = 3; speedPRight = 4; speedOLeft = 8; speedORight = 5; } + PARAMETRIZE { speedPLeft = 3; speedPRight = 4; speedOLeft = 8; speedORight = 1; } + PARAMETRIZE { speedPLeft = 40; speedPRight = 30; speedOLeft = 8; speedORight = 2; } + PARAMETRIZE { speedPLeft = 40; speedPRight = 30; speedOLeft = 8; speedORight = 5; } + PARAMETRIZE { speedPLeft = 40; speedPRight = 30; speedOLeft = 8; speedORight = 1; } + PARAMETRIZE { speedPLeft = 30; speedPRight = 40; speedOLeft = 8; speedORight = 2; } + PARAMETRIZE { speedPLeft = 30; speedPRight = 40; speedOLeft = 8; speedORight = 5; } + PARAMETRIZE { speedPLeft = 30; speedPRight = 40; speedOLeft = 8; speedORight = 1; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(speedPLeft); Status1(STATUS1_SLEEP_TURN(2)); } + PLAYER(SPECIES_WYNAUT) { Speed(speedPRight); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(speedOLeft); } + OPPONENT(SPECIES_WYNAUT) { Speed(speedORight); } + } WHEN { + TURN { MOVE(playerRight, MOVE_FIRE_PLEDGE, target: opponentRight); MOVE(playerLeft, MOVE_GRASS_PLEDGE, target: opponentRight); } + } SCENE { + if (speedPRight < speedPLeft) { + MESSAGE("Wobbuffet is fast asleep."); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); + } else { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); + MESSAGE("Wobbuffet is fast asleep."); + } + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SEA_OF_FIRE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerLeft); + } + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Flinch Right") +{ + u32 speedPLeft, speedPRight, speedOLeft, speedORight; + PARAMETRIZE { speedPLeft = 4; speedPRight = 3; speedOLeft = 8; speedORight = 2; } + PARAMETRIZE { speedPLeft = 4; speedPRight = 3; speedOLeft = 8; speedORight = 5; } + PARAMETRIZE { speedPLeft = 4; speedPRight = 3; speedOLeft = 8; speedORight = 1; } + PARAMETRIZE { speedPLeft = 3; speedPRight = 4; speedOLeft = 8; speedORight = 2; } + PARAMETRIZE { speedPLeft = 3; speedPRight = 4; speedOLeft = 8; speedORight = 5; } + PARAMETRIZE { speedPLeft = 3; speedPRight = 4; speedOLeft = 8; speedORight = 1; } + GIVEN { + ASSUME(MoveHasAdditionalEffectWithChance(MOVE_FAKE_OUT, MOVE_EFFECT_FLINCH, 100)); + PLAYER(SPECIES_WOBBUFFET) { Speed(speedPLeft); } + PLAYER(SPECIES_WYNAUT) { Speed(speedPRight); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(speedOLeft); } + OPPONENT(SPECIES_WYNAUT) { Speed(speedORight); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_FAKE_OUT, target: playerRight); MOVE(playerLeft, MOVE_FIRE_PLEDGE, target: opponentRight); MOVE(playerRight, MOVE_GRASS_PLEDGE, target: opponentRight); } + } SCENE { + if (speedPLeft < speedPRight) { + MESSAGE("Wynaut flinched!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + } else { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + MESSAGE("Wynaut flinched!"); + } + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SEA_OF_FIRE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerRight); + } + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Flinch Left") +{ + u32 speedPLeft, speedPRight, speedOLeft, speedORight; + PARAMETRIZE { speedPLeft = 4; speedPRight = 3; speedOLeft = 8; speedORight = 2; } + PARAMETRIZE { speedPLeft = 4; speedPRight = 3; speedOLeft = 8; speedORight = 5; } + PARAMETRIZE { speedPLeft = 4; speedPRight = 3; speedOLeft = 8; speedORight = 1; } + PARAMETRIZE { speedPLeft = 3; speedPRight = 4; speedOLeft = 8; speedORight = 2; } + PARAMETRIZE { speedPLeft = 3; speedPRight = 4; speedOLeft = 8; speedORight = 5; } + PARAMETRIZE { speedPLeft = 3; speedPRight = 4; speedOLeft = 8; speedORight = 1; } + GIVEN { + ASSUME(MoveHasAdditionalEffectWithChance(MOVE_FAKE_OUT, MOVE_EFFECT_FLINCH, 100)); + PLAYER(SPECIES_WOBBUFFET) { Speed(speedPLeft); } + PLAYER(SPECIES_WYNAUT) { Speed(speedPRight); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(speedOLeft); } + OPPONENT(SPECIES_WYNAUT) { Speed(speedORight); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_FAKE_OUT, target: playerLeft); MOVE(playerRight, MOVE_FIRE_PLEDGE, target: opponentRight); MOVE(playerLeft, MOVE_GRASS_PLEDGE, target: opponentRight); } + } SCENE { + if (speedPRight < speedPLeft) { + MESSAGE("Wobbuffet flinched!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); + } else { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); + MESSAGE("Wobbuffet flinched!"); + } + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SEA_OF_FIRE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerLeft); + } + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo doesn't fail if any mon wakes up") +{ + u32 statusLeft, statusRight; + PARAMETRIZE { statusLeft = STATUS1_SLEEP_TURN(1); statusRight = 0; } + PARAMETRIZE { statusLeft = 0; statusRight = STATUS1_SLEEP_TURN(1); } + PARAMETRIZE { statusLeft = STATUS1_SLEEP_TURN(1); statusRight = STATUS1_SLEEP_TURN(1); } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(4); Status1(statusLeft); } + PLAYER(SPECIES_WYNAUT) { Speed(3); Status1(statusRight); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(8); } + OPPONENT(SPECIES_WYNAUT) { Speed(2); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_FIRE_PLEDGE, target: opponentRight); MOVE(playerRight, MOVE_GRASS_PLEDGE, target: opponentRight); } + } SCENE { + NONE_OF { + MESSAGE("Wobbuffet is fast asleep."); + MESSAGE("Wynaut is fast asleep."); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerRight); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SEA_OF_FIRE, opponentRight); + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo doesn't fail if any mon thaws out") +{ + u32 statusLeft, statusRight; + PARAMETRIZE { statusLeft = STATUS1_FREEZE; statusRight = 0; } + PARAMETRIZE { statusLeft = 0; statusRight = STATUS1_FREEZE; } + PARAMETRIZE { statusLeft = STATUS1_FREEZE; statusRight = STATUS1_FREEZE; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(4); Status1(statusLeft); } + PLAYER(SPECIES_WYNAUT) { Speed(3); Status1(statusRight); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(8); } + OPPONENT(SPECIES_WYNAUT) { Speed(2); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_FIRE_PLEDGE, target: opponentRight, WITH_RNG(RNG_FROZEN, 1)); MOVE(playerRight, MOVE_GRASS_PLEDGE, target: opponentRight, WITH_RNG(RNG_FROZEN, 1)); } + } SCENE { + NONE_OF { + MESSAGE("Wobbuffet is frozen solid!"); + MESSAGE("Wynaut is frozen solid!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerRight); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SEA_OF_FIRE, opponentRight); + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Sleep Both Left Wake Up") +{ + u32 speedLeft, speedRight; + PARAMETRIZE { speedLeft = 4; speedRight = 3; } + PARAMETRIZE { speedLeft = 3; speedRight = 4; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(speedLeft); Status1(STATUS1_SLEEP_TURN(1)); } + PLAYER(SPECIES_WYNAUT) { Speed(speedRight); Status1(STATUS1_SLEEP_TURN(2)); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(8); } + OPPONENT(SPECIES_WYNAUT) { Speed(2); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_FIRE_PLEDGE, target: opponentRight); MOVE(playerRight, MOVE_GRASS_PLEDGE, target: opponentRight); } + } SCENE { + if (speedLeft < speedRight) { + MESSAGE("Wynaut is fast asleep."); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + } else { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + MESSAGE("Wynaut is fast asleep."); + } + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SEA_OF_FIRE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerRight); + } + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Sleep Both Right Wake Up") +{ + u32 speedLeft, speedRight; + PARAMETRIZE { speedLeft = 4; speedRight = 3; } + PARAMETRIZE { speedLeft = 3; speedRight = 4; } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(speedLeft); Status1(STATUS1_SLEEP_TURN(2)); } + PLAYER(SPECIES_WYNAUT) { Speed(speedRight); Status1(STATUS1_SLEEP_TURN(1)); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(8); } + OPPONENT(SPECIES_WYNAUT) { Speed(2); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_FIRE_PLEDGE, target: opponentRight); MOVE(playerRight, MOVE_GRASS_PLEDGE, target: opponentRight); } + } SCENE { + if (speedRight < speedLeft) { + MESSAGE("Wobbuffet is fast asleep."); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerRight); + } else { + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerRight); + MESSAGE("Wobbuffet is fast asleep."); + } + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SEA_OF_FIRE, opponentRight); + } + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Sleep Both Left Faster") +{ + u32 status1; + PARAMETRIZE { status1 = STATUS1_SLEEP_TURN(2); } + PARAMETRIZE { status1 = STATUS1_SLEEP_TURN(3); } + PARAMETRIZE { status1 = STATUS1_SLEEP_TURN(4); } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(4); Status1(status1); } + PLAYER(SPECIES_WYNAUT) { Speed(3); Status1(status1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(8); } + OPPONENT(SPECIES_WYNAUT) { Speed(2); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_FIRE_PLEDGE, target: opponentRight); MOVE(playerRight, MOVE_GRASS_PLEDGE, target: opponentRight); } + } SCENE { + MESSAGE("Wobbuffet is fast asleep."); + MESSAGE("Wynaut is fast asleep."); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SEA_OF_FIRE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerRight); + HP_BAR(opponentRight); + } + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Sleep Both Right Faster") +{ + u32 status1; + PARAMETRIZE { status1 = STATUS1_SLEEP_TURN(2); } + PARAMETRIZE { status1 = STATUS1_SLEEP_TURN(3); } + PARAMETRIZE { status1 = STATUS1_SLEEP_TURN(4); } + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(3); Status1(status1); } + PLAYER(SPECIES_WYNAUT) { Speed(4); Status1(status1); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(8); } + OPPONENT(SPECIES_WYNAUT) { Speed(2); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_FIRE_PLEDGE, target: opponentRight); MOVE(playerRight, MOVE_GRASS_PLEDGE, target: opponentRight); } + } SCENE { + MESSAGE("Wynaut is fast asleep."); + MESSAGE("Wobbuffet is fast asleep."); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SEA_OF_FIRE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerRight); + HP_BAR(opponentRight); + } + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Frozen Both Left Faster") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(4); Status1(STATUS1_FREEZE); } + PLAYER(SPECIES_WYNAUT) { Speed(3); Status1(STATUS1_FREEZE); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(8); } + OPPONENT(SPECIES_WYNAUT) { Speed(2); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_FIRE_PLEDGE, target: opponentRight, WITH_RNG(RNG_FROZEN, 0)); MOVE(playerRight, MOVE_GRASS_PLEDGE, target: opponentRight, WITH_RNG(RNG_FROZEN, 0)); } + } SCENE { + MESSAGE("Wobbuffet is frozen solid!"); + MESSAGE("Wynaut is frozen solid!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SEA_OF_FIRE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerRight); + HP_BAR(opponentRight); + } + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Frozen Both Right Faster") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(3); Status1(STATUS1_FREEZE); } + PLAYER(SPECIES_WYNAUT) { Speed(4); Status1(STATUS1_FREEZE); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(8); } + OPPONENT(SPECIES_WYNAUT) { Speed(2); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_FIRE_PLEDGE, target: opponentRight, WITH_RNG(RNG_FROZEN, 0)); MOVE(playerRight, MOVE_GRASS_PLEDGE, target: opponentRight, WITH_RNG(RNG_FROZEN, 0)); } + } SCENE { + MESSAGE("Wynaut is frozen solid!"); + MESSAGE("Wobbuffet is frozen solid!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SEA_OF_FIRE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerRight); + HP_BAR(opponentRight); + } + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Paralyzed Both Left Faster") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(40); Status1(STATUS1_PARALYSIS); } + PLAYER(SPECIES_WYNAUT) { Speed(30); Status1(STATUS1_PARALYSIS); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(80); } + OPPONENT(SPECIES_WYNAUT) { Speed(2); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_FIRE_PLEDGE, target: opponentRight, WITH_RNG(RNG_PARALYSIS, 0)); MOVE(playerRight, MOVE_GRASS_PLEDGE, target: opponentRight, WITH_RNG(RNG_PARALYSIS, 0)); } + } SCENE { + MESSAGE("Wobbuffet is paralyzed! It can't move!"); + MESSAGE("Wynaut is paralyzed! It can't move!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SEA_OF_FIRE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerRight); + HP_BAR(opponentRight); + } + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Paralyzed Both Right Faster") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(30); Status1(STATUS1_PARALYSIS); } + PLAYER(SPECIES_WYNAUT) { Speed(40); Status1(STATUS1_PARALYSIS); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(80); } + OPPONENT(SPECIES_WYNAUT) { Speed(2); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_FIRE_PLEDGE, target: opponentRight, WITH_RNG(RNG_PARALYSIS, 0)); MOVE(playerRight, MOVE_GRASS_PLEDGE, target: opponentRight, WITH_RNG(RNG_PARALYSIS, 0)); } + } SCENE { + MESSAGE("Wynaut is paralyzed! It can't move!"); + MESSAGE("Wobbuffet is paralyzed! It can't move!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SEA_OF_FIRE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerRight); + HP_BAR(opponentRight); + } + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Flinch Both Left Faster") +{ + GIVEN { + ASSUME(MoveHasAdditionalEffectWithChance(MOVE_FAKE_OUT, MOVE_EFFECT_FLINCH, 100)); + PLAYER(SPECIES_WOBBUFFET) { Speed(4); } + PLAYER(SPECIES_WYNAUT) { Speed(3); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(8); } + OPPONENT(SPECIES_WYNAUT) { Speed(2); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_FAKE_OUT, target: playerLeft); MOVE(opponentRight, MOVE_FAKE_OUT, target: playerRight); MOVE(playerRight, MOVE_FIRE_PLEDGE, target: opponentRight); MOVE(playerLeft, MOVE_GRASS_PLEDGE, target: opponentRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, opponentRight); + MESSAGE("Wobbuffet flinched!"); + MESSAGE("Wynaut flinched!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SEA_OF_FIRE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerLeft); + HP_BAR(opponentRight); + } + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo fails if ally fails to act - Flinch Both Right Faster") +{ + GIVEN { + ASSUME(MoveHasAdditionalEffectWithChance(MOVE_FAKE_OUT, MOVE_EFFECT_FLINCH, 100)); + PLAYER(SPECIES_WOBBUFFET) { Speed(3); } + PLAYER(SPECIES_WYNAUT) { Speed(4); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(8); } + OPPONENT(SPECIES_WYNAUT) { Speed(2); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_FAKE_OUT, target: playerLeft); MOVE(opponentRight, MOVE_FAKE_OUT, target: playerRight); MOVE(playerRight, MOVE_FIRE_PLEDGE, target: opponentRight); MOVE(playerLeft, MOVE_GRASS_PLEDGE, target: opponentRight); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, opponentRight); + MESSAGE("Wynaut flinched!"); + MESSAGE("Wobbuffet flinched!"); + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SEA_OF_FIRE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerLeft); + HP_BAR(opponentRight); + } + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo doesn't trigger on opponent's Pledge move - Sleep") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(4); } + PLAYER(SPECIES_WYNAUT) { Speed(3); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(8); } + OPPONENT(SPECIES_WYNAUT) { Speed(5); Status1(STATUS1_SLEEP_TURN(2)); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_FIRE_PLEDGE, target: playerLeft); + MOVE(opponentRight, MOVE_GRASS_PLEDGE, target: playerLeft); + MOVE(playerLeft, MOVE_GRASS_PLEDGE, target: opponentRight); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerLeft); + HP_BAR(opponentRight); + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo doesn't trigger on opponent's Pledge move - Freeze") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(4); } + PLAYER(SPECIES_WYNAUT) { Speed(3); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(8); } + OPPONENT(SPECIES_WYNAUT) { Speed(5); Status1(STATUS1_FREEZE); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_FIRE_PLEDGE, target: playerLeft); MOVE(opponentRight, MOVE_GRASS_PLEDGE, target: playerLeft, WITH_RNG(RNG_FROZEN, 0)); MOVE(playerLeft, MOVE_GRASS_PLEDGE, target: opponentRight); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerLeft); + HP_BAR(opponentRight); + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo doesn't trigger on opponent's Pledge move - Powder") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerLeft, MOVE_POWDER, target: opponentRight); + MOVE(opponentLeft, MOVE_GRASS_PLEDGE, target: playerLeft); + MOVE(opponentRight, MOVE_FIRE_PLEDGE, target: playerLeft); + MOVE(playerRight, MOVE_FIRE_PLEDGE, target: opponentLeft); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerRight); + HP_BAR(opponentLeft); + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo doesn't trigger on opponent's Pledge move - Electrify") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_ELECTRIFY].effect == EFFECT_ELECTRIFY); + PLAYER(SPECIES_MAROWAK) { Ability(ABILITY_LIGHTNING_ROD); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerRight, MOVE_ELECTRIFY, target: opponentRight); + MOVE(opponentLeft, MOVE_GRASS_PLEDGE, target: playerLeft); + MOVE(opponentRight, MOVE_FIRE_PLEDGE, target: playerLeft); + MOVE(playerLeft, MOVE_WATER_PLEDGE, target: opponentRight); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PLEDGE, playerLeft); + HP_BAR(opponentRight); + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo doesn't trigger on opponent's Pledge move - Storm Drain") +{ + GIVEN { + PLAYER(SPECIES_GASTRODON) { Ability(ABILITY_STORM_DRAIN); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_FIRE_PLEDGE, target: playerLeft); + MOVE(opponentRight, MOVE_WATER_PLEDGE, target: playerLeft); + MOVE(playerLeft, MOVE_GRASS_PLEDGE, target: opponentRight); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PLEDGE, playerLeft); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerLeft); + HP_BAR(opponentRight); + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo doesn't trigger on opponent's Pledge move - Sap Sipper") +{ + GIVEN { + PLAYER(SPECIES_GOODRA) { Ability(ABILITY_SAP_SIPPER); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_WATER_PLEDGE, target: playerLeft); + MOVE(opponentRight, MOVE_GRASS_PLEDGE, target: playerLeft); + MOVE(playerLeft, MOVE_FIRE_PLEDGE, target: opponentRight); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PLEDGE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerLeft); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + HP_BAR(opponentRight); + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo doesn't trigger on opponent's Pledge move - Dry Skin") +{ + GIVEN { + PLAYER(SPECIES_PARASECT) { Ability(ABILITY_DRY_SKIN); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_FIRE_PLEDGE, target: playerLeft); + MOVE(opponentRight, MOVE_WATER_PLEDGE, target: playerLeft); + MOVE(playerLeft, MOVE_GRASS_PLEDGE, target: opponentRight); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PLEDGE, playerLeft); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerLeft); + HP_BAR(opponentRight); + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo doesn't trigger on opponent's Pledge move - Flash Fire") +{ + GIVEN { + PLAYER(SPECIES_HEATRAN) { Ability(ABILITY_FLASH_FIRE); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_GRASS_PLEDGE, target: playerLeft); + MOVE(opponentRight, MOVE_FIRE_PLEDGE, target: playerLeft); + MOVE(playerLeft, MOVE_WATER_PLEDGE, target: opponentRight); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PLEDGE, playerLeft); + HP_BAR(opponentRight); + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo doesn't trigger on opponent's Pledge move - Motor Drive") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_ELECTRIFY].effect == EFFECT_ELECTRIFY); + PLAYER(SPECIES_ELECTIVIRE) { Ability(ABILITY_MOTOR_DRIVE); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerRight, MOVE_ELECTRIFY, target: opponentRight); + MOVE(opponentLeft, MOVE_WATER_PLEDGE, target: playerLeft); + MOVE(opponentRight, MOVE_GRASS_PLEDGE, target: playerLeft); + MOVE(playerLeft, MOVE_FIRE_PLEDGE, target: opponentRight); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PLEDGE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerLeft); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + HP_BAR(opponentRight); + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo doesn't trigger on opponent's Pledge move - Volt Absorb") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_ELECTRIFY].effect == EFFECT_ELECTRIFY); + PLAYER(SPECIES_JOLTEON) { Ability(ABILITY_VOLT_ABSORB); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(playerRight, MOVE_ELECTRIFY, target: opponentRight); + MOVE(opponentLeft, MOVE_WATER_PLEDGE, target: playerLeft); + MOVE(opponentRight, MOVE_GRASS_PLEDGE, target: playerLeft); + MOVE(playerLeft, MOVE_GRASS_PLEDGE, target: opponentRight); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerLeft); + HP_BAR(opponentRight); + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo doesn't trigger on opponent's Pledge move - Water Absorb") +{ + GIVEN { + PLAYER(SPECIES_VAPOREON) { Ability(ABILITY_WATER_ABSORB); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_FIRE_PLEDGE, target: playerLeft); + MOVE(opponentRight, MOVE_WATER_PLEDGE, target: playerLeft); + MOVE(playerLeft, MOVE_GRASS_PLEDGE, target: opponentRight); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PLEDGE, playerLeft); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, playerLeft); + HP_BAR(opponentRight); + } +} + +DOUBLE_BATTLE_TEST("Pledge move combo doesn't trigger on opponent's Pledge move - Well Baked Body") +{ + GIVEN { + PLAYER(SPECIES_DACHSBUN) { Ability(ABILITY_WELL_BAKED_BODY); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_GRASS_PLEDGE, target: playerLeft); + MOVE(opponentRight, MOVE_FIRE_PLEDGE, target: playerLeft); + MOVE(playerLeft, MOVE_WATER_PLEDGE, target: opponentRight); } + } SCENE { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_GRASS_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FIRE_PLEDGE, playerLeft); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PLEDGE, playerLeft); + HP_BAR(opponentRight); + } +} diff --git a/test/battle/move_effect/power_split.c b/test/battle/move_effect/power_split.c new file mode 100644 index 0000000000..70d1bfd5ea --- /dev/null +++ b/test/battle/move_effect/power_split.c @@ -0,0 +1,22 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_POWER_SPLIT].effect == EFFECT_POWER_SPLIT); +} + +SINGLE_BATTLE_TEST("Power Split averages user and targets Atk and Sp. Atk stats") +{ + GIVEN { + PLAYER(SPECIES_BULBASAUR); + OPPONENT(SPECIES_IVYSAUR); + } WHEN { + TURN { MOVE(player, MOVE_POWER_SPLIT); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_POWER_SPLIT, player); + } THEN { + EXPECT_EQ(player->attack, opponent->attack); + EXPECT_EQ(player->spAttack, opponent->spAttack); + } +} diff --git a/test/battle/move_effect/protect.c b/test/battle/move_effect/protect.c index 973033bc33..aca5ef859d 100644 --- a/test/battle/move_effect/protect.c +++ b/test/battle/move_effect/protect.c @@ -482,3 +482,68 @@ DOUBLE_BATTLE_TEST("Crafty Shield protects self and ally from status moves") } } } + +SINGLE_BATTLE_TEST("Protect does not block Confide") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_CONFIDE].effect == EFFECT_SPECIAL_ATTACK_DOWN); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_PROTECT); MOVE(player, MOVE_CONFIDE); } + } SCENE { + MESSAGE("Wobbuffet used Confide!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFIDE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + NOT MESSAGE("Foe Wobbuffet protected itself!"); + } +} + +DOUBLE_BATTLE_TEST("Crafty Shield protects self and ally from Confide") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_CONFIDE].effect == EFFECT_SPECIAL_ATTACK_DOWN); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_CRAFTY_SHIELD); MOVE(playerLeft, MOVE_CONFIDE, target: opponentLeft); MOVE(playerRight, MOVE_CONFIDE, target: opponentRight); } + } SCENE { + MESSAGE("Wobbuffet used Confide!"); + MESSAGE("Foe Wobbuffet protected itself!"); + MESSAGE("Wynaut used Confide!"); + MESSAGE("Foe Wynaut protected itself!"); + } +} + +DOUBLE_BATTLE_TEST("Crafty Shield does not protect against moves that target all battlers") +{ + GIVEN { + ASSUME(gMovesInfo[MOVE_FLOWER_SHIELD].target == MOVE_TARGET_ALL_BATTLERS); + ASSUME(gSpeciesInfo[SPECIES_TANGELA].types[0] == TYPE_GRASS); + ASSUME(gSpeciesInfo[SPECIES_TANGROWTH].types[0] == TYPE_GRASS); + ASSUME(gSpeciesInfo[SPECIES_SUNKERN].types[0] == TYPE_GRASS); + ASSUME(gSpeciesInfo[SPECIES_SUNFLORA].types[0] == TYPE_GRASS); + PLAYER(SPECIES_TANGELA); + PLAYER(SPECIES_TANGROWTH); + OPPONENT(SPECIES_SUNKERN); + OPPONENT(SPECIES_SUNFLORA); + } WHEN { + TURN { MOVE(opponentLeft, MOVE_CRAFTY_SHIELD); MOVE(opponentRight, MOVE_CELEBRATE); MOVE(playerLeft, MOVE_FLOWER_SHIELD); MOVE(playerRight, MOVE_CELEBRATE); } + } SCENE { + MESSAGE("Tangela used Flower Shield!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FLOWER_SHIELD, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Tangela's Defense rose!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FLOWER_SHIELD, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Foe Sunkern's Defense rose!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FLOWER_SHIELD, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Tangrowth's Defense rose!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FLOWER_SHIELD, playerLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Foe Sunflora's Defense rose!"); + } +} diff --git a/test/battle/move_effect/reflect_type.c b/test/battle/move_effect/reflect_type.c index b75ffc0b0d..0b610efe6e 100644 --- a/test/battle/move_effect/reflect_type.c +++ b/test/battle/move_effect/reflect_type.c @@ -88,11 +88,11 @@ SINGLE_BATTLE_TEST("Reflect Type does not affect any of Silvally's forms") 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 { + 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); PLAYER(SPECIES_ARCANINE); OPPONENT(SPECIES_POLIWRATH); } WHEN { @@ -109,11 +109,11 @@ SINGLE_BATTLE_TEST("Reflect Type does not affect Pokémon with no types") 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 { + 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); PLAYER(SPECIES_ARCANINE); OPPONENT(SPECIES_POLIWRATH); } WHEN { @@ -123,19 +123,19 @@ SINGLE_BATTLE_TEST("Reflect Type copies a target's dual types") 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); + EXPECT_EQ(player->types[0], TYPE_WATER); + EXPECT_EQ(player->types[1], TYPE_FIGHTING); + EXPECT_EQ(player->types[2], 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 { + 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); PLAYER(SPECIES_ARCANINE); OPPONENT(SPECIES_SUDOWOODO); } WHEN { @@ -145,19 +145,19 @@ SINGLE_BATTLE_TEST("Reflect Type copies a target's pure 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); + EXPECT_EQ(player->types[0], TYPE_ROCK); + EXPECT_EQ(player->types[1], TYPE_ROCK); + EXPECT_EQ(player->types[2], 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") +SINGLE_BATTLE_TEST("Reflect Type defaults to Normal type for the user's types[0] and types[1] 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 { + 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); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_ARCANINE); } WHEN { @@ -179,8 +179,8 @@ SINGLE_BATTLE_TEST("Reflect Type defaults to Normal type for the user's type1 an 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); + EXPECT_EQ(player->types[0], TYPE_NORMAL); + EXPECT_EQ(player->types[1], TYPE_NORMAL); + EXPECT_EQ(player->types[2], TYPE_GRASS); } } diff --git a/test/battle/move_effect/retaliate.c b/test/battle/move_effect/retaliate.c new file mode 100644 index 0000000000..581793e854 --- /dev/null +++ b/test/battle/move_effect/retaliate.c @@ -0,0 +1,137 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_RETALIATE].effect == EFFECT_RETALIATE); +} + +SINGLE_BATTLE_TEST("Retaliate doubles in base power the turn after an ally faints") +{ + s16 damage[2]; + GIVEN { + PLAYER(SPECIES_WYNAUT) { HP(1); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); } + TURN { MOVE(player, MOVE_RETALIATE); } + TURN { MOVE(player, MOVE_RETALIATE); } + } SCENE { + HP_BAR(opponent, captureDamage: &damage[0]); + HP_BAR(opponent, captureDamage: &damage[1]); + } THEN { + EXPECT_MUL_EQ(damage[1], Q_4_12(2), damage[0]); + } +} + +SINGLE_BATTLE_TEST("Retaliate doubles in base power the turn after an ally faints (opponent)") +{ + s16 damage[2]; + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT) { HP(1); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); SEND_OUT(opponent, 1); } + TURN { MOVE(opponent, MOVE_RETALIATE); } + TURN { MOVE(opponent, MOVE_RETALIATE); } + } SCENE { + HP_BAR(player, captureDamage: &damage[0]); + HP_BAR(player, captureDamage: &damage[1]); + } THEN { + EXPECT_MUL_EQ(damage[1], Q_4_12(2), damage[0]); + } +} + +DOUBLE_BATTLE_TEST("Retaliate works with passive damage") +{ + s16 damage[2]; + u32 move; + u32 move2 = MOVE_CELEBRATE; + struct BattlePokemon *moveTarget = playerLeft; + PARAMETRIZE { move = MOVE_TOXIC; moveTarget = playerLeft; } + PARAMETRIZE { move = MOVE_POISON_POWDER; moveTarget = playerLeft; } + PARAMETRIZE { move = MOVE_WILL_O_WISP; moveTarget = playerLeft; } + #if B_USE_FROSTBITE == TRUE + PARAMETRIZE { move = MOVE_ICE_BEAM; moveTarget = playerLeft; } + #endif + PARAMETRIZE { move = MOVE_SANDSTORM; moveTarget = playerLeft; } + PARAMETRIZE { move = MOVE_HAIL; moveTarget = playerLeft; } + PARAMETRIZE { move = MOVE_LEECH_SEED; moveTarget = playerLeft; } + PARAMETRIZE { move = MOVE_MAGMA_STORM; moveTarget = playerLeft; } + PARAMETRIZE { move = MOVE_FLAME_BURST; moveTarget = playerRight; } + PARAMETRIZE { move = MOVE_FIRE_PLEDGE; moveTarget = playerRight; move2 = MOVE_GRASS_PLEDGE; } + GIVEN { + ASSUME(gMovesInfo[MOVE_TOXIC].effect == EFFECT_TOXIC); + ASSUME(gMovesInfo[MOVE_POISON_POWDER].effect == EFFECT_POISON); + ASSUME(gMovesInfo[MOVE_WILL_O_WISP].effect == EFFECT_WILL_O_WISP); + #if B_USE_FROSTBITE == TRUE + ASSUME(gMovesInfo[MOVE_ICE_BEAM].additionalEffects[0].moveEffect == MOVE_EFFECT_FREEZE_OR_FROSTBITE); + #endif + ASSUME(gMovesInfo[MOVE_SANDSTORM].effect == EFFECT_SANDSTORM); + ASSUME(gMovesInfo[MOVE_HAIL].effect == EFFECT_HAIL); + ASSUME(gMovesInfo[MOVE_LEECH_SEED].effect == EFFECT_LEECH_SEED); + ASSUME(gMovesInfo[MOVE_MAGMA_STORM].additionalEffects[0].moveEffect == MOVE_EFFECT_WRAP); + ASSUME(gMovesInfo[MOVE_FLAME_BURST].additionalEffects[0].moveEffect == MOVE_EFFECT_FLAME_BURST); + PLAYER(SPECIES_WYNAUT) { Ability(ABILITY_SHADOW_TAG); HP(18); } + PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_SHADOW_TAG); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_CLEFABLE) { Ability(ABILITY_MAGIC_GUARD); Level(1); } + OPPONENT(SPECIES_CLEFABLE) { Ability(ABILITY_MAGIC_GUARD); } + } WHEN { + TURN { MOVE(opponentRight, move2, target: moveTarget); MOVE(opponentLeft, move, target: moveTarget); MOVE(playerLeft, MOVE_CELEBRATE); SEND_OUT(playerLeft, 2); } + TURN { MOVE(opponentRight, MOVE_CELEBRATE, target: moveTarget); MOVE(playerLeft, MOVE_RETALIATE, target: opponentRight); } + TURN { MOVE(opponentRight, MOVE_CELEBRATE, target: moveTarget); MOVE(playerLeft, MOVE_RETALIATE, target: opponentRight); } + } SCENE { + if (move != MOVE_FLAME_BURST) + MESSAGE("Wynaut used Celebrate!"); + HP_BAR(opponentRight, captureDamage: &damage[0]); + HP_BAR(opponentRight, captureDamage: &damage[1]); + } THEN { + EXPECT_MUL_EQ(damage[1], Q_4_12(2), damage[0]); + } +} + +SINGLE_BATTLE_TEST("Retaliate works with Perish Song") +{ + s16 damage[2]; + GIVEN { + ASSUME(gMovesInfo[MOVE_PERISH_SONG].effect == EFFECT_PERISH_SONG); + PLAYER(SPECIES_WYNAUT); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_KOMMO_O) { Ability(ABILITY_SOUNDPROOF); } + } WHEN { + TURN { MOVE(opponent, MOVE_PERISH_SONG); } + TURN { MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(opponent, MOVE_CELEBRATE); } + TURN { MOVE(opponent, MOVE_CELEBRATE); SEND_OUT(player, 1); } + TURN { MOVE(player, MOVE_RETALIATE); } + TURN { MOVE(player, MOVE_RETALIATE); } + } SCENE { + HP_BAR(opponent, captureDamage: &damage[0]); + HP_BAR(opponent, captureDamage: &damage[1]); + } THEN { + EXPECT_MUL_EQ(damage[1], Q_4_12(2), damage[0]); + } +} + +SINGLE_BATTLE_TEST("Retaliate works with self-inflicted fainting") +{ + s16 damage[2]; + GIVEN { + ASSUME(gMovesInfo[MOVE_HEALING_WISH].effect == EFFECT_HEALING_WISH); + PLAYER(SPECIES_WYNAUT); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_HEALING_WISH); SEND_OUT(player, 1); } + TURN { MOVE(player, MOVE_RETALIATE); } + TURN { MOVE(player, MOVE_RETALIATE); } + } SCENE { + HP_BAR(opponent, captureDamage: &damage[0]); + HP_BAR(opponent, captureDamage: &damage[1]); + } THEN { + EXPECT_MUL_EQ(damage[1], Q_4_12(2), damage[0]); + } +} diff --git a/test/battle/move_effect/revelation_dance.c b/test/battle/move_effect/revelation_dance.c new file mode 100644 index 0000000000..9ab5d4a8e2 --- /dev/null +++ b/test/battle/move_effect/revelation_dance.c @@ -0,0 +1,149 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_REVELATION_DANCE].effect == EFFECT_REVELATION_DANCE); + ASSUME(gMovesInfo[MOVE_REVELATION_DANCE].danceMove == TRUE); + ASSUME(MoveHasAdditionalEffectSelfArg(MOVE_BURN_UP, MOVE_EFFECT_REMOVE_ARG_TYPE, TYPE_FIRE)); + ASSUME(gMovesInfo[MOVE_FORESTS_CURSE].effect == EFFECT_THIRD_TYPE); + ASSUME(gMovesInfo[MOVE_FORESTS_CURSE].argument == TYPE_GRASS); + ASSUME(gMovesInfo[MOVE_ROOST].effect == EFFECT_ROOST); +} + +SINGLE_BATTLE_TEST("Revelation Dance changes its type depending on the user's 1st Type") +{ + u16 speciesPlayer; + u16 speciesOpponent; + + PARAMETRIZE { speciesPlayer = SPECIES_ORICORIO_POM_POM; speciesOpponent = SPECIES_DUGTRIO; } + PARAMETRIZE { speciesPlayer = SPECIES_ORICORIO_BAILE; speciesOpponent = SPECIES_BLASTOISE; } + PARAMETRIZE { speciesPlayer = SPECIES_ORICORIO_PAU; speciesOpponent = SPECIES_LIEPARD; } + PARAMETRIZE { speciesPlayer = SPECIES_ORICORIO_SENSU; speciesOpponent = SPECIES_PERSIAN; } + + GIVEN { + PLAYER(speciesPlayer); + OPPONENT(speciesOpponent); + } WHEN { + TURN { MOVE(player, MOVE_REVELATION_DANCE); } + } SCENE { + if (speciesPlayer == SPECIES_ORICORIO_BAILE) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, player); + HP_BAR(opponent); + MESSAGE("It's not very effective…"); + } + else { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, player); + HP_BAR(opponent); + MESSAGE("It's not very effective…"); + } + } + } +} + +SINGLE_BATTLE_TEST("Revelation Dance changes its type depending on the user's 2nd Type if it has no 1st type") +{ + GIVEN { + PLAYER(SPECIES_ORICORIO_BAILE); + OPPONENT(SPECIES_EMPOLEON); + } WHEN { + TURN { MOVE(player, MOVE_BURN_UP); } + TURN { MOVE(player, MOVE_REVELATION_DANCE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); + HP_BAR(opponent); + NONE_OF { + MESSAGE("It's not very effective…"); + MESSAGE("It's super effective!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, player); + HP_BAR(opponent); + MESSAGE("It's not very effective…"); + } +} + +SINGLE_BATTLE_TEST("Revelation Dance changes its type depending on the user's 3rd Type if it has no 1st or 2nd type") +{ + GIVEN { + PLAYER(SPECIES_GROWLITHE); + OPPONENT(SPECIES_TREVENANT); + } WHEN { + TURN { MOVE(player, MOVE_BURN_UP); MOVE(opponent, MOVE_FORESTS_CURSE); } + TURN { MOVE(player, MOVE_REVELATION_DANCE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); + HP_BAR(opponent); + MESSAGE("It's super effective!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_FORESTS_CURSE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, player); + HP_BAR(opponent); + MESSAGE("It's not very effective…"); + } +} + +SINGLE_BATTLE_TEST("Revelation Dance becomes Typeless if its user is Typeless") +{ + u16 speciesOpponent; + + PARAMETRIZE { speciesOpponent = SPECIES_BLISSEY; } + PARAMETRIZE { speciesOpponent = SPECIES_BLASTOISE; } + PARAMETRIZE { speciesOpponent = SPECIES_CHARIZARD; } + PARAMETRIZE { speciesOpponent = SPECIES_VENUSAUR; } + PARAMETRIZE { speciesOpponent = SPECIES_GOLEM; } + PARAMETRIZE { speciesOpponent = SPECIES_AEGISLASH; } + + GIVEN { + PLAYER(SPECIES_GROWLITHE); + OPPONENT(speciesOpponent); + } WHEN { + TURN { MOVE(player, MOVE_BURN_UP); } + TURN { MOVE(player, MOVE_REVELATION_DANCE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, player); + HP_BAR(opponent); + NONE_OF { + MESSAGE("It's not very effective…"); + MESSAGE("It's super effective!"); + } + } +} + +SINGLE_BATTLE_TEST("Revelation Dance becomes Normal type if used by a Typeless Pokemon due to Roost") +{ + u16 speciesOpponent; + + PARAMETRIZE { speciesOpponent = SPECIES_SABLEYE; } + PARAMETRIZE { speciesOpponent = SPECIES_AGGRON; } + + ASSUME(B_ROOST_PURE_FLYING >= GEN_5); + + GIVEN { + PLAYER(SPECIES_ORICORIO_BAILE) { Ability(ABILITY_DANCER); } + OPPONENT(speciesOpponent); + } WHEN { + TURN { MOVE(player, MOVE_BURN_UP); MOVE(opponent, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_ROOST); MOVE(opponent, MOVE_REVELATION_DANCE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_BURN_UP, player); + HP_BAR(opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, opponent); + HP_BAR(player); + ABILITY_POPUP(player, ABILITY_DANCER); + if (speciesOpponent == SPECIES_AGGRON) { + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, player); + HP_BAR(opponent); + MESSAGE("It's not very effective…"); + } + else { + NONE_OF { + ANIMATION(ANIM_TYPE_MOVE, MOVE_REVELATION_DANCE, player); + HP_BAR(opponent); + MESSAGE("It's not very effective…"); + } + } + } +} diff --git a/test/battle/move_effect/round.c b/test/battle/move_effect/round.c new file mode 100644 index 0000000000..09209c79a2 --- /dev/null +++ b/test/battle/move_effect/round.c @@ -0,0 +1,114 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_ROUND].effect == EFFECT_ROUND); +} + +DOUBLE_BATTLE_TEST("Round allows other battlers which also selected the moves to immediately use the move, ignoring turn order") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_LAGGING_TAIL].holdEffect == HOLD_EFFECT_LAGGING_TAIL); + ASSUME(gMovesInfo[MOVE_IRON_HEAD].additionalEffects[0].moveEffect == MOVE_EFFECT_FLINCH); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LAGGING_TAIL); } + } WHEN { + TURN { + MOVE(playerRight, MOVE_CELEBRATE); + MOVE(opponentLeft, MOVE_ROUND, target: playerLeft); + MOVE(playerLeft, MOVE_IRON_HEAD, target: opponentRight); + MOVE(opponentRight, MOVE_ROUND, target: playerLeft); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROUND, opponentLeft); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_IRON_HEAD, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROUND, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_IRON_HEAD, playerLeft); + } +} + +DOUBLE_BATTLE_TEST("Round usages beyond the first one has double base power") +{ + s16 damage[2]; + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(opponentLeft, MOVE_ROUND, target: playerLeft); + MOVE(opponentRight, MOVE_ROUND, target: playerLeft); + } + } SCENE { + HP_BAR(playerLeft, captureDamage: &damage[0]); + HP_BAR(playerLeft, captureDamage: &damage[1]); + } THEN { + EXPECT_MUL_EQ(damage[0], Q_4_12(2.0), damage[1]); + } +} + +DOUBLE_BATTLE_TEST("Round still preserves the turn order outside of the other Round users moving immediately") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + MOVE(opponentLeft, MOVE_ROUND, target: playerLeft); + MOVE(playerRight, MOVE_CELEBRATE); + MOVE(playerLeft, MOVE_CELEBRATE); + MOVE(opponentRight, MOVE_ROUND, target: playerLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROUND, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROUND, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerLeft); + } +} +DOUBLE_BATTLE_TEST("Round still preserves the turn order outside of the other Round users moving immediately with switch") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { + SWITCH(playerRight, 2); + MOVE(opponentLeft, MOVE_ROUND, target: playerLeft); + MOVE(playerLeft, MOVE_CELEBRATE); + MOVE(opponentRight, MOVE_ROUND, target: playerLeft); + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROUND, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROUND, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerLeft); + } +} + +DOUBLE_BATTLE_TEST("Round causes opposing pokemon to use Round immediately") +{ + GIVEN { + ASSUME(gItemsInfo[ITEM_LAGGING_TAIL].holdEffect == HOLD_EFFECT_LAGGING_TAIL); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LAGGING_TAIL); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_CELEBRATE); MOVE(playerRight, MOVE_ROUND, target: opponentLeft); MOVE(playerLeft, MOVE_CELEBRATE, target: opponentRight); MOVE(opponentRight, MOVE_ROUND, target: playerLeft); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponentLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROUND, playerRight); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerLeft); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ROUND, opponentRight); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, playerLeft); + } +} diff --git a/test/battle/move_effect/shed_tail.c b/test/battle/move_effect/shed_tail.c index 55a8950d00..d69993b88b 100644 --- a/test/battle/move_effect/shed_tail.c +++ b/test/battle/move_effect/shed_tail.c @@ -85,3 +85,16 @@ SINGLE_BATTLE_TEST("Shed Tail's HP cost doesn't trigger effects that trigger on NOT MESSAGE("Wobbuffet's Air Balloon popped!"); } } + +AI_SINGLE_BATTLE_TEST("AI will use Shed Tail to pivot to another mon while in damage stalemate with player") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { Speed(100); Ability(ABILITY_RUN_AWAY); Moves(MOVE_TACKLE, MOVE_CELEBRATE); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(50); Ability(ABILITY_RUN_AWAY); Moves(MOVE_CONFUSION, MOVE_SHED_TAIL); } + OPPONENT(SPECIES_SCIZOR) { Speed(101); Moves(MOVE_CELEBRATE, MOVE_X_SCISSOR); } + } WHEN { + TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVE(opponent, MOVE_CONFUSION); } + TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVE(opponent, MOVE_SHED_TAIL); } + } +} diff --git a/test/battle/move_effect/sleep_talk.c b/test/battle/move_effect/sleep_talk.c index 0a42eb90e9..8ecd600f36 100644 --- a/test/battle/move_effect/sleep_talk.c +++ b/test/battle/move_effect/sleep_talk.c @@ -14,7 +14,7 @@ SINGLE_BATTLE_TEST("Sleep Talk fails if not asleep") u32 status; PARAMETRIZE { status = STATUS1_SLEEP; } PARAMETRIZE { status = STATUS1_NONE; } - + GIVEN { PLAYER(SPECIES_WOBBUFFET) { Status1(status); Moves(MOVE_SLEEP_TALK, MOVE_TACKLE, MOVE_POUND, MOVE_SCRATCH); } OPPONENT(SPECIES_WOBBUFFET); @@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Sleep Talk fails if not asleep") SINGLE_BATTLE_TEST("Sleep Talk works if user has Comatose") { - + GIVEN { PLAYER(SPECIES_KOMALA) { Moves(MOVE_SLEEP_TALK, MOVE_TACKLE, MOVE_POUND, MOVE_SCRATCH); } OPPONENT(SPECIES_WOBBUFFET); diff --git a/test/battle/move_effect/sticky_web.c b/test/battle/move_effect/sticky_web.c index 035568dd75..d6960f88d1 100644 --- a/test/battle/move_effect/sticky_web.c +++ b/test/battle/move_effect/sticky_web.c @@ -238,3 +238,36 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - no o EXPECT_EQ(opponentRight->statStages[STAT_SPEED], DEFAULT_STAT_STAGE); } } +SINGLE_BATTLE_TEST("Sticky Web is placed on the correct side after Explosion") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_EXPLOSION); MOVE(opponent, MOVE_STICKY_WEB); SEND_OUT(player, 1);} + } SCENE { + HP_BAR(player, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player); + MESSAGE("Wobbuffet fainted!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponent); + MESSAGE("A sticky web spreads out on the ground around your team!"); + } +} + +SINGLE_BATTLE_TEST("Sticky Web is placed on the correct side after Memento") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_MEMENTO); MOVE(opponent, MOVE_STICKY_WEB); SEND_OUT(player, 1); } + } SCENE { + HP_BAR(player, hp: 0); + ANIMATION(ANIM_TYPE_MOVE, MOVE_MEMENTO, player); + MESSAGE("Wobbuffet fainted!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponent); + MESSAGE("A sticky web spreads out on the ground around your team!"); + } +} diff --git a/test/battle/move_effect/stomping_tantrum.c b/test/battle/move_effect/stomping_tantrum.c new file mode 100644 index 0000000000..1a5870fdd0 --- /dev/null +++ b/test/battle/move_effect/stomping_tantrum.c @@ -0,0 +1,134 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gMovesInfo[MOVE_STOMPING_TANTRUM].effect == EFFECT_STOMPING_TANTRUM); +} + +SINGLE_BATTLE_TEST("Stomping Tatrum will deal double damage if user flinched on the previous turn") +{ + s16 damage[3]; + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WYNAUT); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); SWITCH(opponent, 1); } + TURN { MOVE(opponent, MOVE_FAKE_OUT); MOVE(player, MOVE_CELEBRATE); } + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); } + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[0]); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_FAKE_OUT, opponent); + NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[1]); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[2]); + } THEN { + EXPECT_MUL_EQ(damage[0], Q_4_12(2.0), damage[1]); + EXPECT_EQ(damage[0], damage[2]); + } +} + +SINGLE_BATTLE_TEST("Stomping Tatrum will deal double damage if user failed to attack due to paralysis") +{ + s16 damage[3]; + PASSES_RANDOMLY(25, 100, RNG_PARALYSIS); + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Speed(100); Item(ITEM_POTION); }; + OPPONENT(SPECIES_WOBBUFFET) { Speed(10); Item(ITEM_LUM_BERRY); }; + } WHEN { + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); MOVE(opponent, MOVE_THUNDER_WAVE); } + TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TRICK); } + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); } + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[0]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_THUNDER_WAVE, opponent); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_TRICK, opponent); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[1]); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[2]); + } THEN { + EXPECT_MUL_EQ(damage[0], Q_4_12(2.0), damage[1]); + EXPECT_EQ(damage[0], damage[2]); + } +} + +SINGLE_BATTLE_TEST("Stomping Tatrum will not deal double damage if target protects") +{ + s16 damage[2]; + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); } + TURN { MOVE(opponent, MOVE_PROTECT); MOVE(player, MOVE_STOMPING_TANTRUM); } + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[0]); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, opponent); + MESSAGE("Foe Wobbuffet protected itself!"); + + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[1]); + } THEN { + EXPECT_EQ(damage[0], damage[1]); + } +} + +SINGLE_BATTLE_TEST("Stomping Tatrum will not deal double damage if it failed on the previous turn cause of Protect") +{ + s16 damage[2]; + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_BRIGHTPOWDER); }; + } WHEN { + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); } + TURN { MOVE(player, MOVE_STOMPING_TANTRUM, hit: FALSE); } + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[0]); + MESSAGE("Wobbuffet's attack missed!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[1]); + } THEN { + EXPECT_EQ(damage[0], damage[1]); + } +} + +SINGLE_BATTLE_TEST("Stomping Tatrum will deal double damage if user was immune to previous move") +{ + s16 damage[2]; + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_PIDGEY); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); SWITCH(opponent, 1); } + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); SWITCH(opponent, 0); } + TURN { MOVE(player, MOVE_STOMPING_TANTRUM); SWITCH(opponent, 1); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[0]); + MESSAGE("It doesn't affect Foe Pidgey…"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STOMPING_TANTRUM, player); + HP_BAR(opponent, captureDamage: &damage[1]); + } THEN { + EXPECT_MUL_EQ(damage[0], Q_4_12(2.0), damage[1]); + } +} diff --git a/test/battle/move_effect/tar_shot.c b/test/battle/move_effect/tar_shot.c index 61aca1bec1..2b780577ec 100644 --- a/test/battle/move_effect/tar_shot.c +++ b/test/battle/move_effect/tar_shot.c @@ -42,3 +42,46 @@ SINGLE_BATTLE_TEST("Tar Shot doubles the effectiveness of Fire-type moves used o } } +SINGLE_BATTLE_TEST("Tar Shot does not affect Pokemon that are Terastallized") +{ + s16 damage[2]; + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_NORMAL); } + OPPONENT(SPECIES_WOBBUFFET) ; + } WHEN { + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_EMBER); } + TURN { MOVE(opponent, MOVE_TAR_SHOT); } + TURN { MOVE(opponent, MOVE_EMBER); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, opponent); + HP_BAR(player, captureDamage: &damage[0]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TAR_SHOT, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, opponent); + HP_BAR(player, captureDamage: &damage[1]); + NOT MESSAGE("It's super effective!"); + } THEN { + EXPECT_EQ(damage[0], damage[1]); + } +} + +SINGLE_BATTLE_TEST("Tar Shot does affect Pokemon that Terastallized after Tar Shot status was applied") +{ + s16 damage[2]; + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_NORMAL); } + OPPONENT(SPECIES_WOBBUFFET) ; + } WHEN { + TURN { MOVE(opponent, MOVE_EMBER); } + TURN { MOVE(opponent, MOVE_TAR_SHOT); } + TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_EMBER); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, opponent); + HP_BAR(player, captureDamage: &damage[0]); + ANIMATION(ANIM_TYPE_MOVE, MOVE_TAR_SHOT, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_EMBER, opponent); + HP_BAR(player, captureDamage: &damage[1]); + MESSAGE("It's super effective!"); + } THEN { + EXPECT_MUL_EQ(damage[0], Q_4_12(2.0), damage[1]); + } +} diff --git a/test/battle/move_effect/telekinesis.c b/test/battle/move_effect/telekinesis.c index 4210b1865b..3da96a08b9 100644 --- a/test/battle/move_effect/telekinesis.c +++ b/test/battle/move_effect/telekinesis.c @@ -71,4 +71,4 @@ SINGLE_BATTLE_TEST("Telekinesis makes the target immune to Ground-type attacks") TO_DO_BATTLE_TEST("Baton Pass passes Telekinesis' effect"); //Bulbapedia doesn't confirm what happens with Diglett, Dugtrio, Sandygast and Palossand, so it needs to be tested in-game. -TO_DO_BATTLE_TEST("Baton Pass removes Telekinesis' effect disappears if the switching-in mon is Mega Gengar"); +TO_DO_BATTLE_TEST("Baton Pass removes Telekinesis' effect disappears if the switching-in mon is Mega Gengar"); diff --git a/test/battle/move_effect/weather_ball.c b/test/battle/move_effect/weather_ball.c index 1656b60d87..432e5f79f7 100644 --- a/test/battle/move_effect/weather_ball.c +++ b/test/battle/move_effect/weather_ball.c @@ -78,3 +78,5 @@ SINGLE_BATTLE_TEST("Weather Ball doubles its power and turns to an Ice-type move EXPECT_MUL_EQ(results[0].damage, Q_4_12(4.0), results[1].damage); // double base power + type effectiveness. } } + +TO_DO_BATTLE_TEST("Weather Ball doesn't double its power or change type if Cloud Nine/Air Lock is on the field"); diff --git a/test/battle/move_effects_combined/triple_arrows.c b/test/battle/move_effects_combined/triple_arrows.c index 4286a9ba07..383fce6cbf 100644 --- a/test/battle/move_effects_combined/triple_arrows.c +++ b/test/battle/move_effects_combined/triple_arrows.c @@ -46,10 +46,10 @@ SINGLE_BATTLE_TEST("Triple Arrows makes the foe flinch 30% of the time") SINGLE_BATTLE_TEST("Triple Arrows lands a critical hit") { - ASSUME(B_CRIT_CHANCE >= GEN_7); - ASSUME(gMovesInfo[MOVE_TRIPLE_ARROWS].criticalHitStage == 1); PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT); GIVEN { + ASSUME(B_CRIT_CHANCE >= GEN_7); + ASSUME(gMovesInfo[MOVE_TRIPLE_ARROWS].criticalHitStage == 1); PLAYER(SPECIES_WOBBUFFET); OPPONENT(SPECIES_WOBBUFFET); } WHEN { diff --git a/test/battle/terrain/electric.c b/test/battle/terrain/electric.c index 2227afdcd9..c39bfbbb71 100644 --- a/test/battle/terrain/electric.c +++ b/test/battle/terrain/electric.c @@ -34,7 +34,7 @@ SINGLE_BATTLE_TEST("Electric Terrain activates Electric Seed and Mimicry") ABILITY_POPUP(opponent); MESSAGE("Foe Stunfisk's type changed to Electric!"); } THEN { - EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_ELECTRIC); + EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[0], TYPE_ELECTRIC); } } diff --git a/test/battle/terrain/grassy.c b/test/battle/terrain/grassy.c index 862c9052fd..5840f0310c 100644 --- a/test/battle/terrain/grassy.c +++ b/test/battle/terrain/grassy.c @@ -30,7 +30,7 @@ SINGLE_BATTLE_TEST("Grassy Terrain activates Grassy Seed and Mimicry") ABILITY_POPUP(opponent); MESSAGE("Foe Stunfisk's type changed to Grass!"); } THEN { - EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_GRASS); + EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[0], TYPE_GRASS); } } diff --git a/test/battle/terrain/misty.c b/test/battle/terrain/misty.c index cd89b2d9ab..fbf04fcba9 100644 --- a/test/battle/terrain/misty.c +++ b/test/battle/terrain/misty.c @@ -34,7 +34,7 @@ SINGLE_BATTLE_TEST("Misty Terrain activates Misty Seed and Mimicry") ABILITY_POPUP(opponent); MESSAGE("Foe Stunfisk's type changed to Fairy!"); } THEN { - EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_FAIRY); + EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[0], TYPE_FAIRY); } } diff --git a/test/battle/terrain/psychic.c b/test/battle/terrain/psychic.c index 0c13122fa6..44a89598d2 100644 --- a/test/battle/terrain/psychic.c +++ b/test/battle/terrain/psychic.c @@ -33,7 +33,7 @@ SINGLE_BATTLE_TEST("Psychic Terrain activates Psychic Seed and Mimicry") ABILITY_POPUP(opponent); MESSAGE("Foe Stunfisk's type changed to Psychic!"); } THEN { - EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].type1, TYPE_PSYCHIC); + EXPECT_EQ(gBattleMons[B_POSITION_OPPONENT_LEFT].types[0], TYPE_PSYCHIC); } } diff --git a/test/battle/weather/hail.c b/test/battle/weather/hail.c index 5caeb84891..4210a22d9e 100644 --- a/test/battle/weather/hail.c +++ b/test/battle/weather/hail.c @@ -70,3 +70,15 @@ DOUBLE_BATTLE_TEST("Hail deals damage based on turn order") HP_BAR(playerRight); } } + +SINGLE_BATTLE_TEST("Hail damage rounds properly when maxHP < 16") +{ + GIVEN { + PLAYER(SPECIES_MAGIKARP) { Level(1); MaxHP(11); HP(11); } + OPPONENT(SPECIES_GLALIE); + } WHEN { + TURN { MOVE(opponent, MOVE_HAIL); } + } SCENE { + HP_BAR(player, damage: 1); + } +} diff --git a/test/battle/weather/sandstorm.c b/test/battle/weather/sandstorm.c index 63b24afd7e..1673c26f99 100644 --- a/test/battle/weather/sandstorm.c +++ b/test/battle/weather/sandstorm.c @@ -82,3 +82,15 @@ DOUBLE_BATTLE_TEST("Sandstorm deals damage based on turn order") HP_BAR(playerRight); } } + +SINGLE_BATTLE_TEST("Sandstorm damage rounds properly when maxHP < 16") +{ + GIVEN { + PLAYER(SPECIES_MAGIKARP) { Level(1); MaxHP(11); HP(11); } + OPPONENT(SPECIES_SANDSLASH); + } WHEN { + TURN { MOVE(opponent, MOVE_SANDSTORM); } + } SCENE { + HP_BAR(player, damage: 1); + } +} diff --git a/test/random.c b/test/random.c index 0232ff1547..238a76467e 100644 --- a/test/random.c +++ b/test/random.c @@ -196,13 +196,8 @@ TEST("RandomElement generates a uniform distribution") TEST("RandomUniform mul-based faster than mod-based (compile-time)") { - #if HQ_RANDOM == TRUE - const u32 expectedMulSum = 6; - const u32 expectedModSum = 4; - #else - const u32 expectedMulSum = 3; - const u32 expectedModSum = 4; - #endif + const u32 expectedMulSum = 6; + const u32 expectedModSum = 4; struct Benchmark mulBenchmark, modBenchmark; u32 mulSum = 0, modSum = 0; @@ -234,13 +229,8 @@ TEST("RandomUniform mul-based faster than mod-based (compile-time)") TEST("RandomUniform mul-based faster than mod-based (run-time)") { - #if HQ_RANDOM == TRUE - const u32 expectedMulSum = 289; - const u32 expectedModSum = 205; - #else - const u32 expectedMulSum = 232; - const u32 expectedModSum = 249; - #endif + const u32 expectedMulSum = 289; + const u32 expectedModSum = 205; u32 i; struct Benchmark mulBenchmark, modBenchmark; u32 mulSum = 0, modSum = 0; @@ -264,7 +254,6 @@ TEST("RandomUniform mul-based faster than mod-based (run-time)") EXPECT_EQ(modSum, expectedModSum); } -#if HQ_RANDOM == TRUE TEST("Thumb and C SFC32 implementations produce the same results") { u32 thumbSum; @@ -285,5 +274,4 @@ TEST("Thumb and C SFC32 implementations produce the same results") } EXPECT_EQ(thumbSum, cSum); -} -#endif \ No newline at end of file +} \ No newline at end of file diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c index 11432bd12b..9a1ad8d708 100644 --- a/test/test_runner_battle.c +++ b/test/test_runner_battle.c @@ -35,20 +35,12 @@ #define STATE gBattleTestRunnerState #define DATA gBattleTestRunnerState->data -#if HQ_RANDOM == TRUE #define RNG_SEED_DEFAULT {0, 0, 0, 0} static inline bool32 RngSeedNotDefault(const rng_value_t *seed) { return (seed->a | seed->b | seed->c | seed->ctr) != 0; } -#else -#define RNG_SEED_DEFAULT 0x00000000 -static inline bool32 RngSeedNotDefault(const rng_value_t *seed) -{ - return *seed != RNG_SEED_DEFAULT; -} -#endif #undef Q_4_12 #define Q_4_12(n) (s32)((n) * 4096) @@ -410,7 +402,7 @@ u32 RandomUniformExcept(enum RandomTag tag, u32 lo, u32 hi, bool32 (*reject)(u32 if (STATE->trials == 1) { u32 n = 0, i; - for (i = lo; i < hi; i++) + for (i = lo; i <= hi; i++) if (!reject(i)) n++; STATE->trials = n; @@ -769,7 +761,7 @@ static u32 CountAiExpectMoves(struct ExpectedAIAction *expectedAction, u32 battl u32 i, countExpected = 0; for (i = 0; i < MAX_MON_MOVES; i++) { - if (gBitTable[i] & expectedAction->moveSlots) + if ((1u << i) & expectedAction->moveSlots) { if (printLog) PrintAiMoveLog(battlerId, i, gBattleMons[battlerId].moves[i], gBattleStruct->aiFinalScore[battlerId][expectedAction->target][i]); @@ -801,7 +793,7 @@ void TestRunner_Battle_CheckChosenMove(u32 battlerId, u32 moveId, u32 target) for (i = 0; i < MAX_MON_MOVES; i++) { - if (gBitTable[i] & expectedAction->moveSlots) + if ((1u << i) & expectedAction->moveSlots) { expectedMoveId = gBattleMons[battlerId].moves[i]; if (!expectedAction->notMove) @@ -917,8 +909,8 @@ static void CheckIfMaxScoreEqualExpectMove(u32 battlerId, s32 target, struct Exp // 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])) + && (aiAction->moveSlots & (1u << i)) + && !(aiAction->moveSlots & (1u << bestScoreId))) { Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: EXPECT_MOVE %S has the same best score(%d) as not expected MOVE %S", filename, aiAction->sourceLine, GetMoveName(moves[i]), scores[i], GetMoveName(moves[bestScoreId])); @@ -926,8 +918,8 @@ static void CheckIfMaxScoreEqualExpectMove(u32 battlerId, s32 target, struct Exp // 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])) + && (aiAction->moveSlots & (1u << i)) + && !(aiAction->moveSlots & (1u << bestScoreId))) { Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: NOT_EXPECT_MOVE %S has the same best score(%d) as MOVE %S", filename, aiAction->sourceLine, GetMoveName(moves[i]), scores[i], GetMoveName(moves[bestScoreId])); @@ -940,9 +932,9 @@ static void PrintAiMoveLog(u32 battlerId, u32 moveSlot, u32 moveId, s32 totalSco s32 i, scoreFromLogs = 0; if (!DATA.logAI) return; - if (DATA.aiLogPrintedForMove[battlerId] & gBitTable[moveSlot]) return; + if (DATA.aiLogPrintedForMove[battlerId] & (1u << moveSlot)) return; - DATA.aiLogPrintedForMove[battlerId] |= gBitTable[moveSlot]; + DATA.aiLogPrintedForMove[battlerId] |= 1u << moveSlot; Test_MgbaPrintf("Score Log for move %S:\n", GetMoveName(moveId)); for (i = 0; i < MAX_AI_LOG_LINES; i++) { @@ -1327,7 +1319,7 @@ void TestRunner_Battle_AfterLastTurn(void) } STATE->runThen = TRUE; - STATE->runFinally = STATE->runParameter + 1 == STATE->parameters; + STATE->runFinally = STATE->runParameter + 1 == STATE->parameters && STATE->runTrial + 1 >= STATE->trials; InvokeTestFunction(test); STATE->runThen = FALSE; STATE->runFinally = FALSE; @@ -1357,18 +1349,15 @@ static void CB2_BattleTest_NextParameter(void) static inline rng_value_t MakeRngValue(const u16 seed) { - #if HQ_RANDOM == TRUE - int i; - rng_value_t result = {0, 0, seed, 1}; - for (i = 0; i < 16; i++) - { + int i; + rng_value_t result = {0, 0, seed, 1}; + for (i = 0; i < 16; i++) + { _SFC32_Next(&result); - } - return result; - #else - return ISO_RANDOMIZE1(seed); - #endif + } + return result; } + static void CB2_BattleTest_NextTrial(void) { ClearFlagAfterTest(); @@ -1452,7 +1441,7 @@ void Randomly(u32 sourceLine, u32 passes, u32 trials, struct RandomlyContext ctx { 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(test->resultsSize > 0 && STATE->parametersCount > 1, "PASSES_RANDOMLY is incompatible with results"); INVALID_IF(passes > trials, "%d passes specified, but only %d trials", passes, trials); STATE->rngTag = ctx.tag; STATE->rngTrialOffset = 0; @@ -2186,7 +2175,7 @@ static void TryMarkExpectMove(u32 sourceLine, struct BattlePokemon *battler, str id = DATA.expectedAiActionIndex[battlerId]; DATA.expectedAiActions[battlerId][id].type = B_ACTION_USE_MOVE; - DATA.expectedAiActions[battlerId][id].moveSlots |= gBitTable[moveSlot]; + DATA.expectedAiActions[battlerId][id].moveSlots |= 1 << moveSlot; DATA.expectedAiActions[battlerId][id].target = target; DATA.expectedAiActions[battlerId][id].explicitTarget = ctx->explicitTarget; DATA.expectedAiActions[battlerId][id].sourceLine = sourceLine; diff --git a/tools/learnset_helpers/teachable.py b/tools/learnset_helpers/teachable.py index 92ed8562d8..eb109e7a46 100644 --- a/tools/learnset_helpers/teachable.py +++ b/tools/learnset_helpers/teachable.py @@ -13,7 +13,7 @@ with open("./include/config/pokemon.h", "r") as file: def parse_mon_name(name): return re.sub(r'(?!^)([A-Z]+)', r'_\1', name).upper() - + tm_moves = [] tutor_moves = [] @@ -196,7 +196,7 @@ for move in tm_moves: header += "// " + longest_move_name * "*" + " //\n" header_print(tutor_title) tutor_moves.sort() # alphabetically sort tutor moves for easier referencing -for move in tutor_moves: +for move in tutor_moves: header_print("- " + move) header += "// " + longest_move_name * "*" + " //\n" header_print(universal_title) diff --git a/tools/preproc/asm_file.cpp b/tools/preproc/asm_file.cpp index ca8b8cc4ae..39d352bbd7 100644 --- a/tools/preproc/asm_file.cpp +++ b/tools/preproc/asm_file.cpp @@ -673,14 +673,14 @@ int AsmFile::FindLastLineNumber(std::string& filename) if (pos < 0) RaiseError("line indicator for header file not found before `enum`"); - + pos++; while (m_buffer[pos] == ' ' || m_buffer[pos] == '\t') pos++; if (!IsAsciiDigit(m_buffer[pos])) RaiseError("malformatted line indicator found before `enum`, expected line number"); - + unsigned n = 0; int digit = 0; while ((digit = ConvertDigit(m_buffer[pos++], 10)) != -1) @@ -715,7 +715,7 @@ int AsmFile::FindLastLineNumber(std::string& filename) filename += c; } - + return n + linebreaks - 1; } diff --git a/tools/trainerproc/main.c b/tools/trainerproc/main.c index bd18995a2e..b410e810b0 100644 --- a/tools/trainerproc/main.c +++ b/tools/trainerproc/main.c @@ -425,12 +425,6 @@ static bool match_eol(struct Parser *p) return true; } -__attribute__((warn_unused_result)) -static bool match_empty_line(struct Parser *p) -{ - return match_eol(p); -} - __attribute__((warn_unused_result)) static bool match_int(struct Parser *p, int *i) { @@ -457,6 +451,23 @@ static bool match_int(struct Parser *p, int *i) return true; } +__attribute__((warn_unused_result)) +static bool match_empty_line(struct Parser *p) +{ + struct Parser p_ = *p; + if (match_exact(&p_, "# ")) { + int line; + if (match_int(&p_, &line)) { + struct Token t; + match_until_eol(&p_, &t); + p_.location.line = line - 1; + *p = p_; + } + } + + return match_eol(p); +} + __attribute__((warn_unused_result)) static bool match_identifier(struct Parser *p, struct Token *t) {